More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 72 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem Bonds | 11650449 | 1511 days ago | IN | 0 ETH | 0.00154547 | ||||
Redeem Bonds | 11646520 | 1512 days ago | IN | 0 ETH | 0.00099612 | ||||
Redeem Bonds | 11646504 | 1512 days ago | IN | 0 ETH | 0.00187132 | ||||
Redeem Bonds | 11646504 | 1512 days ago | IN | 0 ETH | 0.00227054 | ||||
Redeem Bonds | 11646485 | 1512 days ago | IN | 0 ETH | 0.00099612 | ||||
Redeem Bonds | 11646450 | 1512 days ago | IN | 0 ETH | 0.00099468 | ||||
Redeem Bonds | 11646152 | 1512 days ago | IN | 0 ETH | 0.0019932 | ||||
Redeem Bonds | 11646061 | 1512 days ago | IN | 0 ETH | 0.01039013 | ||||
Redeem Bonds | 11645862 | 1512 days ago | IN | 0 ETH | 0.03020311 | ||||
Get Reserve | 11644359 | 1512 days ago | IN | 0 ETH | 0.00176976 | ||||
Redeem Bonds | 11644347 | 1512 days ago | IN | 0 ETH | 0.00370176 | ||||
Redeem Bonds | 11644225 | 1512 days ago | IN | 0 ETH | 0.00451867 | ||||
Redeem Bonds | 11644211 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644209 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644205 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644204 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644202 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644201 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644200 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644199 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644194 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644193 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644191 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644189 | 1512 days ago | IN | 0 ETH | 0.0254295 | ||||
Redeem Bonds | 11644188 | 1512 days ago | IN | 0 ETH | 0.0254295 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Treasury
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-09 */ // File: @openzeppelin/contracts/math/Math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/interfaces/IOracle.sol pragma solidity ^0.6.0; interface IOracle { function update() external; function consult(address token, uint256 amountIn) external view returns (uint256 amountOut); // function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestamp); } // File: contracts/interfaces/IBoardroom.sol pragma solidity ^0.6.0; interface IBoardroom { function allocateSeigniorage(uint256 amount) external; } // File: contracts/interfaces/IBasisAsset.sol pragma solidity ^0.6.0; interface IBasisAsset { function mint(address recipient, uint256 amount) external returns (bool); function burn(uint256 amount) external; function burnFrom(address from, uint256 amount) external; function isOperator() external returns (bool); function operator() external view returns (address); } // File: contracts/interfaces/ISimpleERCFund.sol pragma solidity ^0.6.0; interface ISimpleERCFund { function deposit( address token, uint256 amount, string memory reason ) external; function withdraw( address token, uint256 amount, address to, string memory reason ) external; } // File: contracts/lib/Babylonian.sol pragma solidity ^0.6.0; library Babylonian { function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } // File: contracts/lib/FixedPoint.sol pragma solidity ^0.6.0; // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) library FixedPoint { // range: [0, 2**112 - 1] // resolution: 1 / 2**112 struct uq112x112 { uint224 _x; } // range: [0, 2**144 - 1] // resolution: 1 / 2**112 struct uq144x112 { uint256 _x; } uint8 private constant RESOLUTION = 112; uint256 private constant Q112 = uint256(1) << RESOLUTION; uint256 private constant Q224 = Q112 << RESOLUTION; // encode a uint112 as a UQ112x112 function encode(uint112 x) internal pure returns (uq112x112 memory) { return uq112x112(uint224(x) << RESOLUTION); } // encodes a uint144 as a UQ144x112 function encode144(uint144 x) internal pure returns (uq144x112 memory) { return uq144x112(uint256(x) << RESOLUTION); } // divide a UQ112x112 by a uint112, returning a UQ112x112 function div(uq112x112 memory self, uint112 x) internal pure returns (uq112x112 memory) { require(x != 0, 'FixedPoint: DIV_BY_ZERO'); return uq112x112(self._x / uint224(x)); } // multiply a UQ112x112 by a uint, returning a UQ144x112 // reverts on overflow function mul(uq112x112 memory self, uint256 y) internal pure returns (uq144x112 memory) { uint256 z; require( y == 0 || (z = uint256(self._x) * y) / y == uint256(self._x), 'FixedPoint: MULTIPLICATION_OVERFLOW' ); return uq144x112(z); } // returns a UQ112x112 which represents the ratio of the numerator to the denominator // equivalent to encode(numerator).div(denominator) function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) { require(denominator > 0, 'FixedPoint: DIV_BY_ZERO'); return uq112x112((uint224(numerator) << RESOLUTION) / denominator); } // decode a UQ112x112 into a uint112 by truncating after the radix point function decode(uq112x112 memory self) internal pure returns (uint112) { return uint112(self._x >> RESOLUTION); } // decode a UQ144x112 into a uint144 by truncating after the radix point function decode144(uq144x112 memory self) internal pure returns (uint144) { return uint144(self._x >> RESOLUTION); } // take the reciprocal of a UQ112x112 function reciprocal(uq112x112 memory self) internal pure returns (uq112x112 memory) { require(self._x != 0, 'FixedPoint: ZERO_RECIPROCAL'); return uq112x112(uint224(Q224 / self._x)); } // square root of a UQ112x112 function sqrt(uq112x112 memory self) internal pure returns (uq112x112 memory) { return uq112x112(uint224(Babylonian.sqrt(uint256(self._x)) << 56)); } } // File: contracts/lib/Safe112.sol pragma solidity ^0.6.0; library Safe112 { function add(uint112 a, uint112 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'Safe112: addition overflow'); return c; } function sub(uint112 a, uint112 b) internal pure returns (uint256) { return sub(a, b, 'Safe112: subtraction overflow'); } function sub( uint112 a, uint112 b, string memory errorMessage ) internal pure returns (uint112) { require(b <= a, errorMessage); uint112 c = a - b; return c; } function mul(uint112 a, uint112 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'Safe112: multiplication overflow'); return c; } function div(uint112 a, uint112 b) internal pure returns (uint256) { return div(a, b, 'Safe112: division by zero'); } function div( uint112 a, uint112 b, string memory errorMessage ) internal pure returns (uint112) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint112 c = a / b; return c; } function mod(uint112 a, uint112 b) internal pure returns (uint256) { return mod(a, b, 'Safe112: modulo by zero'); } function mod( uint112 a, uint112 b, string memory errorMessage ) internal pure returns (uint112) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/owner/Operator.sol pragma solidity ^0.6.0; contract Operator is Context, Ownable { address private _operator; event OperatorTransferred( address indexed previousOperator, address indexed newOperator ); constructor() internal { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); } function operator() public view returns (address) { return _operator; } modifier onlyOperator() { require( _operator == msg.sender, 'operator: caller is not the operator' ); _; } function isOperator() public view returns (bool) { return _msgSender() == _operator; } function transferOperator(address newOperator_) public onlyOwner { _transferOperator(newOperator_); } function _transferOperator(address newOperator_) internal { require( newOperator_ != address(0), 'operator: zero address given for new operator' ); emit OperatorTransferred(address(0), newOperator_); _operator = newOperator_; } } // File: contracts/utils/Epoch.sol pragma solidity ^0.6.0; contract Epoch is Operator { using SafeMath for uint256; uint256 private period; uint256 private startTime; uint256 private epoch; /* ========== CONSTRUCTOR ========== */ constructor( uint256 _period, uint256 _startTime, uint256 _startEpoch ) public { period = _period; startTime = _startTime; epoch = _startEpoch; } /* ========== Modifier ========== */ modifier checkStartTime { require(now >= startTime, 'Epoch: not started yet'); _; } modifier checkEpoch { require(now >= nextEpochPoint(), 'Epoch: not allowed'); _; epoch = epoch.add(1); } /* ========== VIEW FUNCTIONS ========== */ function getCurrentEpoch() public view returns (uint256) { return epoch; } function getPeriod() public view returns (uint256) { return period; } function getStartTime() public view returns (uint256) { return startTime; } function nextEpochPoint() public view returns (uint256) { return startTime.add(epoch.mul(period)); } /* ========== GOVERNANCE ========== */ function setPeriod(uint256 _period) external onlyOperator { period = _period; } } // File: contracts/utils/ContractGuard.sol pragma solidity ^0.6.12; contract ContractGuard { mapping(uint256 => mapping(address => bool)) private _status; function checkSameOriginReentranted() internal view returns (bool) { return _status[block.number][tx.origin]; } function checkSameSenderReentranted() internal view returns (bool) { return _status[block.number][msg.sender]; } modifier onlyOneBlock() { require( !checkSameOriginReentranted(), 'ContractGuard: one block, one function' ); require( !checkSameSenderReentranted(), 'ContractGuard: one block, one function' ); _; _status[block.number][tx.origin] = true; _status[block.number][msg.sender] = true; } } // File: contracts/Treasury.sol pragma solidity ^0.6.0; /** * @title Basis Cash Treasury contract * @notice Monetary policy logic to adjust supplies of basis cash assets * @author Summer Smith & Rick Sanchez */ contract Treasury is ContractGuard, Epoch { using FixedPoint for *; using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; using Safe112 for uint112; /* ========== STATE VARIABLES ========== */ // ========== FLAGS bool public migrated = false; bool public initialized = false; // ========== CORE address public fund; address public cash; address public bond; address public share; address public boardroom; address public bondOracle; address public seigniorageOracle; // ========== PARAMS uint256 public cashPriceOne; uint256 public cashPriceCeiling; uint256 public bondDepletionFloor; uint256 private accumulatedSeigniorage = 0; uint256 public fundAllocationRate = 1; // % /* ========== CONSTRUCTOR ========== */ constructor( address _cash, address _bond, address _share, address _bondOracle, address _seigniorageOracle, address _boardroom, address _fund, uint256 _startTime ) public Epoch(1 days, _startTime, 0) { cash = _cash; bond = _bond; share = _share; bondOracle = _bondOracle; seigniorageOracle = _seigniorageOracle; boardroom = _boardroom; fund = _fund; cashPriceOne = 10**18; cashPriceCeiling = uint256(101).mul(cashPriceOne).div(10**2); bondDepletionFloor = uint256(1000).mul(cashPriceOne); } /* =================== Modifier =================== */ modifier checkMigration { require(!migrated, 'Treasury: migrated'); _; } modifier checkOperator { require( IBasisAsset(cash).operator() == address(this) && IBasisAsset(bond).operator() == address(this) && IBasisAsset(share).operator() == address(this) && Operator(boardroom).operator() == address(this), 'Treasury: need more permission' ); _; } /* ========== VIEW FUNCTIONS ========== */ // budget function getReserve() public view returns (uint256) { return accumulatedSeigniorage; } // oracle function getBondOraclePrice() public view returns (uint256) { return _getCashPrice(bondOracle); } function getSeigniorageOraclePrice() public view returns (uint256) { return _getCashPrice(seigniorageOracle); } function _getCashPrice(address oracle) internal view returns (uint256) { try IOracle(oracle).consult(cash, 1e18) returns (uint256 price) { return price.mul(1e12); // for USDT decimal } catch { revert('Treasury: failed to consult cash price from the oracle'); } } /* ========== GOVERNANCE ========== */ function initialize() public checkOperator { require(!initialized, 'Treasury: initialized'); // burn all of it's balance IBasisAsset(cash).burn(IERC20(cash).balanceOf(address(this))); // set accumulatedSeigniorage to it's balance accumulatedSeigniorage = IERC20(cash).balanceOf(address(this)); initialized = true; emit Initialized(msg.sender, block.number); } function migrate(address target) public onlyOperator checkOperator { require(!migrated, 'Treasury: migrated'); // cash Operator(cash).transferOperator(target); Operator(cash).transferOwnership(target); IERC20(cash).transfer(target, IERC20(cash).balanceOf(address(this))); // bond Operator(bond).transferOperator(target); Operator(bond).transferOwnership(target); IERC20(bond).transfer(target, IERC20(bond).balanceOf(address(this))); // share Operator(share).transferOperator(target); Operator(share).transferOwnership(target); IERC20(share).transfer(target, IERC20(share).balanceOf(address(this))); migrated = true; emit Migration(target); } function setFund(address newFund) public onlyOperator { fund = newFund; emit ContributionPoolChanged(msg.sender, newFund); } function setFundAllocationRate(uint256 rate) public onlyOperator { fundAllocationRate = rate; emit ContributionPoolRateChanged(msg.sender, rate); } /* ========== MUTABLE FUNCTIONS ========== */ function _updateCashPrice() internal { try IOracle(bondOracle).update() {} catch {} try IOracle(seigniorageOracle).update() {} catch {} } function buyBonds(uint256 amount, uint256 targetPrice) external onlyOneBlock checkMigration checkStartTime checkOperator { require(amount > 0, 'Treasury: cannot purchase bonds with zero amount'); uint256 cashPrice = _getCashPrice(bondOracle); require(cashPrice == targetPrice, 'Treasury: cash price moved'); require( cashPrice < cashPriceOne, // price < $1 'Treasury: cashPrice not eligible for bond purchase' ); uint256 bondPrice = cashPrice; IBasisAsset(cash).burnFrom(msg.sender, amount); IBasisAsset(bond).mint(msg.sender, amount.mul(1e18).div(bondPrice)); _updateCashPrice(); emit BoughtBonds(msg.sender, amount); } function redeemBonds(uint256 amount, uint256 targetPrice) external onlyOneBlock checkMigration checkStartTime checkOperator { require(amount > 0, 'Treasury: cannot redeem bonds with zero amount'); uint256 cashPrice = _getCashPrice(bondOracle); require(cashPrice == targetPrice, 'Treasury: cash price moved'); require( cashPrice > cashPriceCeiling, // price > $1.01 'Treasury: cashPrice not eligible for bond purchase' ); require( IERC20(cash).balanceOf(address(this)) >= amount, 'Treasury: treasury has no more budget' ); accumulatedSeigniorage = accumulatedSeigniorage.sub( Math.min(accumulatedSeigniorage, amount) ); IBasisAsset(bond).burnFrom(msg.sender, amount); IERC20(cash).safeTransfer(msg.sender, amount); _updateCashPrice(); emit RedeemedBonds(msg.sender, amount); } function allocateSeigniorage() external onlyOneBlock checkMigration checkStartTime checkEpoch checkOperator { _updateCashPrice(); uint256 cashPrice = _getCashPrice(seigniorageOracle); if (cashPrice <= cashPriceCeiling) { return; // just advance epoch instead revert } // circulating supply uint256 cashSupply = IERC20(cash).totalSupply().sub( accumulatedSeigniorage ); uint256 percentage = cashPrice.sub(cashPriceOne); uint256 seigniorage = cashSupply.mul(percentage).div(1e18); IBasisAsset(cash).mint(address(this), seigniorage); // ======================== BIP-3 uint256 fundReserve = seigniorage.mul(fundAllocationRate).div(100); if (fundReserve > 0) { IERC20(cash).safeApprove(fund, fundReserve); ISimpleERCFund(fund).deposit( cash, fundReserve, 'Treasury: Seigniorage Allocation' ); emit ContributionPoolFunded(now, fundReserve); } seigniorage = seigniorage.sub(fundReserve); // ======================== BIP-4 uint256 treasuryReserve = Math.min( seigniorage, IERC20(bond).totalSupply().sub(accumulatedSeigniorage) ); if (treasuryReserve > 0) { accumulatedSeigniorage = accumulatedSeigniorage.add( treasuryReserve ); emit TreasuryFunded(now, treasuryReserve); } // boardroom uint256 boardroomReserve = seigniorage.sub(treasuryReserve); if (boardroomReserve > 0) { IERC20(cash).safeApprove(boardroom, boardroomReserve); IBoardroom(boardroom).allocateSeigniorage(boardroomReserve); emit BoardroomFunded(now, boardroomReserve); } } // GOV event Initialized(address indexed executor, uint256 at); event Migration(address indexed target); event ContributionPoolChanged(address indexed operator, address newFund); event ContributionPoolRateChanged( address indexed operator, uint256 newRate ); // CORE event RedeemedBonds(address indexed from, uint256 amount); event BoughtBonds(address indexed from, uint256 amount); event TreasuryFunded(uint256 timestamp, uint256 seigniorage); event BoardroomFunded(uint256 timestamp, uint256 seigniorage); event ContributionPoolFunded(uint256 timestamp, uint256 seigniorage); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_cash","type":"address"},{"internalType":"address","name":"_bond","type":"address"},{"internalType":"address","name":"_share","type":"address"},{"internalType":"address","name":"_bondOracle","type":"address"},{"internalType":"address","name":"_seigniorageOracle","type":"address"},{"internalType":"address","name":"_boardroom","type":"address"},{"internalType":"address","name":"_fund","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"BoardroomFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BoughtBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"newFund","type":"address"}],"name":"ContributionPoolChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"ContributionPoolFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ContributionPoolRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"at","type":"uint256"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"}],"name":"Migration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RedeemedBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"TreasuryFunded","type":"event"},{"inputs":[],"name":"allocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boardroom","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bond","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondDepletionFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"buyBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cash","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cashPriceCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cashPriceOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAllocationRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondOraclePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSeigniorageOraclePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextEpochPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"redeemBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seigniorageOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newFund","type":"address"}],"name":"setFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setFundAllocationRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"share","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator_","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600660006101000a81548160ff0219169083151502179055506000600660016101000a81548160ff021916908315150217905550600060105560016011553480156200005157600080fd5b5060405162005dc538038062005dc583398181016040526101008110156200007857600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050506201518081600080620000e7620004b060201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000196620004b060201b60201c565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a382600381905550816004819055508060058190555050505087600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600d8190555062000478606462000464600d546065620004b860201b620047e81790919060201c565b6200054360201b6200486e1790919060201c565b600e819055506200049c600d546103e8620004b860201b620047e81790919060201c565b600f81905550505050505050505062000660565b600033905090565b600080831415620004cd57600090506200053d565b6000828402905082848281620004df57fe5b041462000538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062005da46021913960400191505060405180910390fd5b809150505b92915050565b60006200058d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200059560201b60201c565b905092915050565b6000808311829062000645576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000609578082015181840152602081019050620005ec565b50505050905090810190601f168015620006375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200065257fe5b049050809150509392505050565b61573480620006706000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063b8e2cf8e116100ad578063c5967c261161007c578063c5967c26146106a1578063c828371e146106bf578063ce5494bb146106dd578063e03047b714610721578063f2fde38b1461073f57610206565b8063b8e2cf8e14610629578063b97dd9e214610647578063c1a2977214610665578063c1aa39001461068357610206565b8063961be391116100e9578063961be3911461056f578063a8d5fd65146105a3578063a9cfc46e146105d7578063b60d4288146105f557610206565b8063715018a6146104f95780638129fc1c146105035780638da5cb5b1461050d57806395b1828a1461054157610206565b80632c678c641161019d57806359bf5d391161016c57806359bf5d39146104355780635b756179146104535780635e02c51e1461045d57806364c9ec6f146104915780636d19921d146104c557610206565b80632c678c64146103895780634456eda2146103a957806354f04a11146103c9578063570ca7351461040157610206565b8063158ef93e116101d9578063158ef93e146102e95780631ed241951461030957806323ced1351461032757806329605e771461034557610206565b80630e21750f1461020b5780630f3a9f651461024f578063118ebbf91461027d578063132eeaa7146102b5575b600080fd5b61024d6004803603602081101561022157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610783565b005b61027b6004803603602081101561026557600080fd5b81019080803590602001909291905050506108d1565b005b6102b36004803603604081101561029357600080fd5b810190808035906020019092919080359060200190929190505050610981565b005b6102bd6113c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f16113e8565b60405180821515815260200191505060405180910390f35b6103116113fb565b6040518082815260200191505060405180910390f35b61032f611405565b6040518082815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140b565b005b6103916114e1565b60405180821515815260200191505060405180910390f35b6103b16114f4565b60405180821515815260200191505060405180910390f35b6103ff600480360360408110156103df57600080fd5b810190808035906020019092919080359060200190929190505050611553565b005b610409611f06565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61043d611f30565b6040518082815260200191505060405180910390f35b61045b611f3a565b005b610465612ccf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610499612cf5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cd612d1b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610501612d41565b005b61050b612ecc565b005b6105156135a2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056d6004803603602081101561055757600080fd5b81019080803590602001909291905050506135cc565b005b6105776136ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ab6136f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105df613716565b6040518082815260200191505060405180910390f35b6105fd61371c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610631613742565b6040518082815260200191505060405180910390f35b61064f613774565b6040518082815260200191505060405180910390f35b61066d61377e565b6040518082815260200191505060405180910390f35b61068b6137b0565b6040518082815260200191505060405180910390f35b6106a96137b6565b6040518082815260200191505060405180910390f35b6106c76137e8565b6040518082815260200191505060405180910390f35b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f2565b005b6107296145d2565b6040518082815260200191505060405180910390f35b6107816004803603602081101561075557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145d8565b005b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b80600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f970b0c70d6e9879d19345f9dbfd8bacae71546478b8bb2d8a56ad8927d3d436e82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b8060038190555050565b6109896148b8565b156109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b6109e761491c565b15610a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615610ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b600454421015610b38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d6020811015610be157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16148015610ce257503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d6020811015610cb957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015610dbb57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d6020811015610d9257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015610e9457503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d6020811015610e6b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b60008211610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061551c602e913960400191505060405180910390fd5b6000610f8c600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050818114611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726561737572793a2063617368207072696365206d6f76656400000000000081525060200191505060405180910390fd5b600e54811161105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061554a6032913960400191505060405180910390fd5b82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b81019080805190602001909291905050501015611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155a96025913960400191505060405180910390fd5b61119961118860105485614ac4565b601054614add90919063ffffffff16565b601081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561123257600080fd5b505af1158015611246573d6000803e3d6000fd5b505050506112973384600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614b279092919063ffffffff16565b61129f614bc9565b3373ffffffffffffffffffffffffffffffffffffffff167f9c3478f12dce08d85673d802af16ed5b9ebab8420ffd7b145d65d3157084b2ce846040518082815260200191505060405180910390a250600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660019054906101000a900460ff1681565b6000600354905090565b600e5481565b611413614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6114de81614cdd565b50565b600660009054906101000a900460ff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611537614cd5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61155b6148b8565b156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b6115b961491c565b1561160f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b60045442101561170a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561178957600080fd5b505afa15801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480156118b457503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561186157600080fd5b505afa158015611875573d6000803e3d6000fd5b505050506040513d602081101561188b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561198d57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561193a57600080fd5b505afa15801561194e573d6000803e3d6000fd5b505050506040513d602081101561196457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015611a6657503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1357600080fd5b505afa158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b60008211611b31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806156256030913960400191505060405180910390fd5b6000611b5e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050818114611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726561737572793a2063617368207072696365206d6f76656400000000000081525060200191505060405180910390fd5b600d548110611c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061554a6032913960400191505060405180910390fd5b6000819050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933611d4b84611d3d670de0b6b3a76400008a6147e890919063ffffffff16565b61486e90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b810190808051906020019092919050505050611de2614bc9565b3373ffffffffffffffffffffffffffffffffffffffff167fdbf5270c3cf4729fec4fdac76fda864aa4f3d14d657ad21772ac28f627141ed9856040518082815260200191505060405180910390a25050600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601054905090565b611f426148b8565b15611f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b611fa061491c565b15611ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615612079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b6004544210156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b6120f96137b6565b42101561216e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45706f63683a206e6f7420616c6c6f776564000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ed57600080fd5b505afa158015612201573d6000803e3d6000fd5b505050506040513d602081101561221757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614801561231857503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c557600080fd5b505afa1580156122d9573d6000803e3d6000fd5b505050506040513d60208110156122ef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b80156123f157503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d60208110156123c857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b80156124ca57503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561247757600080fd5b505afa15801561248b573d6000803e3d6000fd5b505050506040513d60208110156124a157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b61253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b612544614bc9565b6000612571600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050600e5481116125825750612be1565b600061263b601054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b8101908080519060200190929190505050614add90919063ffffffff16565b90506000612654600d5484614add90919063ffffffff16565b90506000612685670de0b6b3a764000061267784866147e890919063ffffffff16565b61486e90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271a57600080fd5b505af115801561272e573d6000803e3d6000fd5b505050506040513d602081101561274457600080fd5b81019080805190602001909291905050505060006127806064612772601154856147e890919063ffffffff16565b61486e90919063ffffffff16565b90506000811115612940576127fa600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e029092919063ffffffff16565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bfe07da6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200180602001828103825260208152602001807f54726561737572793a20536569676e696f7261676520416c6c6f636174696f6e8152506020019350505050600060405180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050507f4caa64211297e9263667fef70732dc65ca7a8e8c60dc72539ed94518628212d04282604051808381526020018281526020019250505060405180910390a15b6129538183614add90919063ffffffff16565b91506000612a1783612a12601054600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c957600080fd5b505afa1580156129dd573d6000803e3d6000fd5b505050506040513d60208110156129f357600080fd5b8101908080519060200190929190505050614add90919063ffffffff16565b614ac4565b90506000811115612a7d57612a3781601054614fc790919063ffffffff16565b6010819055507ff705142bf09f04297640495ddf7c59b7fd6f51894c5aea9602d631cf05f0efc24282604051808381526020018281526020019250505060405180910390a15b6000612a928285614add90919063ffffffff16565b90506000811115612bd957612b0c600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e029092919063ffffffff16565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397ffe1d7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b8157600080fd5b505af1158015612b95573d6000803e3d6000fd5b505050507f03ca7276ab7799bf73fb79d27ff0610cd7049574f2508ef8445162833d439aea4282604051808381526020018281526020019250505060405180910390a15b505050505050505b612bf76001600554614fc790919063ffffffff16565b600581905550600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d49614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4b57600080fd5b505afa158015612f5f573d6000803e3d6000fd5b505050506040513d6020811015612f7557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614801561307657503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d602081101561304d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561314f57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156130fc57600080fd5b505afa158015613110573d6000803e3d6000fd5b505050506040513d602081101561312657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561322857503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156131d557600080fd5b505afa1580156131e9573d6000803e3d6000fd5b505050506040513d60208110156131ff57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b61329a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b600660019054906101000a900460ff161561331d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f54726561737572793a20696e697469616c697a6564000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d602081101561340e57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561345557600080fd5b505af1158015613469573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134f657600080fd5b505afa15801561350a573d6000803e3d6000fd5b505050506040513d602081101561352057600080fd5b81019080805190602001909291905050506010819055506001600660016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f25ff68dd81b34665b5ba7e553ee5511bf6812e12adb4a7e2c0d9e26b3099ce79436040518082815260200191505060405180910390a2565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b806011819055503373ffffffffffffffffffffffffffffffffffffffff167f25ba333c9a98f8f18bb40ff507a4a1fb423614f442759c754d038a9de3f81cf3826040518082815260200191505060405180910390a250565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061376f600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b905090565b6000600554905090565b60006137ab600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b905090565b60115481565b60006137e36137d26003546005546147e890919063ffffffff16565b600454614fc790919063ffffffff16565b905090565b6000600454905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d602081101561394157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16148015613a4257503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ef57600080fd5b505afa158015613a03573d6000803e3d6000fd5b505050506040513d6020811015613a1957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015613b1b57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015613ac857600080fd5b505afa158015613adc573d6000803e3d6000fd5b505050506040513d6020811015613af257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015613bf457503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015613ba157600080fd5b505afa158015613bb5573d6000803e3d6000fd5b505050506040513d6020811015613bcb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b613c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b600660009054906101000a900460ff1615613ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015613d7457600080fd5b505af1158015613d88573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613ef757600080fd5b505afa158015613f0b573d6000803e3d6000fd5b505050506040513d6020811015613f2157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613f8557600080fd5b505af1158015613f99573d6000803e3d6000fd5b505050506040513d6020811015613faf57600080fd5b810190808051906020019092919050505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561404c57600080fd5b505af1158015614060573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156140ef57600080fd5b505af1158015614103573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156141cf57600080fd5b505afa1580156141e3573d6000803e3d6000fd5b505050506040513d60208110156141f957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561425d57600080fd5b505af1158015614271573d6000803e3d6000fd5b505050506040513d602081101561428757600080fd5b810190808051906020019092919050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561432457600080fd5b505af1158015614338573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156143c757600080fd5b505af11580156143db573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156144a757600080fd5b505afa1580156144bb573d6000803e3d6000fd5b505050506040513d60208110156144d157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561453557600080fd5b505af1158015614549573d6000803e3d6000fd5b505050506040513d602081101561455f57600080fd5b8101908080519060200190929190505050506001600660006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0caca70b66aed56b0630989a049110023c5a3f37e0ea4b6ce96fc747663f3ebc60405160405180910390a250565b600f5481565b6145e0614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146146a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154f66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156147fb5760009050614868565b600082840290508284828161480c57fe5b0414614863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155ce6021913960400191505060405180910390fd5b809150505b92915050565b60006148b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061504f565b905092915050565b600080600043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b600080600043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60008173ffffffffffffffffffffffffffffffffffffffff16633ddac953600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015614a1b57600080fd5b505afa925050508015614a4f57506040513d6020811015614a3b57600080fd5b810190808051906020019092919050505060015b614aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806155ef6036913960400191505060405180910390fd5b614abc64e8d4a51000826147e890919063ffffffff16565b915050919050565b6000818310614ad35781614ad5565b825b905092915050565b6000614b1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615115565b905092915050565b614bc48363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151d5565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c3357600080fd5b505af1925050508015614c44575060015b614c4d57614c4e565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614cb857600080fd5b505af1925050508015614cc9575060015b614cd257614cd3565b5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061557c602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000811480614ed0575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614e9357600080fd5b505afa158015614ea7573d6000803e3d6000fd5b505050506040513d6020811015614ebd57600080fd5b8101908080519060200190929190505050145b614f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806156c96036913960400191505060405180910390fd5b614fc28363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151d5565b505050565b600080828401905083811015615045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831182906150fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150c05780820151818401526020810190506150a5565b50505050905090810190601f1680156150ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161510757fe5b049050809150509392505050565b60008383111582906151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561518757808201518184015260208101905061516c565b50505050905090810190601f1680156151b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615237826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166152c49092919063ffffffff16565b90506000815111156152bf5780806020019051602081101561525857600080fd5b81019080805190602001909291905050506152be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615679602a913960400191505060405180910390fd5b5b505050565b60606152d384846000856152dc565b90509392505050565b60606152e7856154e2565b615359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106153a95780518252602082019150602081019050602083039250615386565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461540b576040519150601f19603f3d011682016040523d82523d6000602084013e615410565b606091505b509150915081156154255780925050506154da565b6000815111156154385780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561549f578082015181840152602081019050615484565b50505050905090810190601f1680156154cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354726561737572793a2063616e6e6f742072656465656d20626f6e64732077697468207a65726f20616d6f756e7454726561737572793a20636173685072696365206e6f7420656c696769626c6520666f7220626f6e642070757263686173656f70657261746f723a207a65726f206164647265737320676976656e20666f72206e6577206f70657261746f7254726561737572793a20747265617375727920686173206e6f206d6f726520627564676574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7754726561737572793a206661696c656420746f20636f6e73756c7420636173682070726963652066726f6d20746865206f7261636c6554726561737572793a2063616e6e6f7420707572636861736520626f6e64732077697468207a65726f20616d6f756e746f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657261746f725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6e5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122063d935a1ce13f535f6c02a46db1fe41ec1d2436be850bbf0370cba4dbdbb81ce64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000368b3a58b5f49392e5c9e4c998cb0bb966752e5100000000000000000000000074fc4575a47330340e631f7e0ea550be519fcd0a0000000000000000000000004b4d2e899658fb59b1d518b68fe836b100ee895800000000000000000000000016a71026549553cbba33e22ed1858e0f6b14423800000000000000000000000031f6da78fd83f55eb3823364e4a103cf9036b9fc000000000000000000000000b35f89160d1dc47b6eac1986d7821505c327ae09000000000000000000000000dc11e3b995845a94531d45b563c053afaddc9adc000000000000000000000000000000000000000000000000000000005ffd02a0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a578063b8e2cf8e116100ad578063c5967c261161007c578063c5967c26146106a1578063c828371e146106bf578063ce5494bb146106dd578063e03047b714610721578063f2fde38b1461073f57610206565b8063b8e2cf8e14610629578063b97dd9e214610647578063c1a2977214610665578063c1aa39001461068357610206565b8063961be391116100e9578063961be3911461056f578063a8d5fd65146105a3578063a9cfc46e146105d7578063b60d4288146105f557610206565b8063715018a6146104f95780638129fc1c146105035780638da5cb5b1461050d57806395b1828a1461054157610206565b80632c678c641161019d57806359bf5d391161016c57806359bf5d39146104355780635b756179146104535780635e02c51e1461045d57806364c9ec6f146104915780636d19921d146104c557610206565b80632c678c64146103895780634456eda2146103a957806354f04a11146103c9578063570ca7351461040157610206565b8063158ef93e116101d9578063158ef93e146102e95780631ed241951461030957806323ced1351461032757806329605e771461034557610206565b80630e21750f1461020b5780630f3a9f651461024f578063118ebbf91461027d578063132eeaa7146102b5575b600080fd5b61024d6004803603602081101561022157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610783565b005b61027b6004803603602081101561026557600080fd5b81019080803590602001909291905050506108d1565b005b6102b36004803603604081101561029357600080fd5b810190808035906020019092919080359060200190929190505050610981565b005b6102bd6113c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f16113e8565b60405180821515815260200191505060405180910390f35b6103116113fb565b6040518082815260200191505060405180910390f35b61032f611405565b6040518082815260200191505060405180910390f35b6103876004803603602081101561035b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140b565b005b6103916114e1565b60405180821515815260200191505060405180910390f35b6103b16114f4565b60405180821515815260200191505060405180910390f35b6103ff600480360360408110156103df57600080fd5b810190808035906020019092919080359060200190929190505050611553565b005b610409611f06565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61043d611f30565b6040518082815260200191505060405180910390f35b61045b611f3a565b005b610465612ccf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610499612cf5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cd612d1b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610501612d41565b005b61050b612ecc565b005b6105156135a2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61056d6004803603602081101561055757600080fd5b81019080803590602001909291905050506135cc565b005b6105776136ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ab6136f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105df613716565b6040518082815260200191505060405180910390f35b6105fd61371c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610631613742565b6040518082815260200191505060405180910390f35b61064f613774565b6040518082815260200191505060405180910390f35b61066d61377e565b6040518082815260200191505060405180910390f35b61068b6137b0565b6040518082815260200191505060405180910390f35b6106a96137b6565b6040518082815260200191505060405180910390f35b6106c76137e8565b6040518082815260200191505060405180910390f35b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f2565b005b6107296145d2565b6040518082815260200191505060405180910390f35b6107816004803603602081101561075557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145d8565b005b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b80600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f970b0c70d6e9879d19345f9dbfd8bacae71546478b8bb2d8a56ad8927d3d436e82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a250565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b8060038190555050565b6109896148b8565b156109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b6109e761491c565b15610a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615610ac0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b600454421015610b38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d6020811015610be157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16148015610ce257503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8f57600080fd5b505afa158015610ca3573d6000803e3d6000fd5b505050506040513d6020811015610cb957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015610dbb57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d6020811015610d9257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015610e9457503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d6020811015610e6b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b610f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b60008211610f5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061551c602e913960400191505060405180910390fd5b6000610f8c600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050818114611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726561737572793a2063617368207072696365206d6f76656400000000000081525060200191505060405180910390fd5b600e54811161105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061554a6032913960400191505060405180910390fd5b82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b81019080805190602001909291905050501015611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155a96025913960400191505060405180910390fd5b61119961118860105485614ac4565b601054614add90919063ffffffff16565b601081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561123257600080fd5b505af1158015611246573d6000803e3d6000fd5b505050506112973384600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614b279092919063ffffffff16565b61129f614bc9565b3373ffffffffffffffffffffffffffffffffffffffff167f9c3478f12dce08d85673d802af16ed5b9ebab8420ffd7b145d65d3157084b2ce846040518082815260200191505060405180910390a250600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660019054906101000a900460ff1681565b6000600354905090565b600e5481565b611413614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6114de81614cdd565b50565b600660009054906101000a900460ff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611537614cd5565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61155b6148b8565b156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b6115b961491c565b1561160f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615611692576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b60045442101561170a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561178957600080fd5b505afa15801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480156118b457503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561186157600080fd5b505afa158015611875573d6000803e3d6000fd5b505050506040513d602081101561188b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561198d57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561193a57600080fd5b505afa15801561194e573d6000803e3d6000fd5b505050506040513d602081101561196457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015611a6657503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1357600080fd5b505afa158015611a27573d6000803e3d6000fd5b505050506040513d6020811015611a3d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b611ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b60008211611b31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806156256030913960400191505060405180910390fd5b6000611b5e600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050818114611bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54726561737572793a2063617368207072696365206d6f76656400000000000081525060200191505060405180910390fd5b600d548110611c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061554a6032913960400191505060405180910390fd5b6000819050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611cc757600080fd5b505af1158015611cdb573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933611d4b84611d3d670de0b6b3a76400008a6147e890919063ffffffff16565b61486e90919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b810190808051906020019092919050505050611de2614bc9565b3373ffffffffffffffffffffffffffffffffffffffff167fdbf5270c3cf4729fec4fdac76fda864aa4f3d14d657ad21772ac28f627141ed9856040518082815260200191505060405180910390a25050600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601054905090565b611f426148b8565b15611f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b611fa061491c565b15611ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156a36026913960400191505060405180910390fd5b600660009054906101000a900460ff1615612079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b6004544210156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45706f63683a206e6f742073746172746564207965740000000000000000000081525060200191505060405180910390fd5b6120f96137b6565b42101561216e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45706f63683a206e6f7420616c6c6f776564000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156121ed57600080fd5b505afa158015612201573d6000803e3d6000fd5b505050506040513d602081101561221757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614801561231857503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156122c557600080fd5b505afa1580156122d9573d6000803e3d6000fd5b505050506040513d60208110156122ef57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b80156123f157503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d60208110156123c857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b80156124ca57503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561247757600080fd5b505afa15801561248b573d6000803e3d6000fd5b505050506040513d60208110156124a157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b61253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b612544614bc9565b6000612571600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b9050600e5481116125825750612be1565b600061263b601054600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d602081101561261c57600080fd5b8101908080519060200190929190505050614add90919063ffffffff16565b90506000612654600d5484614add90919063ffffffff16565b90506000612685670de0b6b3a764000061267784866147e890919063ffffffff16565b61486e90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561271a57600080fd5b505af115801561272e573d6000803e3d6000fd5b505050506040513d602081101561274457600080fd5b81019080805190602001909291905050505060006127806064612772601154856147e890919063ffffffff16565b61486e90919063ffffffff16565b90506000811115612940576127fa600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e029092919063ffffffff16565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bfe07da6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200180602001828103825260208152602001807f54726561737572793a20536569676e696f7261676520416c6c6f636174696f6e8152506020019350505050600060405180830381600087803b1580156128e857600080fd5b505af11580156128fc573d6000803e3d6000fd5b505050507f4caa64211297e9263667fef70732dc65ca7a8e8c60dc72539ed94518628212d04282604051808381526020018281526020019250505060405180910390a15b6129538183614add90919063ffffffff16565b91506000612a1783612a12601054600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c957600080fd5b505afa1580156129dd573d6000803e3d6000fd5b505050506040513d60208110156129f357600080fd5b8101908080519060200190929190505050614add90919063ffffffff16565b614ac4565b90506000811115612a7d57612a3781601054614fc790919063ffffffff16565b6010819055507ff705142bf09f04297640495ddf7c59b7fd6f51894c5aea9602d631cf05f0efc24282604051808381526020018281526020019250505060405180910390a15b6000612a928285614add90919063ffffffff16565b90506000811115612bd957612b0c600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e029092919063ffffffff16565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166397ffe1d7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b8157600080fd5b505af1158015612b95573d6000803e3d6000fd5b505050507f03ca7276ab7799bf73fb79d27ff0610cd7049574f2508ef8445162833d439aea4282604051808381526020018281526020019250505060405180910390a15b505050505050505b612bf76001600554614fc790919063ffffffff16565b600581905550600160008043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d49614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015612f4b57600080fd5b505afa158015612f5f573d6000803e3d6000fd5b505050506040513d6020811015612f7557600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614801561307657503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d602081101561304d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561314f57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156130fc57600080fd5b505afa158015613110573d6000803e3d6000fd5b505050506040513d602081101561312657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b801561322857503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156131d557600080fd5b505afa1580156131e9573d6000803e3d6000fd5b505050506040513d60208110156131ff57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b61329a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b600660019054906101000a900460ff161561331d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f54726561737572793a20696e697469616c697a6564000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d602081101561340e57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561345557600080fd5b505af1158015613469573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134f657600080fd5b505afa15801561350a573d6000803e3d6000fd5b505050506040513d602081101561352057600080fd5b81019080805190602001909291905050506010819055506001600660016101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f25ff68dd81b34665b5ba7e553ee5511bf6812e12adb4a7e2c0d9e26b3099ce79436040518082815260200191505060405180910390a2565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b806011819055503373ffffffffffffffffffffffffffffffffffffffff167f25ba333c9a98f8f18bb40ff507a4a1fb423614f442759c754d038a9de3f81cf3826040518082815260200191505060405180910390a250565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061376f600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b905090565b6000600554905090565b60006137ab600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614980565b905090565b60115481565b60006137e36137d26003546005546147e890919063ffffffff16565b600454614fc790919063ffffffff16565b905090565b6000600454905090565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156556024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d602081101561394157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16148015613a4257503073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b1580156139ef57600080fd5b505afa158015613a03573d6000803e3d6000fd5b505050506040513d6020811015613a1957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015613b1b57503073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015613ac857600080fd5b505afa158015613adc573d6000803e3d6000fd5b505050506040513d6020811015613af257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b8015613bf457503073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663570ca7356040518163ffffffff1660e01b815260040160206040518083038186803b158015613ba157600080fd5b505afa158015613bb5573d6000803e3d6000fd5b505050506040513d6020811015613bcb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b613c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54726561737572793a206e656564206d6f7265207065726d697373696f6e000081525060200191505060405180910390fd5b600660009054906101000a900460ff1615613ce9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f54726561737572793a206d69677261746564000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015613d7457600080fd5b505af1158015613d88573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613ef757600080fd5b505afa158015613f0b573d6000803e3d6000fd5b505050506040513d6020811015613f2157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613f8557600080fd5b505af1158015613f99573d6000803e3d6000fd5b505050506040513d6020811015613faf57600080fd5b810190808051906020019092919050505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561404c57600080fd5b505af1158015614060573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156140ef57600080fd5b505af1158015614103573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156141cf57600080fd5b505afa1580156141e3573d6000803e3d6000fd5b505050506040513d60208110156141f957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561425d57600080fd5b505af1158015614271573d6000803e3d6000fd5b505050506040513d602081101561428757600080fd5b810190808051906020019092919050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329605e77826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561432457600080fd5b505af1158015614338573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156143c757600080fd5b505af11580156143db573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156144a757600080fd5b505afa1580156144bb573d6000803e3d6000fd5b505050506040513d60208110156144d157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561453557600080fd5b505af1158015614549573d6000803e3d6000fd5b505050506040513d602081101561455f57600080fd5b8101908080519060200190929190505050506001600660006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0caca70b66aed56b0630989a049110023c5a3f37e0ea4b6ce96fc747663f3ebc60405160405180910390a250565b600f5481565b6145e0614cd5565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146146a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154f66026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156147fb5760009050614868565b600082840290508284828161480c57fe5b0414614863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155ce6021913960400191505060405180910390fd5b809150505b92915050565b60006148b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061504f565b905092915050565b600080600043815260200190815260200160002060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b600080600043815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60008173ffffffffffffffffffffffffffffffffffffffff16633ddac953600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015614a1b57600080fd5b505afa925050508015614a4f57506040513d6020811015614a3b57600080fd5b810190808051906020019092919050505060015b614aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806155ef6036913960400191505060405180910390fd5b614abc64e8d4a51000826147e890919063ffffffff16565b915050919050565b6000818310614ad35781614ad5565b825b905092915050565b6000614b1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615115565b905092915050565b614bc48363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151d5565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c3357600080fd5b505af1925050508015614c44575060015b614c4d57614c4e565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614cb857600080fd5b505af1925050508015614cc9575060015b614cd257614cd3565b5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061557c602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000811480614ed0575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015614e9357600080fd5b505afa158015614ea7573d6000803e3d6000fd5b505050506040513d6020811015614ebd57600080fd5b8101908080519060200190929190505050145b614f25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806156c96036913960400191505060405180910390fd5b614fc28363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506151d5565b505050565b600080828401905083811015615045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831182906150fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150c05780820151818401526020810190506150a5565b50505050905090810190601f1680156150ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161510757fe5b049050809150509392505050565b60008383111582906151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561518757808201518184015260208101905061516c565b50505050905090810190601f1680156151b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615237826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166152c49092919063ffffffff16565b90506000815111156152bf5780806020019051602081101561525857600080fd5b81019080805190602001909291905050506152be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615679602a913960400191505060405180910390fd5b5b505050565b60606152d384846000856152dc565b90509392505050565b60606152e7856154e2565b615359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106153a95780518252602082019150602081019050602083039250615386565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461540b576040519150601f19603f3d011682016040523d82523d6000602084013e615410565b606091505b509150915081156154255780925050506154da565b6000815111156154385780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561549f578082015181840152602081019050615484565b50505050905090810190601f1680156154cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354726561737572793a2063616e6e6f742072656465656d20626f6e64732077697468207a65726f20616d6f756e7454726561737572793a20636173685072696365206e6f7420656c696769626c6520666f7220626f6e642070757263686173656f70657261746f723a207a65726f206164647265737320676976656e20666f72206e6577206f70657261746f7254726561737572793a20747265617375727920686173206e6f206d6f726520627564676574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7754726561737572793a206661696c656420746f20636f6e73756c7420636173682070726963652066726f6d20746865206f7261636c6554726561737572793a2063616e6e6f7420707572636861736520626f6e64732077697468207a65726f20616d6f756e746f70657261746f723a2063616c6c6572206973206e6f7420746865206f70657261746f725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6e5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a264697066735822122063d935a1ce13f535f6c02a46db1fe41ec1d2436be850bbf0370cba4dbdbb81ce64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000368b3a58b5f49392e5c9e4c998cb0bb966752e5100000000000000000000000074fc4575a47330340e631f7e0ea550be519fcd0a0000000000000000000000004b4d2e899658fb59b1d518b68fe836b100ee895800000000000000000000000016a71026549553cbba33e22ed1858e0f6b14423800000000000000000000000031f6da78fd83f55eb3823364e4a103cf9036b9fc000000000000000000000000b35f89160d1dc47b6eac1986d7821505c327ae09000000000000000000000000dc11e3b995845a94531d45b563c053afaddc9adc000000000000000000000000000000000000000000000000000000005ffd02a0
-----Decoded View---------------
Arg [0] : _cash (address): 0x368B3a58B5f49392e5C9E4C998cb0bB966752E51
Arg [1] : _bond (address): 0x74fC4575a47330340e631F7E0ea550Be519FCd0a
Arg [2] : _share (address): 0x4b4D2e899658FB59b1D518b68fe836B100ee8958
Arg [3] : _bondOracle (address): 0x16A71026549553CbBA33E22Ed1858E0f6b144238
Arg [4] : _seigniorageOracle (address): 0x31f6DA78Fd83f55Eb3823364e4a103Cf9036b9FC
Arg [5] : _boardroom (address): 0xb35f89160d1Dc47B6EAC1986D7821505c327AE09
Arg [6] : _fund (address): 0xdC11e3B995845a94531D45b563C053AFaddC9aDC
Arg [7] : _startTime (uint256): 1610416800
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000368b3a58b5f49392e5c9e4c998cb0bb966752e51
Arg [1] : 00000000000000000000000074fc4575a47330340e631f7e0ea550be519fcd0a
Arg [2] : 0000000000000000000000004b4d2e899658fb59b1d518b68fe836b100ee8958
Arg [3] : 00000000000000000000000016a71026549553cbba33e22ed1858e0f6b144238
Arg [4] : 00000000000000000000000031f6da78fd83f55eb3823364e4a103cf9036b9fc
Arg [5] : 000000000000000000000000b35f89160d1dc47b6eac1986d7821505c327ae09
Arg [6] : 000000000000000000000000dc11e3b995845a94531d45b563c053afaddc9adc
Arg [7] : 000000000000000000000000000000000000000000000000000000005ffd02a0
Deployed Bytecode Sourcemap
35024:9192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39190:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33818:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40553:1020;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35579:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35345:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33462:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35680:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32091:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35310:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31983:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39746:799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31718:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37203:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41581:1972;;;:::i;:::-;;35514:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35461:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35547:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30759:148;;;:::i;:::-;;37952:433;;;:::i;:::-;;30117:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39345:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35435:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35487:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35646:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35409:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37445:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33366:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37326:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35807:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33650:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33553:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38393:789;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35718:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31062:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39190:147;31881:10;31868:23;;:9;;;;;;;;;;;:23;;;31846:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39262:7:::1;39255:4;;:14;;;;;;;;;;;;;;;;;;39309:10;39285:44;;;39321:7;39285:44;;;;;;;;;;;;;;;;;;;;39190:147:::0;:::o;33818:93::-;31881:10;31868:23;;:9;;;;;;;;;;;:23;;;31846:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33896:7:::1;33887:6;:16;;;;33818:93:::0;:::o;40553:1020::-;34416:28;:26;:28::i;:::-;34415:29;34393:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34544:28;:26;:28::i;:::-;34543:29;34521:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36687:8:::1;;;;;;;;;;;36686:9;36678:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33102:9:::2;;33095:3;:16;;33087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;36844:4:::3;36804:45;;36816:4;;;;;;;;;;;36804:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:45;;;:111;;;;;36910:4;36870:45;;36882:4;;;;;;;;;;;36870:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:45;;;36804:111;:178;;;;;36977:4;36936:46;;36948:5;;;;;;;;;;;36936:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:46;;;36804:178;:246;;;;;37045:4;37003:47;;37012:9;;;;;;;;;;;37003:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:47;;;36804:246;36782:326;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;40755:1:::4;40746:6;:10;40738:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40820:17;40840:25;40854:10;;;;;;;;;;;40840:13;:25::i;:::-;40820:45;;40897:11;40884:9;:24;40876:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;40984:16;;40972:9;:28;40950:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41169:6;41135:4;;;;;;;;;;;41128:22;;;41159:4;41128:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;:47;;41106:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41278:92;41319:40;41328:22;;41352:6;41319:8;:40::i;:::-;41278:22;;:26;;:92;;;;:::i;:::-;41253:22;:117;;;;41395:4;;;;;;;;;;;41383:26;;;41410:10;41422:6;41383:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;41440:45;41466:10;41478:6;41447:4;;;;;;;;;;;41440:25;;;;:45;;;;;:::i;:::-;41496:18;:16;:18::i;:::-;41546:10;41532:33;;;41558:6;41532:33;;;;;;;;;;;;;;;;;;37121:1;34700:4:::0;34665:7;:21;34673:12;34665:21;;;;;;;;;;;:32;34687:9;34665:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34751:4;34715:7;:21;34723:12;34715:21;;;;;;;;;;;:33;34737:10;34715:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40553:1020;;:::o;35579:32::-;;;;;;;;;;;;;:::o;35345:31::-;;;;;;;;;;;;;:::o;33462:83::-;33504:7;33531:6;;33524:13;;33462:83;:::o;35680:31::-;;;;:::o;32091:115::-;30339:12;:10;:12::i;:::-;30329:22;;:6;;;;;;;;;;;:22;;;30321:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32167:31:::1;32185:12;32167:17;:31::i;:::-;32091:115:::0;:::o;35310:28::-;;;;;;;;;;;;;:::o;31983:100::-;32026:4;32066:9;;;;;;;;;;;32050:25;;:12;:10;:12::i;:::-;:25;;;32043:32;;31983:100;:::o;39746:799::-;34416:28;:26;:28::i;:::-;34415:29;34393:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34544:28;:26;:28::i;:::-;34543:29;34521:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36687:8:::1;;;;;;;;;;;36686:9;36678:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33102:9:::2;;33095:3;:16;;33087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;36844:4:::3;36804:45;;36816:4;;;;;;;;;;;36804:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:45;;;:111;;;;;36910:4;36870:45;;36882:4;;;;;;;;;;;36870:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:45;;;36804:111;:178;;;;;36977:4;36936:46;;36948:5;;;;;;;;;;;36936:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:46;;;36804:178;:246;;;;;37045:4;37003:47;;37012:9;;;;;;;;;;;37003:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:47;;;36804:246;36782:326;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;39945:1:::4;39936:6;:10;39928:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40012:17;40032:25;40046:10;;;;;;;;;;;40032:13;:25::i;:::-;40012:45;;40089:11;40076:9;:24;40068:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;40176:12;;40164:9;:24;40142:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40293:17;40313:9;40293:29;;40347:4;;;;;;;;;;;40335:26;;;40362:10;40374:6;40335:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;40404:4;;;;;;;;;;;40392:22;;;40415:10;40427:31;40448:9;40427:16;40438:4;40427:6;:10;;:16;;;;:::i;:::-;:20;;:31;;;;:::i;:::-;40392:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;40470:18;:16;:18::i;:::-;40518:10;40506:31;;;40530:6;40506:31;;;;;;;;;;;;;;;;;;37121:1;;34700:4:::0;34665:7;:21;34673:12;34665:21;;;;;;;;;;;:32;34687:9;34665:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34751:4;34715:7;:21;34723:12;34715:21;;;;;;;;;;;:33;34737:10;34715:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;39746:799;;:::o;31718:85::-;31759:7;31786:9;;;;;;;;;;;31779:16;;31718:85;:::o;37203:100::-;37246:7;37273:22;;37266:29;;37203:100;:::o;41581:1972::-;34416:28;:26;:28::i;:::-;34415:29;34393:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34544:28;:26;:28::i;:::-;34543:29;34521:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36687:8:::1;;;;;;;;;;;36686:9;36678:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33102:9:::2;;33095:3;:16;;33087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;33214:16:::3;:14;:16::i;:::-;33207:3;:23;;33199:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;36844:4:::4;36804:45;;36816:4;;;;;;;;;;;36804:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;:45;;;:111;;;;;36910:4;36870:45;;36882:4;;;;;;;;;;;36870:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;:45;;;36804:111;:178;;;;;36977:4;36936:46;;36948:5;;;;;;;;;;;36936:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;:46;;;36804:178;:246;;;;;37045:4;37003:47;;37012:9;;;;;;;;;;;37003:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;:47;;;36804:246;36782:326;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;41759:18:::5;:16;:18::i;:::-;41788:17;41808:32;41822:17;;;;;;;;;;;41808:13;:32::i;:::-;41788:52;;41868:16;;41855:9;:29;41851:105;;41901:7;;;41851:105;41999:18;42020:78;42065:22;;42027:4;;;;;;;;;;;42020:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;:30;;:78;;;;:::i;:::-;41999:99;;42109:18;42130:27;42144:12;;42130:9;:13;;:27;;;;:::i;:::-;42109:48;;42168:19;42190:36;42221:4;42190:26;42205:10;42190;:14;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;42168:58;;42249:4;;;;;;;;;;;42237:22;;;42268:4;42275:11;42237:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;42343:19;42365:44;42405:3;42365:35;42381:18;;42365:11;:15;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;42343:66;;42438:1;42424:11;:15;42420:315;;;42456:43;42481:4;;;;;;;;;;;42487:11;42463:4;;;;;;;;;;;42456:24;;;;:43;;;;;:::i;:::-;42529:4;;;;;;;;;;;42514:28;;;42561:4;;;;;;;;;;;42584:11;42514:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;42683:40;42706:3;42711:11;42683:40;;;;;;;;;;;;;;;;;;;;;;;;42420:315;42761:28;42777:11;42761;:15;;:28;;;;:::i;:::-;42747:42;;42845:23;42871:114;42894:11;42920:54;42951:22;;42927:4;;;;;;;;;;;42920:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;;;;;;;:30;;:54;;;;:::i;:::-;42871:8;:114::i;:::-;42845:140;;43018:1;43000:15;:19;42996:208;;;43061:75;43106:15;43061:22;;:26;;:75;;;;:::i;:::-;43036:22;:100;;;;43156:36;43171:3;43176:15;43156:36;;;;;;;;;;;;;;;;;;;;;;;;42996:208;43238:24;43265:32;43281:15;43265:11;:15;;:32;;;;:::i;:::-;43238:59;;43331:1;43312:16;:20;43308:238;;;43349:53;43374:9;;;;;;;;;;;43385:16;43356:4;;;;;;;;;;;43349:24;;;;:53;;;;;:::i;:::-;43428:9;;;;;;;;;;;43417:41;;;43459:16;43417:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;;;;;43496:38;43512:3;43517:16;43496:38;;;;;;;;;;;;;;;;;;;;;;;;43308:238;37121:1;;;;;;;;33288:12:::3;33298:1;33288:5;;:9;;:12;;;;:::i;:::-;33280:5;:20;;;;34700:4:::0;34665:7;:21;34673:12;34665:21;;;;;;;;;;;:32;34687:9;34665:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34751:4;34715:7;:21;34723:12;34715:21;;;;;;;;;;;:33;34737:10;34715:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;41581:1972::o;35514:24::-;;;;;;;;;;;;;:::o;35461:19::-;;;;;;;;;;;;;:::o;35547:25::-;;;;;;;;;;;;;:::o;30759:148::-;30339:12;:10;:12::i;:::-;30329:22;;:6;;;;;;;;;;;:22;;;30321:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30866:1:::1;30829:40;;30850:6;;;;;;;;;;;30829:40;;;;;;;;;;;;30897:1;30880:6;;:19;;;;;;;;;;;;;;;;;;30759:148::o:0;37952:433::-;36844:4;36804:45;;36816:4;;;;;;;;;;;36804:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;:111;;;;;36910:4;36870:45;;36882:4;;;;;;;;;;;36870:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;36804:111;:178;;;;;36977:4;36936:46;;36948:5;;;;;;;;;;;36936:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;36804:178;:246;;;;;37045:4;37003:47;;37012:9;;;;;;;;;;;37003:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;36804:246;36782:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38015:11:::1;;;;;;;;;;;38014:12;38006:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;38114:4;;;;;;;;;;;38102:22;;;38132:4;;;;;;;;;;;38125:22;;;38156:4;38125:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;38102:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38263:4;;;;;;;;;;;38256:22;;;38287:4;38256:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;38231:22;:62;;;;38320:4;38306:11;;:18;;;;;;;;;;;;;;;;;;38352:10;38340:37;;;38364:12;38340:37;;;;;;;;;;;;;;;;;;37952:433::o:0;30117:79::-;30155:7;30182:6;;;;;;;;;;;30175:13;;30117:79;:::o;39345:170::-;31881:10;31868:23;;:9;;;;;;;;;;;:23;;;31846:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39442:4:::1;39421:18;:25;;;;39490:10;39462:45;;;39502:4;39462:45;;;;;;;;;;;;;;;;;;39345:170:::0;:::o;35435:19::-;;;;;;;;;;;;;:::o;35487:20::-;;;;;;;;;;;;;:::o;35646:27::-;;;;:::o;35409:19::-;;;;;;;;;;;;;:::o;37445:125::-;37503:7;37530:32;37544:17;;;;;;;;;;;37530:13;:32::i;:::-;37523:39;;37445:125;:::o;33366:88::-;33414:7;33441:5;;33434:12;;33366:88;:::o;37326:111::-;37377:7;37404:25;37418:10;;;;;;;;;;;37404:13;:25::i;:::-;37397:32;;37326:111;:::o;35807:37::-;;;;:::o;33650:114::-;33697:7;33724:32;33738:17;33748:6;;33738:5;;:9;;:17;;;;:::i;:::-;33724:9;;:13;;:32;;;;:::i;:::-;33717:39;;33650:114;:::o;33553:89::-;33598:7;33625:9;;33618:16;;33553:89;:::o;38393:789::-;31881:10;31868:23;;:9;;;;;;;;;;;:23;;;31846:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36844:4:::1;36804:45;;36816:4;;;;;;;;;;;36804:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:45;;;:111;;;;;36910:4;36870:45;;36882:4;;;;;;;;;;;36870:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:45;;;36804:111;:178;;;;;36977:4;36936:46;;36948:5;;;;;;;;;;;36936:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:46;;;36804:178;:246;;;;;37045:4;37003:47;;37012:9;;;;;;;;;;;37003:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:47;;;36804:246;36782:326;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;38480:8:::2;;;;;;;;;;;38479:9;38471:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;38550:4;;;;;;;;;;;38541:31;;;38573:6;38541:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38600:4;;;;;;;;;;;38591:32;;;38624:6;38591:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38649:4;;;;;;;;;;;38642:21;;;38664:6;38679:4;;;;;;;;;;;38672:22;;;38703:4;38672:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;38642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;38749:4;;;;;;;;;;;38740:31;;;38772:6;38740:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38799:4;;;;;;;;;;;38790:32;;;38823:6;38790:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38848:4;;;;;;;;;;;38841:21;;;38863:6;38878:4;;;;;;;;;;;38871:22;;;38902:4;38871:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;38841:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;38949:5;;;;;;;;;;;38940:32;;;38973:6;38940:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39000:5;;;;;;;;;;;38991:33;;;39025:6;38991:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39050:5;;;;;;;;;;;39043:22;;;39066:6;39081:5;;;;;;;;;;;39074:23;;;39106:4;39074:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;39043:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;39137:4;39126:8;;:15;;;;;;;;;;;;;;;;;;39167:6;39157:17;;;;;;;;;;;;38393:789:::0;:::o;35718:33::-;;;;:::o;31062:244::-;30339:12;:10;:12::i;:::-;30329:22;;:6;;;;;;;;;;;:22;;;30321:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31171:1:::1;31151:22;;:8;:22;;;;31143:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31261:8;31232:38;;31253:6;;;;;;;;;;;31232:38;;;;;;;;;;;;31290:8;31281:6;;:17;;;;;;;;;;;;;;;;;;31062:244:::0;:::o;5958:471::-;6016:7;6266:1;6261;:6;6257:47;;;6291:1;6284:8;;;;6257:47;6316:9;6332:1;6328;:5;6316:17;;6361:1;6356;6352;:5;;;;;;:10;6344:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6420:1;6413:8;;;5958:471;;;;;:::o;6905:132::-;6963:7;6990:39;6994:1;6997;6990:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6983:46;;6905:132;;;;:::o;34091:125::-;34152:4;34176:7;:21;34184:12;34176:21;;;;;;;;;;;:32;34198:9;34176:32;;;;;;;;;;;;;;;;;;;;;;;;;34169:39;;34091:125;:::o;34224:126::-;34285:4;34309:7;:21;34317:12;34309:21;;;;;;;;;;;:33;34331:10;34309:33;;;;;;;;;;;;;;;;;;;;;;;;;34302:40;;34224:126;:::o;37578:320::-;37640:7;37672:6;37664:23;;;37688:4;;;;;;;;;;;37694;37664:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37660:231;;37815:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37660:231;37746:15;37756:4;37746:5;:9;;:15;;;;:::i;:::-;37739:22;;;37578:320;;;:::o;459:106::-;517:7;548:1;544;:5;:13;;556:1;544:13;;;552:1;544:13;537:20;;459:106;;;;:::o;5068:136::-;5126:7;5153:43;5157:1;5160;5153:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5146:50;;5068:136;;;;:::o;15761:177::-;15844:86;15864:5;15894:23;;;15919:2;15923:5;15871:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15844:19;:86::i;:::-;15761:177;;;:::o;39576:162::-;39636:10;;;;;;;;;;;39628:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39624:45;;;;;;39691:17;;;;;;;;;;;39683:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39679:52;;;;;;39576:162::o;28673:106::-;28726:15;28761:10;28754:17;;28673:106;:::o;32214:294::-;32329:1;32305:26;;:12;:26;;;;32283:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32452:12;32420:45;;32448:1;32420:45;;;;;;;;;;;;32488:12;32476:9;;:24;;;;;;;;;;;;;;;;;;32214:294;:::o;16420:622::-;16799:1;16790:5;:10;16789:62;;;;16849:1;16806:5;:15;;;16830:4;16837:7;16806:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;16789:62;16781:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16944:90;16964:5;16994:22;;;17018:7;17027:5;16971:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16944:19;:90::i;:::-;16420:622;;;:::o;4604:181::-;4662:7;4682:9;4698:1;4694;:5;4682:17;;4723:1;4718;:6;;4710:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4776:1;4769:8;;;4604:181;;;;:::o;7533:278::-;7619:7;7651:1;7647;:5;7654:12;7639:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7678:9;7694:1;7690;:5;;;;;;7678:17;;7802:1;7795:8;;;7533:278;;;;;:::o;5507:192::-;5593:7;5626:1;5621;:6;;5629:12;5613:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5653:9;5669:1;5665;:5;5653:17;;5690:1;5683:8;;;5507:192;;;;;:::o;18066:761::-;18490:23;18516:69;18544:4;18516:69;;;;;;;;;;;;;;;;;18524:5;18516:27;;;;:69;;;;;:::i;:::-;18490:95;;18620:1;18600:10;:17;:21;18596:224;;;18742:10;18731:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18723:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18596:224;18066:761;;;:::o;12744:196::-;12847:12;12879:53;12902:6;12910:4;12916:1;12919:12;12879:22;:53::i;:::-;12872:60;;12744:196;;;;;:::o;14121:979::-;14251:12;14284:18;14295:6;14284:10;:18::i;:::-;14276:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14410:12;14424:23;14451:6;:11;;14471:8;14482:4;14451:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14409:78;;;;14502:7;14498:595;;;14533:10;14526:17;;;;;;14498:595;14667:1;14647:10;:17;:21;14643:439;;;14910:10;14904:17;14971:15;14958:10;14954:2;14950:19;14943:44;14858:148;15053:12;15046:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14121:979;;;;;;;:::o;9826:422::-;9886:4;10094:12;10205:7;10193:20;10185:28;;10239:1;10232:4;:8;10225:15;;;9826:422;;;:::o
Swarm Source
ipfs://63d935a1ce13f535f6c02a46db1fe41ec1d2436be850bbf0370cba4dbdbb81ce
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.