ETH Price: $2,162.12 (+5.21%)

Token

OCFI ($OCFI)
 

Overview

Max Total Supply

1,000,000 $OCFI

Holders

61

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Ocfi

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 30 : Ocfi.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
/*
OCFI SOCIALS:
Telegram: https://t.me/OCFI_Official
Website: https://www.octofi.io
Twitter: https://twitter.com/realoctofi
*/
pragma solidity ^0.8.4;
import "./OcfiDividendTracker.sol";
import "./SafeMath.sol";
import "./Ownable.sol";
import "./MaxWalletCalculator.sol";
import "./OcfiStorage.sol";
import "./ERC20.sol";
contract Ocfi is ERC20, Ownable {
using SafeMath for uint256;
using OcfiStorage for OcfiStorage.Data;
using OcfiFees for OcfiFees.Data;
using OcfiReferrals for OcfiReferrals.Data;
using OcfiTransfers for OcfiTransfers.Data;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 30 : OcfiDividendTracker.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IUniswapV2Pair.sol";
import "./IWETH.sol";
import "./DividendDelayedPayingToken.sol";
import "./SafeMath.sol";
import "./IERC20.sol";
import "./Ocfi.sol";
import "./OcfiDividendTrackerBalanceCalculator.sol";
import "./IUniswapV2Router.sol";
contract OcfiDividendTracker is DividendDelayedPayingToken {
using SafeMath for uint256;
using SafeMathInt for int256;
Ocfi public immutable token;
OcfiDividendTrackerBalanceCalculator public balanceCalculator;
mapping (address => bool) public excludedFromDividends;
mapping (address => uint256) public lastClaimTimes;
event OcfiDividendTrackerBalanceCalculatorUpdated(address balanceCalculator);
event ExcludeFromDividends(address indexed account);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 30 : SafeMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
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).
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 30 : Ownable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pragma solidity ^0.8.4;
// SPDX-License-Identifier: MIT License
import "./Context.sol";
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 () {
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;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 30 : MaxWalletCalculator.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
library MaxWalletCalculator {
function calculateMaxWallet(uint256 totalSupply, uint256 startTime) public view returns (uint256) {
if(startTime == 0) {
return totalSupply;
}
uint256 FACTOR_MAX = 10000;
uint256 age = block.timestamp - startTime;
uint256 base = totalSupply * 10 / FACTOR_MAX; // 0.1%
uint256 incrasePerMinute = totalSupply * 10 / FACTOR_MAX; // 0.1%
uint256 extra = incrasePerMinute * age / (1 minutes); // up 0.1% per minute
return base + extra + (10 ** 18);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 30 : OcfiStorage.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./OcfiFees.sol";
import "./OcfiReferrals.sol";
import "./OcfiTransfers.sol";
import "./OcfiDividendTracker.sol";
import "./OcfiDividendTrackerFactory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router.sol";
import "./IUniswapV2Factory.sol";
import "./ICustomContract.sol";
import "./IERC721A.sol";
library OcfiStorage {
using OcfiTransfers for OcfiTransfers.Data;
using OcfiReferrals for OcfiReferrals.Data;
using OcfiFees for OcfiFees.Data;
event UpdateMarketingWallet(address marketingWallet);
event UpdateTeamWallet(address teamWallet);
event UpdateDevWallet(address devWallet);
event UpdateDividendTrackerContract(address dividednTrackerContract);
event UpdateNftContract(address nftContract);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 30 : ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./SafeMath.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 30 : IUniswapV2Pair.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 30 : IWETH.sol
1
2
3
4
5
6
7
8
9
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IWETH {
function deposit() external payable;
function transfer(address dst, uint wad) external returns (bool);
function balanceOf(address account) external returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 30 : DividendDelayedPayingToken.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./ERC20.sol";
import "./SafeMath.sol";
import "./SafeMathUint.sol";
import "./SafeMathInt.sol";
import "./DividendPayingTokenInterface.sol";
import "./DividendPayingTokenOptionalInterface.sol";
import "./Ownable.sol";
/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
/// to token holders as dividends and allows token holders to withdraw their dividends.
/// Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendDelayedPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface, Ownable {
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
// With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
// For more discussion about choosing the value of `magnitude`,
// see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 30 : IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/**
* @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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 30 : OcfiDividendTrackerBalanceCalculator.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./Ocfi.sol";
import "./OcfiClaim.sol";
import "./IOcfiDividendTrackerBalanceCalculator.sol";
contract OcfiDividendTrackerBalanceCalculator is IOcfiDividendTrackerBalanceCalculator, Ownable {
Ocfi public immutable token;
OcfiClaim public immutable claim;
constructor(address payable _token, address payable _claim) {
token = Ocfi(_token);
claim = OcfiClaim(_claim);
}
function calculateBalance(address account) external override view returns (uint256) {
if(account == address(0)) {
return 0;
}
return token.balanceOf(account) + claim.getTotalClaimRemaining(account);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 30 : IUniswapV2Router.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 30 : SafeMathUint.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/**
* @title SafeMathUint
* @dev Math operations with safety checks that revert on error
*/
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 30 : SafeMathInt.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
/*
MIT License
Copyright (c) 2018 requestnetwork
Copyright (c) 2018 Fragments, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 30 : DividendPayingTokenInterface.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {
/// @notice View the amount of dividend in wei that an address can withdraw.
/// @param _owner The address of a token holder.
/// @return The amount of dividend in wei that `_owner` can withdraw.
function dividendOf(address _owner) external view returns(uint256);
/// @dev This event MUST emit when ether is distributed to token holders.
/// @param from The address which sends ether to this contract.
/// @param weiAmount The amount of distributed ether in wei.
event DividendsDistributed(
address indexed from,
uint256 weiAmount,
bool delayed
);
/// @dev This event MUST emit when an address withdraws their dividend.
/// @param to The address which withdraws ether from this contract.
/// @param weiAmount The amount of withdrawn ether in wei.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 30 : DividendPayingTokenOptionalInterface.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {
/// @notice View the amount of dividend in wei that an address can withdraw.
/// @param _owner The address of a token holder.
/// @return The amount of dividend in wei that `_owner` can withdraw.
function withdrawableDividendOf(address _owner) external view returns(uint256);
/// @notice View the amount of dividend in wei that an address has withdrawn.
/// @param _owner The address of a token holder.
/// @return The amount of dividend in wei that `_owner` has withdrawn.
function withdrawnDividendOf(address _owner) external view returns(uint256);
/// @notice View the amount of dividend in wei that an address has earned in total.
/// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
/// @param _owner The address of a token holder.
/// @return The amount of dividend in wei that `_owner` has earned in total.
function accumulativeDividendOf(address _owner) external view returns(uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 30 : IERC20Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 30 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/*
* @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 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 30 : OcfiFees.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./UniswapV2PriceImpactCalculator.sol";
import "./OcfiDividendTracker.sol";
import "./OcfiStorage.sol";
import "./IUniswapV2Router.sol";
import "./IUniswapV2Pair.sol";
import "./IWETH.sol";
import "./Math.sol";
library OcfiFees {
struct Data {
address uniswapV2Pair;
uint256 baseFee;//in 100ths of a percent
uint256 maxFee;
uint256 minFee;
uint256 sellFee;
uint256 buyFee;
uint256 extraFee;//in 100ths of a percent, extra sell fees. Buy fee is baseFee - extraFee
uint256 extraFeeUpdateTime; //when the extraFee was updated. Use time elapsed to dynamically calculate new fee
uint256 feeSellImpact; //in 100ths of a percent, how much price impact on sells (in percent) increases extraFee.
uint256 feeTimeImpact; //in 100ths of a percent, how much time elapsed (in minutes) lowers extraFee
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 30 : OcfiReferrals.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
library OcfiReferrals {
struct Data {
uint256 referralBonus;
uint256 referredBonus;
uint256 tokensNeededForRefferalNumber;
mapping(uint256 => address) registeredReferrersByCode;
mapping(address => uint256) registeredReferrersByAddress;
uint256 currentRefferralCode;
}
uint256 private constant FACTOR_MAX = 10000;
event RefferalCodeGenerated(address account, uint256 code, uint256 inc1, uint256 inc2);
event UpdateReferralBonus(uint256 value);
event UpdateReferredBonus(uint256 value);
event UpdateTokensNeededForReferralNumber(uint256 value);
function init(Data storage data) public {
updateReferralBonus(data, 800); //2% bonus on buys from people you refer
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 30 : OcfiTransfers.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./OcfiStorage.sol";
import "./OcfiFees.sol";
import "./OcfiReferrals.sol";
import "./OcfiStorage.sol";
library OcfiTransfers {
using OcfiFees for OcfiFees.Data;
using OcfiReferrals for OcfiReferrals.Data;
using OcfiStorage for OcfiStorage.Data;
struct Data {
address uniswapV2Router;
address uniswapV2Pair;
}
uint256 private constant FACTOR_MAX = 10000;
event BuyWithFees(
address indexed account,
uint256 amount,
uint256 feeFactor,
uint256 feeTokens
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 30 : OcfiDividendTrackerFactory.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./OcfiDividendTracker.sol";
library OcfiDividendTrackerFactory {
function createDividendTracker() public returns (OcfiDividendTracker) {
return new OcfiDividendTracker(payable(address(this)));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 30 : IUniswapV2Factory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 30 : ICustomContract.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface ICustomContract {
function beforeTokenTransfer(address from, address to, uint256 amount) external;
function handleBuy(address account, uint256 amount, uint256 feeTokens) external;
function handleSell(address account, uint256 amount, uint256 feeTokens) external;
function handleBalanceUpdated(address account, uint256 amount) external;
function getData(address account) external view returns (uint256[] memory data);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 30 : IERC721A.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.1.0
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @dev Interface of an ERC721A compliant contract.
*/
interface IERC721A {
/**
* The caller must own the token or be an approved operator.
*/
error ApprovalCallerNotOwnerNorApproved();
/**
* The token does not exist.
*/
error ApprovalQueryForNonexistentToken();
/**
* The caller cannot approve to their own address.
*/
error ApproveToCaller();
/**
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 30 : UniswapV2PriceImpactCalculator.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IUniswapV2Pair.sol";
import "./IERC20Metadata.sol";
library UniswapV2PriceImpactCalculator {
function calculateSellPriceImpact(address tokenAddress, address pairAddress, uint256 value) public view returns (uint256) {
value = value * 998 / 1000;
IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);
(uint256 r0, uint256 r1,) = pair.getReserves();
IERC20Metadata token0 = IERC20Metadata(pair.token0());
IERC20Metadata token1 = IERC20Metadata(pair.token1());
if(address(token1) == tokenAddress) {
IERC20Metadata tokenTemp = token0;
token0 = token1;
token1 = tokenTemp;
uint256 rTemp = r0;
r0 = r1;
r1 = rTemp;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 30 : Math.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
library Math {
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 29 of 30 : OcfiClaim.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IERC20.sol";
import "./Ocfi.sol";
import "./OcfiDividendTracker.sol";
import "./Ownable.sol";
contract OcfiClaim is Ownable {
Ocfi token;
OcfiDividendTracker dividendTracker;
uint256 private constant FACTOR_MAX = 10000;
mapping (address => ClaimInfo) public claimInfo;
uint256 private totalTokens;
struct ClaimInfo {
uint128 totalClaimAmount;
uint128 totalClaimed;
uint64 startTime;
uint64 factor;
uint64 period;
uint64 expiryDuration;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 30 of 30 : IOcfiDividendTrackerBalanceCalculator.sol
1
2
3
4
5
6
7
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IOcfiDividendTrackerBalanceCalculator {
function calculateBalance(address account) external view returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {
"contracts/MaxWalletCalculator.sol": {
"MaxWalletCalculator": "0xb9465abd8f286c6720a9464f023539321c0fc32e"
},
"contracts/OcfiFees.sol": {
"OcfiFees": "0x5391cbd188a3826edc589dd6ff73a2d66c3c0c43"
},
"contracts/OcfiReferrals.sol": {
"OcfiReferrals": "0xe923a2c3bce58ce2ee617d0d65f01669aec9e8bc"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"reinvest","type":"bool"}],"name":"claimDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"customContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentFees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getData","outputs":[{"internalType":"uint256[]","name":"dividendInfo","type":"uint256[]"},{"internalType":"uint256[]","name":"customContractInfo","type":"uint256[]"},{"internalType":"uint256","name":"reinvestBonus","type":"uint256"},{"internalType":"uint256","name":"referralCode","type":"uint256"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapAccumulatedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"reinvestDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"atAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"setSwapTokensParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCustomContract","type":"address"},{"internalType":"bool","name":"excludeContractFromDividends","type":"bool"}],"name":"updateCustomContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"dividendTrackerContract","type":"address"}],"name":"updateDividendTrackerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividendsFactor","type":"uint256"},{"internalType":"uint256","name":"nftDividendsFactor","type":"uint256"},{"internalType":"uint256","name":"liquidityFactor","type":"uint256"},{"internalType":"uint256","name":"customContractFactor","type":"uint256"},{"internalType":"uint256","name":"burnFactor","type":"uint256"},{"internalType":"uint256","name":"marketingFactor","type":"uint256"},{"internalType":"uint256","name":"teamFactor","type":"uint256"},{"internalType":"uint256","name":"devFactor","type":"uint256"}],"name":"updateFeeDestinationPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"baseFee","type":"uint256"},{"internalType":"uint256","name":"maxFee","type":"uint256"},{"internalType":"uint256","name":"minFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellImpact","type":"uint256"},{"internalType":"uint256","name":"timeImpact","type":"uint256"}],"name":"updateFeeSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNftContract","type":"address"}],"name":"updateNftContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"presaleContract","type":"address"}],"name":"updatePresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"referralBonus","type":"uint256"},{"internalType":"uint256","name":"referredBonus","type":"uint256"},{"internalType":"uint256","name":"tokensNeeded","type":"uint256"}],"name":"updateReferrals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"updateReinvestBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600481526020017f4f434649000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f244f434649000000000000000000000000000000000000000000000000000000815250816003908051906020019062000088929190620019c7565b508060049080519060200190620000a1929190620019c7565b5050506000620000b66200029f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001713069d3c21bcecceda1000000620002a760201b60201c565b60067333853a30a6407f116e247673f05e763158e292e063e6ed9fd290916200019f6200045660201b60201c565b6040518363ffffffff1660e01b8152600401620001be92919062001f69565b60006040518083038186803b158015620001d757600080fd5b505af4158015620001ec573d6000803e3d6000fd5b505050506200023a30620002056200045660201b60201c565b6103e861019f69d3c21bcecceda100000062000222919062002242565b6200022e91906200220a565b6200048060201b60201c565b62000299306006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8605569d3c21bcecceda100000062000281919062002242565b6200028d91906200220a565b6200048060201b60201c565b620026d2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200031a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003119062001e90565b60405180910390fd5b6200032e6000838362000ceb60201b60201c565b6200034a8160025462000d6460201b62002dad1790919060201c565b600281905550620003a8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d6460201b62002dad1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200044a919062002147565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620004bb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004f657600080fd5b6000600660270154141562000619573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200057a57506200054b6200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80620005d65750600660240160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b62000618576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060f9062001e08565b60405180910390fd5b5b60008114806200065457508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1562000678576200067283838362000dc760201b62002e0b1760201c565b62000ce6565b6200068b8383836200107b60201b60201c565b600060067333853a30a6407f116e247673f05e763158e292e0635f02a859909186866040518463ffffffff1660e01b8152600401620006cd9392919062001f96565b60206040518083038186803b158015620006e657600080fd5b505af4158015620006fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000721919062001ae8565b905060008290506000808315620009af576000600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc638ecc50f49091886040518363ffffffff1660e01b81526004016200077592919062001f3c565b60206040518083038186803b1580156200078e57600080fd5b505af4158015620007a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c9919062001abc565b9050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc630e514c71909183620007fe856200148260201b60201c565b8b6040518563ffffffff1660e01b815260040162000820949392919062001eef565b60206040518083038186803b1580156200083957600080fd5b505af41580156200084e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000874919062001ae8565b6200087e57600090505b6000806006601a01738b20c17da67c85a8e2aacf349a26cfee168f55766369d776ae909160068d8d8d896040518763ffffffff1660e01b8152600401620008cb96959493929190620020da565b604080518083038186803b158015620008e357600080fd5b505af4158015620008f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200091e919062001b40565b9150915081945060008111156200097857818111156200093c578190505b80826200094a9190620022a3565b915080886200095a9190620022a3565b9750620009748a848362000dc760201b62002e0b1760201c565b8293505b6000821115620009ab578188620009909190620022a3565b9750620009aa8a308462000dc760201b62002e0b1760201c565b5b5050505b620009c787878762000dc760201b62002e0b1760201c565b60067333853a30a6407f116e247673f05e763158e292e0638d0a6c5c909188620009f78a6200148260201b60201c565b6040518463ffffffff1660e01b815260040162000a17939291906200209d565b60006040518083038186803b15801562000a3057600080fd5b505af415801562000a45573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a886040518263ffffffff1660e01b815260040162000aa9919062001d61565b600060405180830381600087803b15801562000ac457600080fd5b505af115801562000ad9573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a876040518263ffffffff1660e01b815260040162000b3d919062001d61565b600060405180830381600087803b15801562000b5857600080fd5b505af115801562000b6d573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000c3b576006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a826040518263ffffffff1660e01b815260040162000c06919062001d61565b600060405180830381600087803b15801562000c2157600080fd5b505af115801562000c36573d6000803e3d6000fd5b505050505b600062000c4e886200148260201b60201c565b9050600062000c63886200148260201b60201c565b905060067333853a30a6407f116e247673f05e763158e292e0630b14227e90918b8b86868b8b6040518863ffffffff1660e01b815260040162000cad979695949392919062002020565b60006040518083038186803b15801562000cc657600080fd5b505af415801562000cdb573d6000803e3d6000fd5b505050505050505050505b505050565b60067333853a30a6407f116e247673f05e763158e292e06312cba02390918585856040518563ffffffff1660e01b815260040162000d2d949392919062001fd3565b60006040518083038186803b15801562000d4657600080fd5b505af415801562000d5b573d6000803e3d6000fd5b50505050505050565b600080828462000d759190620021ad565b90508381101562000dbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000db49062001de6565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000e3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e319062001e4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ea49062001da2565b60405180910390fd5b62000ec083838362000ceb60201b60201c565b62000f338160405180606001604052806026815260200162008267602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620014ca60201b620030a0179092919060201c565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000fcd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d6460201b62002dad1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200106e919062002147565b60405180910390a3505050565b60006200108e306200148260201b60201c565b905060006006602501548210159050620010ad6200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015620011245750620010f46200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156200147b573073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015620011b857506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156200121657506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1562001257576200122c6200153360201b60201c565b836200123e866200148260201b60201c565b6200124a9190620021ad565b11156200125657600080fd5b5b808015620012755750600660280160009054906101000a900460ff16155b8015620012d257506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015620012e457506000600660270154115b8015620012f5575060066027015442115b156200147a576001600660280160006101000a81548160ff0219169083151502179055506000829050600660260154811115620013355760066026015490505b60006127106006600001601001548362001350919062002242565b6200135c91906200220a565b905060008111156200138b578082620013769190620022a3565b91506200138a3082620015d860201b60201c565b5b620013e3306006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620017a260201b60201c565b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43635a11992090916006856040518463ffffffff1660e01b8152600401620014279392919062001eb2565b60006040518083038186803b1580156200144057600080fd5b505af415801562001455573d6000803e3d6000fd5b505050506000600660280160006101000a81548160ff02191690831515021790555050505b5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600083831115829062001515576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200150c919062001d7e565b60405180910390fd5b5060008385620015269190620022a3565b9050809150509392505050565b600073b9465abd8f286c6720a9464f023539321c0fc32e63202eb29069d3c21bcecceda10000006006602701546040518363ffffffff1660e01b81526004016200157f92919062002164565b60206040518083038186803b1580156200159857600080fd5b505af4158015620015ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015d3919062001b14565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016429062001e2a565b60405180910390fd5b6200165f8260008362000ceb60201b60201c565b620016d28160405180606001604052806022815260200162008245602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620014ca60201b620030a0179092919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001730816002546200197560201b620031041790919060201c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001796919062002147565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562001815576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200180c9062001e6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200187f9062001dc4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162001968919062002147565b60405180910390a3505050565b6000620019bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620014ca60201b60201c565b905092915050565b828054620019d5906200235e565b90600052602060002090601f016020900481019282620019f9576000855562001a45565b82601f1062001a1457805160ff191683800117855562001a45565b8280016001018555821562001a45579182015b8281111562001a4457825182559160200191906001019062001a27565b5b50905062001a54919062001a58565b5090565b5b8082111562001a7357600081600090555060010162001a59565b5090565b60008151905062001a888162002684565b92915050565b60008151905062001a9f816200269e565b92915050565b60008151905062001ab681620026b8565b92915050565b60006020828403121562001acf57600080fd5b600062001adf8482850162001a77565b91505092915050565b60006020828403121562001afb57600080fd5b600062001b0b8482850162001a8e565b91505092915050565b60006020828403121562001b2757600080fd5b600062001b378482850162001aa5565b91505092915050565b6000806040838503121562001b5457600080fd5b600062001b648582860162001aa5565b925050602062001b778582860162001aa5565b9150509250929050565b62001b8c81620022de565b82525050565b62001b9d81620022de565b82525050565b600062001bb08262002191565b62001bbc81856200219c565b935062001bce81856020860162002328565b62001bd98162002421565b840191505092915050565b600062001bf36023836200219c565b915062001c008262002432565b604082019050919050565b600062001c1a6022836200219c565b915062001c278262002481565b604082019050919050565b600062001c41601b836200219c565b915062001c4e82620024d0565b602082019050919050565b600062001c68604a836200219c565b915062001c7582620024f9565b606082019050919050565b600062001c8f6021836200219c565b915062001c9c826200256e565b604082019050919050565b600062001cb66025836200219c565b915062001cc382620025bd565b604082019050919050565b600062001cdd6024836200219c565b915062001cea826200260c565b604082019050919050565b600062001d04601f836200219c565b915062001d11826200265b565b602082019050919050565b8082525050565b8082525050565b8082525050565b8082525050565b8082525050565b62001d4a816200231e565b82525050565b62001d5b816200231e565b82525050565b600060208201905062001d78600083018462001b81565b92915050565b6000602082019050818103600083015262001d9a818462001ba3565b905092915050565b6000602082019050818103600083015262001dbd8162001be4565b9050919050565b6000602082019050818103600083015262001ddf8162001c0b565b9050919050565b6000602082019050818103600083015262001e018162001c32565b9050919050565b6000602082019050818103600083015262001e238162001c59565b9050919050565b6000602082019050818103600083015262001e458162001c80565b9050919050565b6000602082019050818103600083015262001e678162001ca7565b9050919050565b6000602082019050818103600083015262001e898162001cce565b9050919050565b6000602082019050818103600083015262001eab8162001cf5565b9050919050565b600060608201905062001ec9600083018662001d1c565b62001ed8602083018562001d31565b62001ee7604083018462001d50565b949350505050565b600060808201905062001f06600083018762001d23565b62001f15602083018662001b92565b62001f24604083018562001d50565b62001f33606083018462001b92565b95945050505050565b600060408201905062001f53600083018562001d23565b62001f62602083018462001d50565b9392505050565b600060408201905062001f80600083018562001d2a565b62001f8f602083018462001b92565b9392505050565b600060608201905062001fad600083018662001d2a565b62001fbc602083018562001b92565b62001fcb604083018462001b92565b949350505050565b600060808201905062001fea600083018762001d2a565b62001ff9602083018662001b92565b62002008604083018562001b92565b62002017606083018462001d50565b95945050505050565b600060e08201905062002037600083018a62001d2a565b62002046602083018962001b92565b62002055604083018862001b92565b62002064606083018762001d50565b62002073608083018662001d50565b6200208260a083018562001d50565b6200209160c083018462001d50565b98975050505050505050565b6000606082019050620020b4600083018662001d2a565b620020c3602083018562001b92565b620020d2604083018462001d50565b949350505050565b600060c082019050620020f1600083018962001d38565b62002100602083018862001d31565b6200210f604083018762001b92565b6200211e606083018662001b92565b6200212d608083018562001d50565b6200213c60a083018462001b92565b979650505050505050565b60006020820190506200215e600083018462001d3f565b92915050565b60006040820190506200217b600083018562001d50565b6200218a602083018462001d50565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000620021ba826200231e565b9150620021c7836200231e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620021ff57620021fe62002394565b5b828201905092915050565b600062002217826200231e565b915062002224836200231e565b925082620022375762002236620023c3565b5b828204905092915050565b60006200224f826200231e565b91506200225c836200231e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562002298576200229762002394565b5b828202905092915050565b6000620022b0826200231e565b9150620022bd836200231e565b925082821015620022d357620022d262002394565b5b828203905092915050565b6000620022eb82620022fe565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620023485780820151818401526020810190506200232b565b8381111562002358576000848401525b50505050565b600060028204905060018216806200237757607f821691505b602082108114156200238e576200238d620023f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f6e6c7920636f6e74726163742c206f776e65722c206f722070726573616c6560008201527f20636f6e74726163742063616e207472616e7366657220746f6b656e7320626560208201527f666f726520737461727400000000000000000000000000000000000000000000604082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6200268f81620022de565b81146200269b57600080fd5b50565b620026a981620022f2565b8114620026b557600080fd5b50565b620026c3816200231e565b8114620026cf57600080fd5b50565b615b6380620026e26000396000f3fe60806040526004361061024a5760003560e01c806378e9792511610139578063a9059cbb116100b6578063c02466681161007a578063c024666814610864578063d43575331461088d578063dd62ed3e146108a9578063e4c2b2d2146108e6578063f2fde38b1461090f578063f8b45b051461093857610251565b8063a9059cbb14610795578063aacebbe3146107d2578063b123c9f3146107fb578063b1d8970814610824578063be9a65551461084d57610251565b80638e875715116100fd5780638e875715146106b057806392e67c06146106d957806395d89b4114610702578063a457c2d71461072d578063a8aa1b311461076a57610251565b806378e97925146105dd5780637cb332bb146106085780638bcd04aa146106315780638d0496131461065c5780638da5cb5b1461068557610251565b806331e79db0116101c757806351e6113b1161018b57806351e6113b1461050c57806358cf72de1461053557806370a082311461055e578063715018a61461059b57806371908a03146105b257610251565b806331e79db01461042257806332cb6b0c1461044b57806338266b221461047657806339509351146104b85780633ccfd60b146104f557610251565b80631816467f1161020e5780631816467f1461034f57806323b872dd146103785780632c1f5216146103b55780632d0f5b34146103e0578063313ce567146103f757610251565b806306fdde0314610256578063095ea7b3146102815780630b893326146102be5780631124f7dd146102fb57806318160ddd1461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610963565b6040516102789190614ccb565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190614329565b6109f5565b6040516102b59190614c64565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190614477565b610a13565b6040516102f29190614c64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d91906141e7565b610ace565b005b34801561033057600080fd5b50610339610bd4565b60405161034691906152e6565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906141e7565b610bde565b005b34801561038457600080fd5b5061039f600480360381019061039a919061429e565b610ceb565b6040516103ac9190614c64565b60405180910390f35b3480156103c157600080fd5b506103ca610dc4565b6040516103d79190614b27565b60405180910390f35b3480156103ec57600080fd5b506103f5610df1565b005b34801561040357600080fd5b5061040c610f04565b604051610419919061532a565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906141e7565b610f0d565b005b34801561045757600080fd5b50610460611037565b60405161046d91906152e6565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906141e7565b611045565b6040516104af96959493929190614bee565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190614329565b6110f5565b6040516104ec9190614c64565b60405180910390f35b34801561050157600080fd5b5061050a6111a8565b005b34801561051857600080fd5b50610533600480360381019061052e9190614593565b611307565b005b34801561054157600080fd5b5061055c600480360381019061055791906142ed565b6114f0565b005b34801561056a57600080fd5b50610585600480360381019061058091906141e7565b6115f8565b60405161059291906152e6565b60405180910390f35b3480156105a757600080fd5b506105b0611640565b005b3480156105be57600080fd5b506105c7611798565b6040516105d49190614bcc565b60405180910390f35b3480156105e957600080fd5b506105f2611834565b6040516105ff91906152e6565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906141e7565b611841565b005b34801561063d57600080fd5b50610646611947565b6040516106539190614b27565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061451b565b611974565b005b34801561069157600080fd5b5061069a611a7d565b6040516106a79190614b27565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906146cf565b611aa7565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906141e7565b611bc8565b005b34801561070e57600080fd5b50610717611cce565b6040516107249190614ccb565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190614329565b611d60565b6040516107619190614c64565b60405180910390f35b34801561077657600080fd5b5061077f611e2d565b60405161078c9190614b27565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190614329565b611e5a565b6040516107c99190614c64565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906141e7565b611e78565b005b34801561080757600080fd5b50610822600480360381019061081d91906144c9565b611f7e565b005b34801561083057600080fd5b5061084b60048036038101906108469190614239565b612087565b005b34801561085957600080fd5b50610862612196565b005b34801561087057600080fd5b5061088b600480360381019061088691906142ed565b612369565b005b6108a760048036038101906108a291906141e7565b612475565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190614262565b6129a5565b6040516108dd91906152e6565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190614631565b612a2c565b005b34801561091b57600080fd5b50610936600480360381019061093191906141e7565b612b47565b005b34801561094457600080fd5b5061094d612d0e565b60405161095a91906152e6565b60405180910390f35b606060038054610972906155f0565b80601f016020809104026020016040519081016040528092919081815260200182805461099e906155f0565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505050905090565b6000610a09610a0261314e565b8484613156565b6001905092915050565b60006006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a918f3d33846040518363ffffffff1660e01b8152600401610a75929190614b42565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906144a0565b9050919050565b610ad661314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063c0ded8f29091836040518363ffffffff1660e01b8152600401610ba1929190615095565b60006040518083038186803b158015610bb957600080fd5b505af4158015610bcd573d6000803e3d6000fd5b5050505050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1857600080fd5b600660210160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c5c61314e565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c57600080fd5b60067333853a30a6407f116e247673f05e763158e292e063904ddd539091836040518363ffffffff1660e01b8152600401610cb8929190615095565b60006040518083038186803b158015610cd057600080fd5b505af4158015610ce4573d6000803e3d6000fd5b5050505050565b6000610cf8848484613321565b610db984610d0461314e565b610db485604051806060016040528060288152602001615ae160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6a61314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b613156565b600190509392505050565b60006006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df961314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43635a11992090916006610eb4306115f8565b6040518463ffffffff1660e01b8152600401610ed293929190614ead565b60006040518083038186803b158015610eea57600080fd5b505af4158015610efe573d6000803e3d6000fd5b50505050565b60006012905090565b610f1561314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90614dcd565b60405180910390fd5b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b81526004016110029190614b27565b600060405180830381600087803b15801561101c57600080fd5b505af1158015611030573d6000803e3d6000fd5b5050505050565b69d3c21bcecceda100000081565b6060806000806060600060067333853a30a6407f116e247673f05e763158e292e0636f0d303a9091896040518363ffffffff1660e01b815260040161108b929190615095565b60006040518083038186803b1580156110a357600080fd5b505af41580156110b7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110e091906143a6565b95509550955095509550955091939550919395565b600061119e61110261314e565b84611199856001600061111361314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dad90919063ffffffff16565b613156565b6001905092915050565b6111b061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614dcd565b60405180910390fd5b60006006602701541461125157600080fd5b600061125b611a7d565b73ffffffffffffffffffffffffffffffffffffffff164760405161127e90614b12565b60006040518083038185875af1925050503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b5050905080611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90614d6d565b60405180910390fd5b50565b61130f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590614dcd565b60405180910390fd5b600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc63f72910339091856040518363ffffffff1660e01b81526004016113dd92919061506c565b60006040518083038186803b1580156113f557600080fd5b505af4158015611409573d6000803e3d6000fd5b50505050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc634777cb309091846040518363ffffffff1660e01b815260040161144c92919061506c565b60006040518083038186803b15801561146457600080fd5b505af4158015611478573d6000803e3d6000fd5b50505050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc6397d764f09091836040518363ffffffff1660e01b81526004016114bb92919061506c565b60006040518083038186803b1580156114d357600080fd5b505af41580156114e7573d6000803e3d6000fd5b50505050505050565b6114f861314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06279a68f909184846040518463ffffffff1660e01b81526004016115c4939291906151e0565b60006040518083038186803b1580156115dc57600080fd5b505af41580156115f0573d6000803e3d6000fd5b505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164861314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43637142fc5d909160066040518363ffffffff1660e01b81526004016117da929190614e84565b60006040518083038186803b1580156117f257600080fd5b505af4158015611806573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061182f9190614365565b905090565b6000600660270154905090565b61184961314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06329cf7e499091836040518363ffffffff1660e01b8152600401611914929190615095565b60006040518083038186803b15801561192c57600080fd5b505af4158015611940573d6000803e3d6000fd5b5050505050565b6000600660230160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61197c61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e0635222f5cf909184846040518463ffffffff1660e01b8152600401611a499392919061524e565b60006040518083038186803b158015611a6157600080fd5b505af4158015611a75573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611aaf61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c4363d6b7b8a3909160068b8b8b8b8b8b8b8b6040518b63ffffffff1660e01b8152600401611b8e9a99989796959493929190614ee4565b60006040518083038186803b158015611ba657600080fd5b505af4158015611bba573d6000803e3d6000fd5b505050505050505050505050565b611bd061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063f75983d99091836040518363ffffffff1660e01b8152600401611c9b929190615095565b60006040518083038186803b158015611cb357600080fd5b505af4158015611cc7573d6000803e3d6000fd5b5050505050565b606060048054611cdd906155f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d09906155f0565b8015611d565780601f10611d2b57610100808354040283529160200191611d56565b820191906000526020600020905b815481529060010190602001808311611d3957829003601f168201915b5050505050905090565b6000611e23611d6d61314e565b84611e1e85604051806060016040528060258152602001615b096025913960016000611d9761314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b613156565b6001905092915050565b60006006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611e6e611e6761314e565b8484613321565b6001905092915050565b611e8061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06336185cde9091836040518363ffffffff1660e01b8152600401611f4b929190615095565b60006040518083038186803b158015611f6357600080fd5b505af4158015611f77573d6000803e3d6000fd5b5050505050565b611f8661314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c436341d3f1a59091836040518363ffffffff1660e01b8152600401612054929190614f80565b60006040518083038186803b15801561206c57600080fd5b505af4158015612080573d6000803e3d6000fd5b5050505050565b61208f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063530c2d0a909183612145611a7d565b6040518463ffffffff1660e01b8152600401612163939291906150be565b60006040518083038186803b15801561217b57600080fd5b505af415801561218f573d6000803e3d6000fd5b5050505050565b61219e61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614dcd565b60405180910390fd5b60006006602701541461223f57600080fd5b42600660270181905550612299306006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613156565b6006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306122e5306115f8565b6000806122f0611a7d565b426040518863ffffffff1660e01b815260040161231296959493929190614b6b565b6060604051808303818588803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061236491906145e2565b505050565b61237161314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f790614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c4363d984224f909184846040518463ffffffff1660e01b815260040161244193929190614e4d565b60006040518083038186803b15801561245957600080fd5b505af415801561246d573d6000803e3d6000fd5b505050505050565b61247d61314e565b73ffffffffffffffffffffffffffffffffffffffff166006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690614ced565b60405180910390fd5b6000600267ffffffffffffffff811115612552577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125805781602001602082028036833780820191505090505b5090506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190614210565b81600081518110612660577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106126d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061271a836115f8565b90506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008587426040518663ffffffff1660e01b81526004016127829493929190614c7f565b6000604051808303818588803b15801561279b57600080fd5b505af11580156127af573d6000803e3d6000fd5b505050505060006127bf846115f8565b90508181111561299f57600082826127d79190615510565b905060006006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43634449b4fe9091846040518363ffffffff1660e01b815260040161281a929190614f80565b60206040518083038186803b15801561283257600080fd5b505af4158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a91906144f2565b905061289a6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115f8565b8111156128d2576128cf6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115f8565b90505b600081111561299c5761290b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168783612e0b565b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a876040518263ffffffff1660e01b81526004016129699190614b27565b600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050505b50505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a3461314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c436355f5f5569091898989898989896040518963ffffffff1660e01b8152600401612b0e989796959493929190614fa9565b60006040518083038186803b158015612b2657600080fd5b505af4158015612b3a573d6000803e3d6000fd5b5050505050505050505050565b612b4f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590614d2d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073b9465abd8f286c6720a9464f023539321c0fc32e63202eb29069d3c21bcecceda10000006006602701546040518363ffffffff1660e01b8152600401612d58929190615301565b60206040518083038186803b158015612d7057600080fd5b505af4158015612d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da891906144f2565b905090565b6000808284612dbc919061542f565b905083811015612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df890614d8d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee290614d0d565b60405180910390fd5b612ef6838383613ae5565b612f6181604051806060016040528060268152602001615abb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ff4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dad90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309391906152e6565b60405180910390a3505050565b60008383111582906130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df9190614ccb565b60405180910390fd5b50600083856130f79190615510565b9050809150509392505050565b600061314683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130a0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90614e2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90614d4d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161331491906152e6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561335b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561339557600080fd5b600060066027015414156134aa573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061340f57506133e0611a7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061346a5750600660240160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614dad565b60405180910390fd5b5b60008114806134e457508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156134f9576134f4838383612e0b565b613ae0565b613504838383613b5a565b600060067333853a30a6407f116e247673f05e763158e292e0635f02a859909186866040518463ffffffff1660e01b8152600401613544939291906150f5565b60206040518083038186803b15801561355c57600080fd5b505af4158015613570573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359491906144a0565b9050600082905060008083156137e3576000600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc638ecc50f49091886040518363ffffffff1660e01b81526004016135e592919061506c565b60206040518083038186803b1580156135fd57600080fd5b505af4158015613611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136359190614210565b9050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc630e514c71909183613662856115f8565b8b6040518563ffffffff1660e01b81526004016136829493929190615027565b60206040518083038186803b15801561369a57600080fd5b505af41580156136ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d291906144a0565b6136db57600090505b6000806006601a01738b20c17da67c85a8e2aacf349a26cfee168f55766369d776ae909160068d8d8d896040518763ffffffff1660e01b815260040161372696959493929190615285565b604080518083038186803b15801561373d57600080fd5b505af4158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190614557565b9150915081945060008111156137bc5781811115613791578190505b808261379d9190615510565b915080886137ab9190615510565b97506137b88a8483612e0b565b8293505b60008211156137df5781886137d19190615510565b97506137de8a3084612e0b565b5b5050505b6137ee878787612e0b565b60067333853a30a6407f116e247673f05e763158e292e0638d0a6c5c9091886138168a6115f8565b6040518463ffffffff1660e01b815260040161383493929190615217565b60006040518083038186803b15801561384c57600080fd5b505af4158015613860573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a886040518263ffffffff1660e01b81526004016138c29190614b27565b600060405180830381600087803b1580156138dc57600080fd5b505af11580156138f0573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a876040518263ffffffff1660e01b81526004016139529190614b27565b600060405180830381600087803b15801561396c57600080fd5b505af1158015613980573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613a49576006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a826040518263ffffffff1660e01b8152600401613a169190614b27565b600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b505050505b6000613a54886115f8565b90506000613a61886115f8565b905060067333853a30a6407f116e247673f05e763158e292e0630b14227e90918b8b86868b8b6040518863ffffffff1660e01b8152600401613aa99796959493929190615171565b60006040518083038186803b158015613ac157600080fd5b505af4158015613ad5573d6000803e3d6000fd5b505050505050505050505b505050565b60067333853a30a6407f116e247673f05e763158e292e06312cba02390918585856040518563ffffffff1660e01b8152600401613b25949392919061512c565b60006040518083038186803b158015613b3d57600080fd5b505af4158015613b51573d6000803e3d6000fd5b50505050505050565b6000613b65306115f8565b905060006006602501548210159050613b7c611a7d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015613bea5750613bba611a7d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613f09573073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613c7c57506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613cd957506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613d0657613ce6612d0e565b83613cf0866115f8565b613cfa919061542f565b1115613d0557600080fd5b5b808015613d235750600660280160009054906101000a900460ff16155b8015613d7f57506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015613d9057506000600660270154115b8015613da0575060066027015442115b15613f08576001600660280160006101000a81548160ff0219169083151502179055506000829050600660260154811115613dde5760066026015490505b600061271060066000016010015483613df791906154b6565b613e019190615485565b90506000811115613e25578082613e189190615510565b9150613e243082613f10565b5b613e75306006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613156565b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43635a11992090916006856040518463ffffffff1660e01b8152600401613eb793929190614ead565b60006040518083038186803b158015613ecf57600080fd5b505af4158015613ee3573d6000803e3d6000fd5b505050506000600660280160006101000a81548160ff02191690831515021790555050505b5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7790614ded565b60405180910390fd5b613f8c82600083613ae5565b613ff781604051806060016040528060228152602001615a99602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061404e8160025461310490919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140b291906152e6565b60405180910390a35050565b60006140d16140cc8461536a565b615345565b905080838252602082019050828560208602820111156140f057600080fd5b60005b85811015614120578161410688826141d2565b8452602084019350602083019250506001810190506140f3565b5050509392505050565b60008135905061413981615a3c565b92915050565b60008151905061414e81615a3c565b92915050565b60008135905061416381615a53565b92915050565b600082601f83011261417a57600080fd5b815161418a8482602086016140be565b91505092915050565b6000813590506141a281615a6a565b92915050565b6000815190506141b781615a6a565b92915050565b6000813590506141cc81615a81565b92915050565b6000815190506141e181615a81565b92915050565b6000602082840312156141f957600080fd5b60006142078482850161412a565b91505092915050565b60006020828403121561422257600080fd5b60006142308482850161413f565b91505092915050565b60006020828403121561424b57600080fd5b600061425984828501614154565b91505092915050565b6000806040838503121561427557600080fd5b60006142838582860161412a565b92505060206142948582860161412a565b9150509250929050565b6000806000606084860312156142b357600080fd5b60006142c18682870161412a565b93505060206142d28682870161412a565b92505060406142e3868287016141bd565b9150509250925092565b6000806040838503121561430057600080fd5b600061430e8582860161412a565b925050602061431f85828601614193565b9150509250929050565b6000806040838503121561433c57600080fd5b600061434a8582860161412a565b925050602061435b858286016141bd565b9150509250929050565b60006020828403121561437757600080fd5b600082015167ffffffffffffffff81111561439157600080fd5b61439d84828501614169565b91505092915050565b60008060008060008060c087890312156143bf57600080fd5b600087015167ffffffffffffffff8111156143d957600080fd5b6143e589828a01614169565b965050602087015167ffffffffffffffff81111561440257600080fd5b61440e89828a01614169565b955050604061441f89828a016141d2565b945050606061443089828a016141d2565b935050608087015167ffffffffffffffff81111561444d57600080fd5b61445989828a01614169565b92505060a061446a89828a016141d2565b9150509295509295509295565b60006020828403121561448957600080fd5b600061449784828501614193565b91505092915050565b6000602082840312156144b257600080fd5b60006144c0848285016141a8565b91505092915050565b6000602082840312156144db57600080fd5b60006144e9848285016141bd565b91505092915050565b60006020828403121561450457600080fd5b6000614512848285016141d2565b91505092915050565b6000806040838503121561452e57600080fd5b600061453c858286016141bd565b925050602061454d858286016141bd565b9150509250929050565b6000806040838503121561456a57600080fd5b6000614578858286016141d2565b9250506020614589858286016141d2565b9150509250929050565b6000806000606084860312156145a857600080fd5b60006145b6868287016141bd565b93505060206145c7868287016141bd565b92505060406145d8868287016141bd565b9150509250925092565b6000806000606084860312156145f757600080fd5b6000614605868287016141d2565b9350506020614616868287016141d2565b9250506040614627868287016141d2565b9150509250925092565b600080600080600080600060e0888a03121561464c57600080fd5b600061465a8a828b016141bd565b975050602061466b8a828b016141bd565b965050604061467c8a828b016141bd565b955050606061468d8a828b016141bd565b945050608061469e8a828b016141bd565b93505060a06146af8a828b016141bd565b92505060c06146c08a828b016141bd565b91505092959891949750929550565b600080600080600080600080610100898b0312156146ec57600080fd5b60006146fa8b828c016141bd565b985050602061470b8b828c016141bd565b975050604061471c8b828c016141bd565b965050606061472d8b828c016141bd565b955050608061473e8b828c016141bd565b94505060a061474f8b828c016141bd565b93505060c06147608b828c016141bd565b92505060e06147718b828c016141bd565b9150509295985092959890939650565b600061478d83836147c0565b60208301905092915050565b60006147a58383614ad6565b60208301905092915050565b6147ba81615556565b82525050565b6147c981615544565b82525050565b6147d881615544565b82525050565b6147e781615544565b82525050565b60006147f8826153b6565b61480281856153f1565b935061480d83615396565b8060005b8381101561483e5781516148258882614781565b9750614830836153d7565b925050600181019050614811565b5085935050505092915050565b6000614856826153c1565b6148608185615402565b935061486b836153a6565b8060005b8381101561489c5781516148838882614799565b975061488e836153e4565b92505060018101905061486f565b5085935050505092915050565b6148b281615568565b82525050565b6148c181615568565b82525050565b6148d0816155ab565b82525050565b60006148e1826153cc565b6148eb818561541e565b93506148fb8185602086016155bd565b6149048161570f565b840191505092915050565b600061491c60228361541e565b915061492782615720565b604082019050919050565b600061493f60238361541e565b915061494a8261576f565b604082019050919050565b600061496260268361541e565b915061496d826157be565b604082019050919050565b600061498560228361541e565b91506149908261580d565b604082019050919050565b60006149a860188361541e565b91506149b38261585c565b602082019050919050565b60006149cb601b8361541e565b91506149d682615885565b602082019050919050565b60006149ee604a8361541e565b91506149f9826158ae565b606082019050919050565b6000614a1160208361541e565b9150614a1c82615923565b602082019050919050565b6000614a3460218361541e565b9150614a3f8261594c565b604082019050919050565b6000614a5760258361541e565b9150614a628261599b565b604082019050919050565b6000614a7a600083615413565b9150614a85826159ea565b600082019050919050565b6000614a9d60248361541e565b9150614aa8826159ed565b604082019050919050565b8082525050565b8082525050565b8082525050565b8082525050565b8082525050565b614adf81615594565b82525050565b614aee81615594565b82525050565b614afd81615594565b82525050565b614b0c8161559e565b82525050565b6000614b1d82614a6d565b9150819050919050565b6000602082019050614b3c60008301846147cf565b92915050565b6000604082019050614b5760008301856147cf565b614b6460208301846148a9565b9392505050565b600060c082019050614b8060008301896147cf565b614b8d6020830188614ae5565b614b9a60408301876148c7565b614ba760608301866148c7565b614bb460808301856147cf565b614bc160a0830184614ae5565b979650505050505050565b60006020820190508181036000830152614be6818461484b565b905092915050565b600060c0820190508181036000830152614c08818961484b565b90508181036020830152614c1c818861484b565b9050614c2b6040830187614ae5565b614c386060830186614ae5565b8181036080830152614c4a818561484b565b9050614c5960a0830184614ae5565b979650505050505050565b6000602082019050614c7960008301846148a9565b92915050565b6000608082019050614c9460008301876148c7565b8181036020830152614ca681866147ed565b9050614cb560408301856147cf565b614cc26060830184614ae5565b95945050505050565b60006020820190508181036000830152614ce581846148d6565b905092915050565b60006020820190508181036000830152614d068161490f565b9050919050565b60006020820190508181036000830152614d2681614932565b9050919050565b60006020820190508181036000830152614d4681614955565b9050919050565b60006020820190508181036000830152614d6681614978565b9050919050565b60006020820190508181036000830152614d868161499b565b9050919050565b60006020820190508181036000830152614da6816149be565b9050919050565b60006020820190508181036000830152614dc6816149e1565b9050919050565b60006020820190508181036000830152614de681614a04565b9050919050565b60006020820190508181036000830152614e0681614a27565b9050919050565b60006020820190508181036000830152614e2681614a4a565b9050919050565b60006020820190508181036000830152614e4681614a90565b9050919050565b6000606082019050614e626000830186614ab3565b614e6f60208301856147de565b614e7c60408301846148b8565b949350505050565b6000604082019050614e996000830185614ab3565b614ea66020830184614ac8565b9392505050565b6000606082019050614ec26000830186614ab3565b614ecf6020830185614ac8565b614edc6040830184614af4565b949350505050565b600061014082019050614efa600083018d614ab3565b614f07602083018c614ac8565b614f14604083018b614af4565b614f21606083018a614af4565b614f2e6080830189614af4565b614f3b60a0830188614af4565b614f4860c0830187614af4565b614f5560e0830186614af4565b614f63610100830185614af4565b614f71610120830184614af4565b9b9a5050505050505050505050565b6000604082019050614f956000830185614ab3565b614fa26020830184614af4565b9392505050565b600061010082019050614fbf600083018b614ab3565b614fcc602083018a614af4565b614fd96040830189614af4565b614fe66060830188614af4565b614ff36080830187614af4565b61500060a0830186614af4565b61500d60c0830185614af4565b61501a60e0830184614af4565b9998505050505050505050565b600060808201905061503c6000830187614aba565b61504960208301866147de565b6150566040830185614af4565b61506360608301846147de565b95945050505050565b60006040820190506150816000830185614aba565b61508e6020830184614af4565b9392505050565b60006040820190506150aa6000830185614ac1565b6150b760208301846147de565b9392505050565b60006060820190506150d36000830186614ac1565b6150e060208301856147b1565b6150ed60408301846147de565b949350505050565b600060608201905061510a6000830186614ac1565b61511760208301856147de565b61512460408301846147de565b949350505050565b60006080820190506151416000830187614ac1565b61514e60208301866147de565b61515b60408301856147de565b6151686060830184614af4565b95945050505050565b600060e082019050615186600083018a614ac1565b61519360208301896147de565b6151a060408301886147de565b6151ad6060830187614af4565b6151ba6080830186614af4565b6151c760a0830185614af4565b6151d460c0830184614af4565b98975050505050505050565b60006060820190506151f56000830186614ac1565b61520260208301856147de565b61520f60408301846148b8565b949350505050565b600060608201905061522c6000830186614ac1565b61523960208301856147de565b6152466040830184614af4565b949350505050565b60006060820190506152636000830186614ac1565b6152706020830185614af4565b61527d6040830184614af4565b949350505050565b600060c08201905061529a6000830189614acf565b6152a76020830188614ac8565b6152b460408301876147de565b6152c160608301866147de565b6152ce6080830185614af4565b6152db60a08301846147de565b979650505050505050565b60006020820190506152fb6000830184614ae5565b92915050565b60006040820190506153166000830185614af4565b6153236020830184614af4565b9392505050565b600060208201905061533f6000830184614b03565b92915050565b600061534f615360565b905061535b8282615622565b919050565b6000604051905090565b600067ffffffffffffffff821115615385576153846156e0565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543a82615594565b915061544583615594565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547a57615479615653565b5b828201905092915050565b600061549082615594565b915061549b83615594565b9250826154ab576154aa615682565b5b828204905092915050565b60006154c182615594565b91506154cc83615594565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550557615504615653565b5b828202905092915050565b600061551b82615594565b915061552683615594565b92508282101561553957615538615653565b5b828203905092915050565b600061554f82615574565b9050919050565b600061556182615574565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155b682615594565b9050919050565b60005b838110156155db5780820151818401526020810190506155c0565b838111156155ea576000848401525b50505050565b6000600282049050600182168061560857607f821691505b6020821081141561561c5761561b6156b1565b5b50919050565b61562b8261570f565b810181811067ffffffffffffffff8211171561564a576156496156e0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f63616c6c6572206973206e6f7420746865206469766964656e6420747261636b60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f756c64206e6f742077697468647261772066756e64730000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f6e6c7920636f6e74726163742c206f776e65722c206f722070726573616c6560008201527f20636f6e74726163742063616e207472616e7366657220746f6b656e7320626560208201527f666f726520737461727400000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615a4581615544565b8114615a5057600080fd5b50565b615a5c81615556565b8114615a6757600080fd5b50565b615a7381615568565b8114615a7e57600080fd5b50565b615a8a81615594565b8114615a9557600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eab86e9b80a875a9566aa0b5bafe51e48f4e6fc0d2d54463441c1c32b969834864736f6c6343000804003345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806378e9792511610139578063a9059cbb116100b6578063c02466681161007a578063c024666814610864578063d43575331461088d578063dd62ed3e146108a9578063e4c2b2d2146108e6578063f2fde38b1461090f578063f8b45b051461093857610251565b8063a9059cbb14610795578063aacebbe3146107d2578063b123c9f3146107fb578063b1d8970814610824578063be9a65551461084d57610251565b80638e875715116100fd5780638e875715146106b057806392e67c06146106d957806395d89b4114610702578063a457c2d71461072d578063a8aa1b311461076a57610251565b806378e97925146105dd5780637cb332bb146106085780638bcd04aa146106315780638d0496131461065c5780638da5cb5b1461068557610251565b806331e79db0116101c757806351e6113b1161018b57806351e6113b1461050c57806358cf72de1461053557806370a082311461055e578063715018a61461059b57806371908a03146105b257610251565b806331e79db01461042257806332cb6b0c1461044b57806338266b221461047657806339509351146104b85780633ccfd60b146104f557610251565b80631816467f1161020e5780631816467f1461034f57806323b872dd146103785780632c1f5216146103b55780632d0f5b34146103e0578063313ce567146103f757610251565b806306fdde0314610256578063095ea7b3146102815780630b893326146102be5780631124f7dd146102fb57806318160ddd1461032457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610963565b6040516102789190614ccb565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190614329565b6109f5565b6040516102b59190614c64565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190614477565b610a13565b6040516102f29190614c64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d91906141e7565b610ace565b005b34801561033057600080fd5b50610339610bd4565b60405161034691906152e6565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906141e7565b610bde565b005b34801561038457600080fd5b5061039f600480360381019061039a919061429e565b610ceb565b6040516103ac9190614c64565b60405180910390f35b3480156103c157600080fd5b506103ca610dc4565b6040516103d79190614b27565b60405180910390f35b3480156103ec57600080fd5b506103f5610df1565b005b34801561040357600080fd5b5061040c610f04565b604051610419919061532a565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906141e7565b610f0d565b005b34801561045757600080fd5b50610460611037565b60405161046d91906152e6565b60405180910390f35b34801561048257600080fd5b5061049d600480360381019061049891906141e7565b611045565b6040516104af96959493929190614bee565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190614329565b6110f5565b6040516104ec9190614c64565b60405180910390f35b34801561050157600080fd5b5061050a6111a8565b005b34801561051857600080fd5b50610533600480360381019061052e9190614593565b611307565b005b34801561054157600080fd5b5061055c600480360381019061055791906142ed565b6114f0565b005b34801561056a57600080fd5b50610585600480360381019061058091906141e7565b6115f8565b60405161059291906152e6565b60405180910390f35b3480156105a757600080fd5b506105b0611640565b005b3480156105be57600080fd5b506105c7611798565b6040516105d49190614bcc565b60405180910390f35b3480156105e957600080fd5b506105f2611834565b6040516105ff91906152e6565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906141e7565b611841565b005b34801561063d57600080fd5b50610646611947565b6040516106539190614b27565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061451b565b611974565b005b34801561069157600080fd5b5061069a611a7d565b6040516106a79190614b27565b60405180910390f35b3480156106bc57600080fd5b506106d760048036038101906106d291906146cf565b611aa7565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906141e7565b611bc8565b005b34801561070e57600080fd5b50610717611cce565b6040516107249190614ccb565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190614329565b611d60565b6040516107619190614c64565b60405180910390f35b34801561077657600080fd5b5061077f611e2d565b60405161078c9190614b27565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190614329565b611e5a565b6040516107c99190614c64565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906141e7565b611e78565b005b34801561080757600080fd5b50610822600480360381019061081d91906144c9565b611f7e565b005b34801561083057600080fd5b5061084b60048036038101906108469190614239565b612087565b005b34801561085957600080fd5b50610862612196565b005b34801561087057600080fd5b5061088b600480360381019061088691906142ed565b612369565b005b6108a760048036038101906108a291906141e7565b612475565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190614262565b6129a5565b6040516108dd91906152e6565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190614631565b612a2c565b005b34801561091b57600080fd5b50610936600480360381019061093191906141e7565b612b47565b005b34801561094457600080fd5b5061094d612d0e565b60405161095a91906152e6565b60405180910390f35b606060038054610972906155f0565b80601f016020809104026020016040519081016040528092919081815260200182805461099e906155f0565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505050905090565b6000610a09610a0261314e565b8484613156565b6001905092915050565b60006006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a918f3d33846040518363ffffffff1660e01b8152600401610a75929190614b42565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906144a0565b9050919050565b610ad661314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063c0ded8f29091836040518363ffffffff1660e01b8152600401610ba1929190615095565b60006040518083038186803b158015610bb957600080fd5b505af4158015610bcd573d6000803e3d6000fd5b5050505050565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1857600080fd5b600660210160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c5c61314e565b73ffffffffffffffffffffffffffffffffffffffff1614610c7c57600080fd5b60067333853a30a6407f116e247673f05e763158e292e063904ddd539091836040518363ffffffff1660e01b8152600401610cb8929190615095565b60006040518083038186803b158015610cd057600080fd5b505af4158015610ce4573d6000803e3d6000fd5b5050505050565b6000610cf8848484613321565b610db984610d0461314e565b610db485604051806060016040528060288152602001615ae160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d6a61314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b613156565b600190509392505050565b60006006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df961314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43635a11992090916006610eb4306115f8565b6040518463ffffffff1660e01b8152600401610ed293929190614ead565b60006040518083038186803b158015610eea57600080fd5b505af4158015610efe573d6000803e3d6000fd5b50505050565b60006012905090565b610f1561314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90614dcd565b60405180910390fd5b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b81526004016110029190614b27565b600060405180830381600087803b15801561101c57600080fd5b505af1158015611030573d6000803e3d6000fd5b5050505050565b69d3c21bcecceda100000081565b6060806000806060600060067333853a30a6407f116e247673f05e763158e292e0636f0d303a9091896040518363ffffffff1660e01b815260040161108b929190615095565b60006040518083038186803b1580156110a357600080fd5b505af41580156110b7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110e091906143a6565b95509550955095509550955091939550919395565b600061119e61110261314e565b84611199856001600061111361314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dad90919063ffffffff16565b613156565b6001905092915050565b6111b061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614dcd565b60405180910390fd5b60006006602701541461125157600080fd5b600061125b611a7d565b73ffffffffffffffffffffffffffffffffffffffff164760405161127e90614b12565b60006040518083038185875af1925050503d80600081146112bb576040519150601f19603f3d011682016040523d82523d6000602084013e6112c0565b606091505b5050905080611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90614d6d565b60405180910390fd5b50565b61130f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139590614dcd565b60405180910390fd5b600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc63f72910339091856040518363ffffffff1660e01b81526004016113dd92919061506c565b60006040518083038186803b1580156113f557600080fd5b505af4158015611409573d6000803e3d6000fd5b50505050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc634777cb309091846040518363ffffffff1660e01b815260040161144c92919061506c565b60006040518083038186803b15801561146457600080fd5b505af4158015611478573d6000803e3d6000fd5b50505050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc6397d764f09091836040518363ffffffff1660e01b81526004016114bb92919061506c565b60006040518083038186803b1580156114d357600080fd5b505af41580156114e7573d6000803e3d6000fd5b50505050505050565b6114f861314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06279a68f909184846040518463ffffffff1660e01b81526004016115c4939291906151e0565b60006040518083038186803b1580156115dc57600080fd5b505af41580156115f0573d6000803e3d6000fd5b505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164861314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43637142fc5d909160066040518363ffffffff1660e01b81526004016117da929190614e84565b60006040518083038186803b1580156117f257600080fd5b505af4158015611806573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061182f9190614365565b905090565b6000600660270154905090565b61184961314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06329cf7e499091836040518363ffffffff1660e01b8152600401611914929190615095565b60006040518083038186803b15801561192c57600080fd5b505af4158015611940573d6000803e3d6000fd5b5050505050565b6000600660230160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61197c61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e0635222f5cf909184846040518463ffffffff1660e01b8152600401611a499392919061524e565b60006040518083038186803b158015611a6157600080fd5b505af4158015611a75573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611aaf61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c4363d6b7b8a3909160068b8b8b8b8b8b8b8b6040518b63ffffffff1660e01b8152600401611b8e9a99989796959493929190614ee4565b60006040518083038186803b158015611ba657600080fd5b505af4158015611bba573d6000803e3d6000fd5b505050505050505050505050565b611bd061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063f75983d99091836040518363ffffffff1660e01b8152600401611c9b929190615095565b60006040518083038186803b158015611cb357600080fd5b505af4158015611cc7573d6000803e3d6000fd5b5050505050565b606060048054611cdd906155f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d09906155f0565b8015611d565780601f10611d2b57610100808354040283529160200191611d56565b820191906000526020600020905b815481529060010190602001808311611d3957829003601f168201915b5050505050905090565b6000611e23611d6d61314e565b84611e1e85604051806060016040528060258152602001615b096025913960016000611d9761314e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b613156565b6001905092915050565b60006006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611e6e611e6761314e565b8484613321565b6001905092915050565b611e8061314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0690614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e06336185cde9091836040518363ffffffff1660e01b8152600401611f4b929190615095565b60006040518083038186803b158015611f6357600080fd5b505af4158015611f77573d6000803e3d6000fd5b5050505050565b611f8661314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c436341d3f1a59091836040518363ffffffff1660e01b8152600401612054929190614f80565b60006040518083038186803b15801561206c57600080fd5b505af4158015612080573d6000803e3d6000fd5b5050505050565b61208f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614dcd565b60405180910390fd5b60067333853a30a6407f116e247673f05e763158e292e063530c2d0a909183612145611a7d565b6040518463ffffffff1660e01b8152600401612163939291906150be565b60006040518083038186803b15801561217b57600080fd5b505af415801561218f573d6000803e3d6000fd5b5050505050565b61219e61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614dcd565b60405180910390fd5b60006006602701541461223f57600080fd5b42600660270181905550612299306006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613156565b6006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306122e5306115f8565b6000806122f0611a7d565b426040518863ffffffff1660e01b815260040161231296959493929190614b6b565b6060604051808303818588803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061236491906145e2565b505050565b61237161314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f790614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c4363d984224f909184846040518463ffffffff1660e01b815260040161244193929190614e4d565b60006040518083038186803b15801561245957600080fd5b505af415801561246d573d6000803e3d6000fd5b505050505050565b61247d61314e565b73ffffffffffffffffffffffffffffffffffffffff166006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690614ced565b60405180910390fd5b6000600267ffffffffffffffff811115612552577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156125805781602001602082028036833780820191505090505b5090506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190614210565b81600081518110612660577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106126d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061271a836115f8565b90506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008587426040518663ffffffff1660e01b81526004016127829493929190614c7f565b6000604051808303818588803b15801561279b57600080fd5b505af11580156127af573d6000803e3d6000fd5b505050505060006127bf846115f8565b90508181111561299f57600082826127d79190615510565b905060006006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43634449b4fe9091846040518363ffffffff1660e01b815260040161281a929190614f80565b60206040518083038186803b15801561283257600080fd5b505af4158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a91906144f2565b905061289a6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115f8565b8111156128d2576128cf6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115f8565b90505b600081111561299c5761290b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168783612e0b565b6006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a876040518263ffffffff1660e01b81526004016129699190614b27565b600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050505b50505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a3461314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614dcd565b60405180910390fd5b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c436355f5f5569091898989898989896040518963ffffffff1660e01b8152600401612b0e989796959493929190614fa9565b60006040518083038186803b158015612b2657600080fd5b505af4158015612b3a573d6000803e3d6000fd5b5050505050505050505050565b612b4f61314e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590614d2d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073b9465abd8f286c6720a9464f023539321c0fc32e63202eb29069d3c21bcecceda10000006006602701546040518363ffffffff1660e01b8152600401612d58929190615301565b60206040518083038186803b158015612d7057600080fd5b505af4158015612d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da891906144f2565b905090565b6000808284612dbc919061542f565b905083811015612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df890614d8d565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee290614d0d565b60405180910390fd5b612ef6838383613ae5565b612f6181604051806060016040528060268152602001615abb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ff4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dad90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161309391906152e6565b60405180910390a3505050565b60008383111582906130e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130df9190614ccb565b60405180910390fd5b50600083856130f79190615510565b9050809150509392505050565b600061314683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130a0565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90614e2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90614d4d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161331491906152e6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561335b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561339557600080fd5b600060066027015414156134aa573073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061340f57506133e0611a7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061346a5750600660240160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6134a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a090614dad565b60405180910390fd5b5b60008114806134e457508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156134f9576134f4838383612e0b565b613ae0565b613504838383613b5a565b600060067333853a30a6407f116e247673f05e763158e292e0635f02a859909186866040518463ffffffff1660e01b8152600401613544939291906150f5565b60206040518083038186803b15801561355c57600080fd5b505af4158015613570573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359491906144a0565b9050600082905060008083156137e3576000600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc638ecc50f49091886040518363ffffffff1660e01b81526004016135e592919061506c565b60206040518083038186803b1580156135fd57600080fd5b505af4158015613611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136359190614210565b9050600660140173e923a2c3bce58ce2ee617d0d65f01669aec9e8bc630e514c71909183613662856115f8565b8b6040518563ffffffff1660e01b81526004016136829493929190615027565b60206040518083038186803b15801561369a57600080fd5b505af41580156136ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d291906144a0565b6136db57600090505b6000806006601a01738b20c17da67c85a8e2aacf349a26cfee168f55766369d776ae909160068d8d8d896040518763ffffffff1660e01b815260040161372696959493929190615285565b604080518083038186803b15801561373d57600080fd5b505af4158015613751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137759190614557565b9150915081945060008111156137bc5781811115613791578190505b808261379d9190615510565b915080886137ab9190615510565b97506137b88a8483612e0b565b8293505b60008211156137df5781886137d19190615510565b97506137de8a3084612e0b565b5b5050505b6137ee878787612e0b565b60067333853a30a6407f116e247673f05e763158e292e0638d0a6c5c9091886138168a6115f8565b6040518463ffffffff1660e01b815260040161383493929190615217565b60006040518083038186803b15801561384c57600080fd5b505af4158015613860573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a886040518263ffffffff1660e01b81526004016138c29190614b27565b600060405180830381600087803b1580156138dc57600080fd5b505af11580156138f0573d6000803e3d6000fd5b505050506006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a876040518263ffffffff1660e01b81526004016139529190614b27565b600060405180830381600087803b15801561396c57600080fd5b505af1158015613980573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613a49576006601e0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd133c8a826040518263ffffffff1660e01b8152600401613a169190614b27565b600060405180830381600087803b158015613a3057600080fd5b505af1158015613a44573d6000803e3d6000fd5b505050505b6000613a54886115f8565b90506000613a61886115f8565b905060067333853a30a6407f116e247673f05e763158e292e0630b14227e90918b8b86868b8b6040518863ffffffff1660e01b8152600401613aa99796959493929190615171565b60006040518083038186803b158015613ac157600080fd5b505af4158015613ad5573d6000803e3d6000fd5b505050505050505050505b505050565b60067333853a30a6407f116e247673f05e763158e292e06312cba02390918585856040518563ffffffff1660e01b8152600401613b25949392919061512c565b60006040518083038186803b158015613b3d57600080fd5b505af4158015613b51573d6000803e3d6000fd5b50505050505050565b6000613b65306115f8565b905060006006602501548210159050613b7c611a7d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015613bea5750613bba611a7d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613f09573073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613c7c57506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015613cd957506006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613d0657613ce6612d0e565b83613cf0866115f8565b613cfa919061542f565b1115613d0557600080fd5b5b808015613d235750600660280160009054906101000a900460ff16155b8015613d7f57506006601d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015613d9057506000600660270154115b8015613da0575060066027015442115b15613f08576001600660280160006101000a81548160ff0219169083151502179055506000829050600660260154811115613dde5760066026015490505b600061271060066000016010015483613df791906154b6565b613e019190615485565b90506000811115613e25578082613e189190615510565b9150613e243082613f10565b5b613e75306006601c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613156565b6006600001735391cbd188a3826edc589dd6ff73a2d66c3c0c43635a11992090916006856040518463ffffffff1660e01b8152600401613eb793929190614ead565b60006040518083038186803b158015613ecf57600080fd5b505af4158015613ee3573d6000803e3d6000fd5b505050506000600660280160006101000a81548160ff02191690831515021790555050505b5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7790614ded565b60405180910390fd5b613f8c82600083613ae5565b613ff781604051806060016040528060228152602001615a99602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130a09092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061404e8160025461310490919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140b291906152e6565b60405180910390a35050565b60006140d16140cc8461536a565b615345565b905080838252602082019050828560208602820111156140f057600080fd5b60005b85811015614120578161410688826141d2565b8452602084019350602083019250506001810190506140f3565b5050509392505050565b60008135905061413981615a3c565b92915050565b60008151905061414e81615a3c565b92915050565b60008135905061416381615a53565b92915050565b600082601f83011261417a57600080fd5b815161418a8482602086016140be565b91505092915050565b6000813590506141a281615a6a565b92915050565b6000815190506141b781615a6a565b92915050565b6000813590506141cc81615a81565b92915050565b6000815190506141e181615a81565b92915050565b6000602082840312156141f957600080fd5b60006142078482850161412a565b91505092915050565b60006020828403121561422257600080fd5b60006142308482850161413f565b91505092915050565b60006020828403121561424b57600080fd5b600061425984828501614154565b91505092915050565b6000806040838503121561427557600080fd5b60006142838582860161412a565b92505060206142948582860161412a565b9150509250929050565b6000806000606084860312156142b357600080fd5b60006142c18682870161412a565b93505060206142d28682870161412a565b92505060406142e3868287016141bd565b9150509250925092565b6000806040838503121561430057600080fd5b600061430e8582860161412a565b925050602061431f85828601614193565b9150509250929050565b6000806040838503121561433c57600080fd5b600061434a8582860161412a565b925050602061435b858286016141bd565b9150509250929050565b60006020828403121561437757600080fd5b600082015167ffffffffffffffff81111561439157600080fd5b61439d84828501614169565b91505092915050565b60008060008060008060c087890312156143bf57600080fd5b600087015167ffffffffffffffff8111156143d957600080fd5b6143e589828a01614169565b965050602087015167ffffffffffffffff81111561440257600080fd5b61440e89828a01614169565b955050604061441f89828a016141d2565b945050606061443089828a016141d2565b935050608087015167ffffffffffffffff81111561444d57600080fd5b61445989828a01614169565b92505060a061446a89828a016141d2565b9150509295509295509295565b60006020828403121561448957600080fd5b600061449784828501614193565b91505092915050565b6000602082840312156144b257600080fd5b60006144c0848285016141a8565b91505092915050565b6000602082840312156144db57600080fd5b60006144e9848285016141bd565b91505092915050565b60006020828403121561450457600080fd5b6000614512848285016141d2565b91505092915050565b6000806040838503121561452e57600080fd5b600061453c858286016141bd565b925050602061454d858286016141bd565b9150509250929050565b6000806040838503121561456a57600080fd5b6000614578858286016141d2565b9250506020614589858286016141d2565b9150509250929050565b6000806000606084860312156145a857600080fd5b60006145b6868287016141bd565b93505060206145c7868287016141bd565b92505060406145d8868287016141bd565b9150509250925092565b6000806000606084860312156145f757600080fd5b6000614605868287016141d2565b9350506020614616868287016141d2565b9250506040614627868287016141d2565b9150509250925092565b600080600080600080600060e0888a03121561464c57600080fd5b600061465a8a828b016141bd565b975050602061466b8a828b016141bd565b965050604061467c8a828b016141bd565b955050606061468d8a828b016141bd565b945050608061469e8a828b016141bd565b93505060a06146af8a828b016141bd565b92505060c06146c08a828b016141bd565b91505092959891949750929550565b600080600080600080600080610100898b0312156146ec57600080fd5b60006146fa8b828c016141bd565b985050602061470b8b828c016141bd565b975050604061471c8b828c016141bd565b965050606061472d8b828c016141bd565b955050608061473e8b828c016141bd565b94505060a061474f8b828c016141bd565b93505060c06147608b828c016141bd565b92505060e06147718b828c016141bd565b9150509295985092959890939650565b600061478d83836147c0565b60208301905092915050565b60006147a58383614ad6565b60208301905092915050565b6147ba81615556565b82525050565b6147c981615544565b82525050565b6147d881615544565b82525050565b6147e781615544565b82525050565b60006147f8826153b6565b61480281856153f1565b935061480d83615396565b8060005b8381101561483e5781516148258882614781565b9750614830836153d7565b925050600181019050614811565b5085935050505092915050565b6000614856826153c1565b6148608185615402565b935061486b836153a6565b8060005b8381101561489c5781516148838882614799565b975061488e836153e4565b92505060018101905061486f565b5085935050505092915050565b6148b281615568565b82525050565b6148c181615568565b82525050565b6148d0816155ab565b82525050565b60006148e1826153cc565b6148eb818561541e565b93506148fb8185602086016155bd565b6149048161570f565b840191505092915050565b600061491c60228361541e565b915061492782615720565b604082019050919050565b600061493f60238361541e565b915061494a8261576f565b604082019050919050565b600061496260268361541e565b915061496d826157be565b604082019050919050565b600061498560228361541e565b91506149908261580d565b604082019050919050565b60006149a860188361541e565b91506149b38261585c565b602082019050919050565b60006149cb601b8361541e565b91506149d682615885565b602082019050919050565b60006149ee604a8361541e565b91506149f9826158ae565b606082019050919050565b6000614a1160208361541e565b9150614a1c82615923565b602082019050919050565b6000614a3460218361541e565b9150614a3f8261594c565b604082019050919050565b6000614a5760258361541e565b9150614a628261599b565b604082019050919050565b6000614a7a600083615413565b9150614a85826159ea565b600082019050919050565b6000614a9d60248361541e565b9150614aa8826159ed565b604082019050919050565b8082525050565b8082525050565b8082525050565b8082525050565b8082525050565b614adf81615594565b82525050565b614aee81615594565b82525050565b614afd81615594565b82525050565b614b0c8161559e565b82525050565b6000614b1d82614a6d565b9150819050919050565b6000602082019050614b3c60008301846147cf565b92915050565b6000604082019050614b5760008301856147cf565b614b6460208301846148a9565b9392505050565b600060c082019050614b8060008301896147cf565b614b8d6020830188614ae5565b614b9a60408301876148c7565b614ba760608301866148c7565b614bb460808301856147cf565b614bc160a0830184614ae5565b979650505050505050565b60006020820190508181036000830152614be6818461484b565b905092915050565b600060c0820190508181036000830152614c08818961484b565b90508181036020830152614c1c818861484b565b9050614c2b6040830187614ae5565b614c386060830186614ae5565b8181036080830152614c4a818561484b565b9050614c5960a0830184614ae5565b979650505050505050565b6000602082019050614c7960008301846148a9565b92915050565b6000608082019050614c9460008301876148c7565b8181036020830152614ca681866147ed565b9050614cb560408301856147cf565b614cc26060830184614ae5565b95945050505050565b60006020820190508181036000830152614ce581846148d6565b905092915050565b60006020820190508181036000830152614d068161490f565b9050919050565b60006020820190508181036000830152614d2681614932565b9050919050565b60006020820190508181036000830152614d4681614955565b9050919050565b60006020820190508181036000830152614d6681614978565b9050919050565b60006020820190508181036000830152614d868161499b565b9050919050565b60006020820190508181036000830152614da6816149be565b9050919050565b60006020820190508181036000830152614dc6816149e1565b9050919050565b60006020820190508181036000830152614de681614a04565b9050919050565b60006020820190508181036000830152614e0681614a27565b9050919050565b60006020820190508181036000830152614e2681614a4a565b9050919050565b60006020820190508181036000830152614e4681614a90565b9050919050565b6000606082019050614e626000830186614ab3565b614e6f60208301856147de565b614e7c60408301846148b8565b949350505050565b6000604082019050614e996000830185614ab3565b614ea66020830184614ac8565b9392505050565b6000606082019050614ec26000830186614ab3565b614ecf6020830185614ac8565b614edc6040830184614af4565b949350505050565b600061014082019050614efa600083018d614ab3565b614f07602083018c614ac8565b614f14604083018b614af4565b614f21606083018a614af4565b614f2e6080830189614af4565b614f3b60a0830188614af4565b614f4860c0830187614af4565b614f5560e0830186614af4565b614f63610100830185614af4565b614f71610120830184614af4565b9b9a5050505050505050505050565b6000604082019050614f956000830185614ab3565b614fa26020830184614af4565b9392505050565b600061010082019050614fbf600083018b614ab3565b614fcc602083018a614af4565b614fd96040830189614af4565b614fe66060830188614af4565b614ff36080830187614af4565b61500060a0830186614af4565b61500d60c0830185614af4565b61501a60e0830184614af4565b9998505050505050505050565b600060808201905061503c6000830187614aba565b61504960208301866147de565b6150566040830185614af4565b61506360608301846147de565b95945050505050565b60006040820190506150816000830185614aba565b61508e6020830184614af4565b9392505050565b60006040820190506150aa6000830185614ac1565b6150b760208301846147de565b9392505050565b60006060820190506150d36000830186614ac1565b6150e060208301856147b1565b6150ed60408301846147de565b949350505050565b600060608201905061510a6000830186614ac1565b61511760208301856147de565b61512460408301846147de565b949350505050565b60006080820190506151416000830187614ac1565b61514e60208301866147de565b61515b60408301856147de565b6151686060830184614af4565b95945050505050565b600060e082019050615186600083018a614ac1565b61519360208301896147de565b6151a060408301886147de565b6151ad6060830187614af4565b6151ba6080830186614af4565b6151c760a0830185614af4565b6151d460c0830184614af4565b98975050505050505050565b60006060820190506151f56000830186614ac1565b61520260208301856147de565b61520f60408301846148b8565b949350505050565b600060608201905061522c6000830186614ac1565b61523960208301856147de565b6152466040830184614af4565b949350505050565b60006060820190506152636000830186614ac1565b6152706020830185614af4565b61527d6040830184614af4565b949350505050565b600060c08201905061529a6000830189614acf565b6152a76020830188614ac8565b6152b460408301876147de565b6152c160608301866147de565b6152ce6080830185614af4565b6152db60a08301846147de565b979650505050505050565b60006020820190506152fb6000830184614ae5565b92915050565b60006040820190506153166000830185614af4565b6153236020830184614af4565b9392505050565b600060208201905061533f6000830184614b03565b92915050565b600061534f615360565b905061535b8282615622565b919050565b6000604051905090565b600067ffffffffffffffff821115615385576153846156e0565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543a82615594565b915061544583615594565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547a57615479615653565b5b828201905092915050565b600061549082615594565b915061549b83615594565b9250826154ab576154aa615682565b5b828204905092915050565b60006154c182615594565b91506154cc83615594565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550557615504615653565b5b828202905092915050565b600061551b82615594565b915061552683615594565b92508282101561553957615538615653565b5b828203905092915050565b600061554f82615574565b9050919050565b600061556182615574565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155b682615594565b9050919050565b60005b838110156155db5780820151818401526020810190506155c0565b838111156155ea576000848401525b50505050565b6000600282049050600182168061560857607f821691505b6020821081141561561c5761561b6156b1565b5b50919050565b61562b8261570f565b810181811067ffffffffffffffff8211171561564a576156496156e0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f63616c6c6572206973206e6f7420746865206469766964656e6420747261636b60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f756c64206e6f742077697468647261772066756e64730000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4f6e6c7920636f6e74726163742c206f776e65722c206f722070726573616c6560008201527f20636f6e74726163742063616e207472616e7366657220746f6b656e7320626560208201527f666f726520737461727400000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615a4581615544565b8114615a5057600080fd5b50565b615a5c81615556565b8114615a6757600080fd5b50565b615a7381615568565b8114615a7e57600080fd5b50565b615a8a81615594565b8114615a9557600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eab86e9b80a875a9566aa0b5bafe51e48f4e6fc0d2d54463441c1c32b969834864736f6c63430008040033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.