ETH Price: $3,239.52 (-0.46%)
Gas: 2 Gwei

Contract

0xfF370b631eB703034364C09C94435b9c11128AE4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pool178351852023-08-03 14:52:59359 days ago1691074379IN
0xfF370b63...c11128AE4
0 ETH0.0091467942.11910261
Widthdraw IAI178282362023-08-02 15:34:47360 days ago1690990487IN
0xfF370b63...c11128AE4
0 ETH0.0022644337.22685964
Pool178274862023-08-02 13:03:23360 days ago1690981403IN
0xfF370b63...c11128AE4
0 ETH0.0056210227.35010961
Set Di Ids177876712023-07-27 23:26:47366 days ago1690500407IN
0xfF370b63...c11128AE4
0 ETH0.0175963226.91656667
0x60806040177875122023-07-27 22:54:59366 days ago1690498499IN
 Create: iAIPoolDI
0 ETH0.1053402325.71941235

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
iAIPoolDI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : iAIPoolDI.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import './IPool.sol';

contract iAIPoolDI is IPool {
  mapping(uint256 => bool) public DiIds;

  constructor(address iAITokenAddress, address nftTokenAddress) IPool(iAITokenAddress, nftTokenAddress) {
    poolType = 'Pool Destination Inheritance';
    apr = 1200;
    nftThreshold = 1;
    tokenThreshold = 300000 ether;
    minPoolPeriod = 365 days;
  }

  function setDiIds(uint256[] memory keys, bool[] memory values) external onlyOwner {
    require(keys.length == values.length, 'Arrays length mismatch');

    for (uint256 i = 0; i < keys.length; i++) {
      DiIds[keys[i]] = values[i];
    }
  }

  function determineDI(address _address) public view returns (bool) {
    uint256 totalTokens = nft9022.balanceOf(_address);
    uint256 tokenId;

    for (uint256 i = 0; i < totalTokens; i++) {
      tokenId = nft9022.tokenOfOwnerByIndex(_address, i);
      if (DiIds[tokenId]) {
        return true;
      }
    }
    return false;
  }

  function pool(uint256 _amount) external payable {
    require(poolActive, 'Pool is not currently active');
    require(determineDI(msg.sender), 'Wallet does not own any Destination Inheritance 9022 NFTs');
    require(iAI.balanceOf(msg.sender) >= _amount, 'Insufficient $iAI balance');
    require(_amount >= tokenThreshold, '$iAI threshold not met');

    iAI.transferFrom(msg.sender, address(this), _amount);
    poolBalance[msg.sender] += _amount;
    poolData[msg.sender].push(Pool(_amount, apr, block.timestamp, poolType));
    emit Pooled(msg.sender, _amount);
  }

  function unPool(uint256 _index) external nonReentrant {
    require(poolActive, 'Pool is not currently active');
    require(poolData[msg.sender].length > 0, 'No stakes found for the address');
    require(poolData[msg.sender].length >= _index + 1, 'Stake does not exist');
    uint256 lastStakeIndex = _index;
    Pool memory lastStake = poolData[msg.sender][lastStakeIndex];
    uint256 timeStaked = block.timestamp - lastStake.timestamp;
    require(timeStaked >= minPoolPeriod, 'Minimum pooling period not reached');
    uint256 latestStake = lastStake.amount;
    uint256 reward = (latestStake * apr) / 10000;
    uint256 payout = latestStake + reward;
    // Remove the stake at the given index
    for (uint256 i = _index; i < poolData[msg.sender].length - 1; i++) {
      poolData[msg.sender][i] = poolData[msg.sender][i + 1];
    }
    poolData[msg.sender].pop();
    poolBalance[msg.sender] -= latestStake;
    lastClaimTime[msg.sender] = block.timestamp;
    iAI.transfer(msg.sender, payout);
    emit Unpooled(msg.sender, payout, timeStaked);
  }

  function withdrawPosition(uint256 _index) external nonReentrant {
    require(poolActive, 'Pool is not currently active');
    require(poolData[msg.sender].length > 0, 'No stakes found for the address');
    require(poolData[msg.sender].length >= _index + 1, 'Stake does not exist');
    uint256 lastStakeIndex = _index;
    Pool memory lastStake = poolData[msg.sender][lastStakeIndex];
    uint256 timeStaked = block.timestamp - lastStake.timestamp;
    uint256 latestStake = lastStake.amount;
    require(timeStaked <= minPoolPeriod, 'Withdraw with penalty time exceed you can now unstake token ');
    uint256 penalty = (latestStake * withdrawPenalty) / 100;
    // Remove the stake at the given index
    for (uint256 i = _index; i < poolData[msg.sender].length - 1; i++) {
      poolData[msg.sender][i] = poolData[msg.sender][i + 1];
    }
    poolData[msg.sender].pop();
    poolBalance[msg.sender] -= latestStake;
    lastClaimTime[msg.sender] = block.timestamp;
    uint256 payout = latestStake - penalty;
    iAI.transfer(msg.sender, payout);
    emit Penalty(msg.sender, payout);
  }

  function claimReward() external nonReentrant {
    require(poolActive, 'Pool is not currently active');
    require(poolData[msg.sender].length > 0, 'No stakes found for the address');
    uint256 totalStaked = poolBalance[msg.sender];
    uint256 lastClaim = lastClaimTime[msg.sender];
    uint256 timeElapsed = block.timestamp - lastClaim;
    require(timeElapsed > 0, 'No rewards to claim');
    // Calculate the reward
    uint256 reward = (totalStaked * (apr / 365) * (timeElapsed / 1 days)) / 100;
    require(reward > 0, 'Not Eligible for reward');
    lastClaimTime[msg.sender] = block.timestamp;
    iAI.transfer(msg.sender, reward);
    emit RewardClaimed(msg.sender, reward);
  }
}

File 2 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 5 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with 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) {
        return msg.data;
    }
}

File 5 of 5 : IPool.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import '@openzeppelin/contracts/security/ReentrancyGuard.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

interface IiAI {
  function transfer(address to, uint256 amount) external returns (bool);

  function transferFrom(address from, address to, uint256 amount) external returns (bool);

  function balanceOf(address account) external view returns (uint256);
}

interface I9022 {
  function balanceOf(address account) external view returns (uint256);

  function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
}

contract IPool is ReentrancyGuard, Ownable {
  IiAI public iAI;
  I9022 public nft9022;

  struct Pool {
    uint256 amount;
    uint256 apr;
    uint256 timestamp;
    string poolType;
  }

  string public poolType;
  uint256 public apr;
  uint256 public nftThreshold;
  uint256 public tokenThreshold;
  uint256 public minPoolPeriod;
  uint256 public withdrawPenalty = 25;
  bool public poolActive = true;

  mapping(address => Pool[]) internal poolData;
  mapping(address => uint256) internal poolBalance;
  mapping(address => uint256) internal lastClaimTime;

  event Pooled(address indexed from, uint256 amount);
  event Unpooled(address indexed to, uint256 amount, uint256 poolPeriod);
  event Penalty(address indexed to, uint256 amount);
  event RewardClaimed(address indexed to, uint256 amount);
  event Received(address, uint);

  constructor(address iAITokenAddress, address nftTokenAddress) Ownable() {
    iAI = IiAI(iAITokenAddress);
    nft9022 = I9022(nftTokenAddress);
  }

  receive() external payable {
    emit Received(msg.sender, msg.value);
  }

  function setPoolState() external onlyOwner {
    poolActive = !poolActive;
  }

  function setIAIToken(address _tokenAddress) external onlyOwner {
    iAI = IiAI(_tokenAddress);
  }

  function setNftToken(address _tokenAddress) external onlyOwner {
    nft9022 = I9022(_tokenAddress);
  }

  function setTokenThreshold(uint256 _amount) external onlyOwner {
    require(_amount > 0, 'Amount can not be 0');
    tokenThreshold = _amount;
  }

  function setNftThreshold(uint256 _amount) external onlyOwner {
    require(_amount > 0, 'Amount can not be 0');
    nftThreshold = _amount;
  }

  function setARP(uint256 _arp) external onlyOwner {
    require(_arp > 0, 'Amount can not be zero');
    apr = _arp;
  }

  function setMinPoolingPeriod(uint256 _minstakingPeriod) external onlyOwner {
    require(_minstakingPeriod > 0, "Amount cann't be zero");
    minPoolPeriod = _minstakingPeriod;
  }

  function setWithdrawPenalty(uint256 _withdrawPenalty) external onlyOwner {
    require(_withdrawPenalty > 0, "Amount cann't be zero");
    withdrawPenalty = _withdrawPenalty;
  }

  function poolPostions(address _staker) public view returns (uint256) {
    return poolBalance[_staker];
  }

  function poolPostionDetails(address _staker, uint256 _index) public view returns (Pool memory) {
    return poolData[_staker][_index];
  }

  function lastclaimtime(address _staker) public view returns (uint256) {
    return lastClaimTime[_staker];
  }

  function allPooled(address _staker) public view returns (Pool[] memory) {
    return poolData[_staker];
  }

  function widthdrawIAI(address _address, uint256 _amount) external onlyOwner {
    iAI.transfer(_address, _amount);
  }

  function withdraw(address _address) external onlyOwner {
    uint256 balance = address(this).balance;
    require(balance > 0, 'Amount is too high');
    payable(_address).transfer(balance);
  }

  function getUserTokens(address _address) public view returns (uint256[] memory) {
    uint256 totalTokens = nft9022.balanceOf(_address);
    uint256[] memory tokenIds = new uint256[](totalTokens);

    for (uint256 i = 0; i < totalTokens; i++) {
      tokenIds[i] = nft9022.tokenOfOwnerByIndex(_address, i);
    }

    return tokenIds;
  }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"iAITokenAddress","type":"address"},{"internalType":"address","name":"nftTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Penalty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Pooled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolPeriod","type":"uint256"}],"name":"Unpooled","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DiIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"allPooled","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"poolType","type":"string"}],"internalType":"struct IPool.Pool[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"determineDI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iAI","outputs":[{"internalType":"contract IiAI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"lastclaimtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPoolPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft9022","outputs":[{"internalType":"contract I9022","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"pool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"poolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"poolPostionDetails","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"poolType","type":"string"}],"internalType":"struct IPool.Pool","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"poolPostions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolType","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_arp","type":"uint256"}],"name":"setARP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"keys","type":"uint256[]"},{"internalType":"bool[]","name":"values","type":"bool[]"}],"name":"setDiIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setIAIToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minstakingPeriod","type":"uint256"}],"name":"setMinPoolingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNftThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"setNftToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPoolState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawPenalty","type":"uint256"}],"name":"setWithdrawPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"unPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"widthdrawIAI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPenalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"withdrawPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260196009556001600a60006101000a81548160ff0219169083151502179055503480156200003157600080fd5b5060405162004ae838038062004ae88339818101604052810190620000579190620002b9565b8181600160008190555062000081620000756200018160201b60201c565b6200018960201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506040518060400160405280601c81526020017f506f6f6c2044657374696e6174696f6e20496e6865726974616e636500000000815250600490816200014b91906200057a565b506104b06005819055506001600681905550693f870857a3e0e38000006007819055506301e13380600881905550505062000661565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002818262000254565b9050919050565b620002938162000274565b81146200029f57600080fd5b50565b600081519050620002b38162000288565b92915050565b60008060408385031215620002d357620002d26200024f565b5b6000620002e385828601620002a2565b9250506020620002f685828601620002a2565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200038257607f821691505b6020821081036200039857620003976200033a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003c3565b6200040e8683620003c3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200045b620004556200044f8462000426565b62000430565b62000426565b9050919050565b6000819050919050565b62000477836200043a565b6200048f620004868262000462565b848454620003d0565b825550505050565b600090565b620004a662000497565b620004b38184846200046c565b505050565b5b81811015620004db57620004cf6000826200049c565b600181019050620004b9565b5050565b601f8211156200052a57620004f4816200039e565b620004ff84620003b3565b810160208510156200050f578190505b620005276200051e85620003b3565b830182620004b8565b50505b505050565b600082821c905092915050565b60006200054f600019846008026200052f565b1980831691505092915050565b60006200056a83836200053c565b9150826002028217905092915050565b620005858262000300565b67ffffffffffffffff811115620005a157620005a06200030b565b5b620005ad825462000369565b620005ba828285620004df565b600060209050601f831160018114620005f25760008415620005dd578287015190505b620005e985826200055c565b86555062000659565b601f19841662000602866200039e565b60005b828110156200062c5784890151825560018201915060208501945060208101905062000605565b868310156200064c578489015162000648601f8916826200053c565b8355505b6001600288020188555050505b505050505050565b61447780620006716000396000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063c7601677116100a0578063de15af2e1161006f578063de15af2e14610729578063ed7b526c14610752578063f2fde38b1461078f578063fbf3e49b146107b8578063fe313112146107f55761023d565b8063c760167714610683578063d207e244146106ae578063dc4a81af146106d7578063dcb40c9f146107005761023d565b8063b2189330116100dc578063b2189330146105db578063b6187b2b14610604578063b7f06c8114610641578063b88a802f1461066c5761023d565b80638da5cb5b1461052f578063a9f74b241461055a578063b0e6bc0014610585578063b1dd61b6146105b05761023d565b8063525c12ea1161019057806361e88fe01161015f57806361e88fe01461047257806366692ff01461049b578063715018a6146104c657806387bde549146104dd5780638b8959af146105065761023d565b8063525c12ea146103b857806356d2b1d1146103e157806357ded9c91461040a57806361e87005146104355761023d565b80633f69da75116101cc5780633f69da75146102ec578063460cd97814610329578063519dc8d21461035257806351cff8d91461038f5761023d565b8063041e0a3e146102425780630ebd8f521461027f5780631a1ce2fc146102965780632b3f6f66146102c15761023d565b3661023d577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051610233929190612cd4565b60405180910390a1005b600080fd5b34801561024e57600080fd5b5061026960048036038101906102649190612d3d565b610811565b6040516102769190612d85565b60405180910390f35b34801561028b57600080fd5b506102946109b4565b005b3480156102a257600080fd5b506102ab6109e8565b6040516102b89190612da0565b60405180910390f35b3480156102cd57600080fd5b506102d66109ee565b6040516102e39190612e1a565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612d3d565b610a14565b6040516103209190612ff9565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190613047565b610b62565b005b34801561035e57600080fd5b5061037960048036038101906103749190612d3d565b61121f565b6040516103869190613123565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612d3d565b6113f4565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613047565b61148f565b005b3480156103ed57600080fd5b5061040860048036038101906104039190612d3d565b611b49565b005b34801561041657600080fd5b5061041f611b95565b60405161042c9190612da0565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613145565b611b9b565b60405161046991906131e8565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613441565b611cc5565b005b3480156104a757600080fd5b506104b0611d94565b6040516104bd9190612da0565b60405180910390f35b3480156104d257600080fd5b506104db611d9a565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613047565b611dae565b005b34801561051257600080fd5b5061052d60048036038101906105289190613047565b611e03565b005b34801561053b57600080fd5b50610544611e58565b60405161055191906134b9565b60405180910390f35b34801561056657600080fd5b5061056f611e82565b60405161057c9190612da0565b60405180910390f35b34801561059157600080fd5b5061059a611e88565b6040516105a79190612da0565b60405180910390f35b3480156105bc57600080fd5b506105c5611e8e565b6040516105d2919061351e565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613047565b611f1c565b005b34801561061057600080fd5b5061062b60048036038101906106269190613047565b611f71565b6040516106389190612d85565b60405180910390f35b34801561064d57600080fd5b50610656611f91565b6040516106639190612d85565b60405180910390f35b34801561067857600080fd5b50610681611fa4565b005b34801561068f57600080fd5b50610698612323565b6040516106a59190613561565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612d3d565b612349565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613145565b612395565b005b34801561070c57600080fd5b5061072760048036038101906107229190613047565b612442565b005b34801561073557600080fd5b50610750600480360381019061074b9190613047565b612497565b005b34801561075e57600080fd5b5061077960048036038101906107749190612d3d565b6124ec565b6040516107869190612da0565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612d3d565b612535565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d3d565b6125b8565b6040516107ec9190612da0565b60405180910390f35b61080f600480360381019061080a9190613047565b612601565b005b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161086f91906134b9565b602060405180830381865afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190613591565b9050600080600090505b828110156109a757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b815260040161091f929190612cd4565b602060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109609190613591565b9150600e600083815260200190815260200160002060009054906101000a900460ff161561099457600193505050506109af565b808061099f906135ed565b9150506108ba565b506000925050505b919050565b6109bc612a50565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b575783829060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054610ac690613664565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290613664565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b50505050508152505081526020019060010190610a75565b505050509050919050565b610b6a612ace565b600a60009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359061374d565b60405180910390fd5b600181610c4b919061376d565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501015610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906137ed565b60405180910390fd5b60008190506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610d2757610d2661380d565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054610d6e90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9a90613664565b8015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b50505050508152505090506000816040015142610e04919061383c565b9050600854811015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906138e2565b60405180910390fd5b600082600001519050600061271060055483610e679190613902565b610e719190613973565b905060008183610e81919061376d565b905060008790505b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610ed8919061383c565b811015610ff257600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610f2b919061376d565b81548110610f3c57610f3b61380d565b5b9060005260206000209060040201600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610f9b57610f9a61380d565b5b906000526020600020906004020160008201548160000155600182015481600101556002820154816002015560038201816003019081610fdb9190613b5c565b509050508080610fea906135ed565b915050610e89565b50600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061104257611041613c44565b5b60019003818190600052602060002090600402016000808201600090556001820160009055600282016000905560038201600061107f9190612bf5565b5050905582600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d2919061383c565b9250508190555042600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161117a929190612cd4565b6020604051808303816000875af1158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167fc2b6ce907a80e663575d7e56ca2f7fb6f9089365ca93e155c85d64dce06102bc8286604051611206929190613cb5565b60405180910390a250505050505061121c612b1d565b50565b60606000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161127e91906134b9565b602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190613591565b905060008167ffffffffffffffff8111156112dd576112dc61320f565b5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b828110156113e957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b8152600401611376929190612cd4565b602060405180830381865afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b79190613591565b8282815181106113ca576113c961380d565b5b60200260200101818152505080806113e1906135ed565b915050611311565b508092505050919050565b6113fc612a50565b600047905060008111611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613d2a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561148a573d6000803e3d6000fd5b505050565b611497612ace565b600a60009054906101000a900460ff166114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161156b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115629061374d565b60405180910390fd5b600181611578919061376d565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905010156115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f3906137ed565b60405180910390fd5b60008190506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106116545761165361380d565b5b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201805461169b90613664565b80601f01602080910402602001604051908101604052809291908181526020018280546116c790613664565b80156117145780601f106116e957610100808354040283529160200191611714565b820191906000526020600020905b8154815290600101906020018083116116f757829003601f168201915b50505050508152505090506000816040015142611731919061383c565b9050600082600001519050600854821115611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613dbc565b60405180910390fd5b60006064600954836117939190613902565b61179d9190613973565b905060008690505b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506117f4919061383c565b81101561190e57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182611847919061376d565b815481106118585761185761380d565b5b9060005260206000209060040201600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106118b7576118b661380d565b5b9060005260206000209060040201600082015481600001556001820154816001015560028201548160020155600382018160030190816118f79190613b5c565b509050508080611906906135ed565b9150506117a5565b50600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061195e5761195d613c44565b5b60019003818190600052602060002090600402016000808201600090556001820160009055600282016000905560038201600061199b9190612bf5565b5050905581600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ee919061383c565b9250508190555042600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008183611a47919061383c565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611aa6929190612cd4565b6020604051808303816000875af1158015611ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae99190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167f322e5021ddf51920f7602154a6c845b34ef1b32704a1fa2c66927b56be28076282604051611b309190612da0565b60405180910390a2505050505050611b46612b1d565b50565b611b51612a50565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b611ba3612c35565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611bf457611bf361380d565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054611c3b90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6790613664565b8015611cb45780601f10611c8957610100808354040283529160200191611cb4565b820191906000526020600020905b815481529060010190602001808311611c9757829003601f168201915b505050505081525050905092915050565b611ccd612a50565b8051825114611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0890613e28565b60405180910390fd5b60005b8251811015611d8f57818181518110611d3057611d2f61380d565b5b6020026020010151600e6000858481518110611d4f57611d4e61380d565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d87906135ed565b915050611d14565b505050565b60075481565b611da2612a50565b611dac6000612b27565b565b611db6612a50565b60008111611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613e94565b60405180910390fd5b8060078190555050565b611e0b612a50565b60008111611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613e94565b60405180910390fd5b8060068190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b60065481565b60048054611e9b90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec790613664565b8015611f145780601f10611ee957610100808354040283529160200191611f14565b820191906000526020600020905b815481529060010190602001808311611ef757829003601f168201915b505050505081565b611f24612a50565b60008111611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90613f00565b60405180910390fd5b8060098190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611fac612ace565b600a60009054906101000a900460ff16611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011612080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120779061374d565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008142612116919061383c565b90506000811161215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613f6c565b60405180910390fd5b60006064620151808361216e9190613973565b61016d60055461217e9190613973565b866121899190613902565b6121939190613902565b61219d9190613973565b9050600081116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613fd8565b60405180910390fd5b42600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612283929190612cd4565b6020604051808303816000875af11580156122a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c69190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161230d9190612da0565b60405180910390a250505050612321612b1d565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612351612a50565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61239d612a50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016123fa929190612cd4565b6020604051808303816000875af1158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d9190613c88565b505050565b61244a612a50565b6000811161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614044565b60405180910390fd5b8060058190555050565b61249f612a50565b600081116124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990613f00565b60405180910390fd5b8060088190555050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61253d612a50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a3906140d6565b60405180910390fd5b6125b581612b27565b50565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900460ff16612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906136e1565b60405180910390fd5b61265933610811565b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614168565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016126f491906134b9565b602060405180830381865afa158015612711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127359190613591565b1015612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d906141d4565b60405180910390fd5b6007548110156127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b290614240565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161281a93929190614260565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d9190613c88565b5080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ad919061376d565b92505081905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040528083815260200160055481526020014281526020016004805461291f90613664565b80601f016020809104026020016040519081016040528092919081815260200182805461294b90613664565b80156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b5050505050815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030190816129fc9190614297565b5050503373ffffffffffffffffffffffffffffffffffffffff167f423eb3fc7f00914fa251f391851045c36a87052e7afb63e89ad6991b56a6c61782604051612a459190612da0565b60405180910390a250565b612a58612bed565b73ffffffffffffffffffffffffffffffffffffffff16612a76611e58565b73ffffffffffffffffffffffffffffffffffffffff1614612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac3906143b5565b60405180910390fd5b565b600260005403612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a90614421565b60405180910390fd5b6002600081905550565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b508054612c0190613664565b6000825580601f10612c135750612c32565b601f016020900490600052602060002090810190612c319190612c5d565b5b50565b6040518060800160405280600081526020016000815260200160008152602001606081525090565b5b80821115612c76576000816000905550600101612c5e565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ca582612c7a565b9050919050565b612cb581612c9a565b82525050565b6000819050919050565b612cce81612cbb565b82525050565b6000604082019050612ce96000830185612cac565b612cf66020830184612cc5565b9392505050565b6000604051905090565b600080fd5b600080fd5b612d1a81612c9a565b8114612d2557600080fd5b50565b600081359050612d3781612d11565b92915050565b600060208284031215612d5357612d52612d07565b5b6000612d6184828501612d28565b91505092915050565b60008115159050919050565b612d7f81612d6a565b82525050565b6000602082019050612d9a6000830184612d76565b92915050565b6000602082019050612db56000830184612cc5565b92915050565b6000819050919050565b6000612de0612ddb612dd684612c7a565b612dbb565b612c7a565b9050919050565b6000612df282612dc5565b9050919050565b6000612e0482612de7565b9050919050565b612e1481612df9565b82525050565b6000602082019050612e2f6000830184612e0b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e6a81612cbb565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eaa578082015181840152602081019050612e8f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ed282612e70565b612edc8185612e7b565b9350612eec818560208601612e8c565b612ef581612eb6565b840191505092915050565b6000608083016000830151612f186000860182612e61565b506020830151612f2b6020860182612e61565b506040830151612f3e6040860182612e61565b5060608301518482036060860152612f568282612ec7565b9150508091505092915050565b6000612f6f8383612f00565b905092915050565b6000602082019050919050565b6000612f8f82612e35565b612f998185612e40565b935083602082028501612fab85612e51565b8060005b85811015612fe75784840389528151612fc88582612f63565b9450612fd383612f77565b925060208a01995050600181019050612faf565b50829750879550505050505092915050565b600060208201905081810360008301526130138184612f84565b905092915050565b61302481612cbb565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b60006020828403121561305d5761305c612d07565b5b600061306b84828501613032565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130ac8383612e61565b60208301905092915050565b6000602082019050919050565b60006130d082613074565b6130da818561307f565b93506130e583613090565b8060005b838110156131165781516130fd88826130a0565b9750613108836130b8565b9250506001810190506130e9565b5085935050505092915050565b6000602082019050818103600083015261313d81846130c5565b905092915050565b6000806040838503121561315c5761315b612d07565b5b600061316a85828601612d28565b925050602061317b85828601613032565b9150509250929050565b600060808301600083015161319d6000860182612e61565b5060208301516131b06020860182612e61565b5060408301516131c36040860182612e61565b50606083015184820360608601526131db8282612ec7565b9150508091505092915050565b600060208201905081810360008301526132028184613185565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61324782612eb6565b810181811067ffffffffffffffff821117156132665761326561320f565b5b80604052505050565b6000613279612cfd565b9050613285828261323e565b919050565b600067ffffffffffffffff8211156132a5576132a461320f565b5b602082029050602081019050919050565b600080fd5b60006132ce6132c98461328a565b61326f565b905080838252602082019050602084028301858111156132f1576132f06132b6565b5b835b8181101561331a57806133068882613032565b8452602084019350506020810190506132f3565b5050509392505050565b600082601f8301126133395761333861320a565b5b81356133498482602086016132bb565b91505092915050565b600067ffffffffffffffff82111561336d5761336c61320f565b5b602082029050602081019050919050565b61338781612d6a565b811461339257600080fd5b50565b6000813590506133a48161337e565b92915050565b60006133bd6133b884613352565b61326f565b905080838252602082019050602084028301858111156133e0576133df6132b6565b5b835b8181101561340957806133f58882613395565b8452602084019350506020810190506133e2565b5050509392505050565b600082601f8301126134285761342761320a565b5b81356134388482602086016133aa565b91505092915050565b6000806040838503121561345857613457612d07565b5b600083013567ffffffffffffffff81111561347657613475612d0c565b5b61348285828601613324565b925050602083013567ffffffffffffffff8111156134a3576134a2612d0c565b5b6134af85828601613413565b9150509250929050565b60006020820190506134ce6000830184612cac565b92915050565b600082825260208201905092915050565b60006134f082612e70565b6134fa81856134d4565b935061350a818560208601612e8c565b61351381612eb6565b840191505092915050565b6000602082019050818103600083015261353881846134e5565b905092915050565b600061354b82612de7565b9050919050565b61355b81613540565b82525050565b60006020820190506135766000830184613552565b92915050565b60008151905061358b8161301b565b92915050565b6000602082840312156135a7576135a6612d07565b5b60006135b58482850161357c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135f882612cbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361362a576136296135be565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367c57607f821691505b60208210810361368f5761368e613635565b5b50919050565b7f506f6f6c206973206e6f742063757272656e746c792061637469766500000000600082015250565b60006136cb601c836134d4565b91506136d682613695565b602082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f4e6f207374616b657320666f756e6420666f7220746865206164647265737300600082015250565b6000613737601f836134d4565b915061374282613701565b602082019050919050565b600060208201905081810360008301526137668161372a565b9050919050565b600061377882612cbb565b915061378383612cbb565b925082820190508082111561379b5761379a6135be565b5b92915050565b7f5374616b6520646f6573206e6f74206578697374000000000000000000000000600082015250565b60006137d76014836134d4565b91506137e2826137a1565b602082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061384782612cbb565b915061385283612cbb565b925082820390508181111561386a576138696135be565b5b92915050565b7f4d696e696d756d20706f6f6c696e6720706572696f64206e6f7420726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006138cc6022836134d4565b91506138d782613870565b604082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b600061390d82612cbb565b915061391883612cbb565b925082820261392681612cbb565b9150828204841483151761393d5761393c6135be565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397e82612cbb565b915061398983612cbb565b92508261399957613998613944565b5b828204905092915050565b6000815490506139b381613664565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139df565b613a2686836139df565b95508019841693508086168417925050509392505050565b6000613a59613a54613a4f84612cbb565b612dbb565b612cbb565b9050919050565b6000819050919050565b613a7383613a3e565b613a87613a7f82613a60565b8484546139ec565b825550505050565b600090565b613a9c613a8f565b613aa7818484613a6a565b505050565b5b81811015613acb57613ac0600082613a94565b600181019050613aad565b5050565b601f821115613b1057613ae1816139ba565b613aea846139cf565b81016020851015613af9578190505b613b0d613b05856139cf565b830182613aac565b50505b505050565b600082821c905092915050565b6000613b3360001984600802613b15565b1980831691505092915050565b6000613b4c8383613b22565b9150826002028217905092915050565b818103613b6a575050613c42565b613b73826139a4565b67ffffffffffffffff811115613b8c57613b8b61320f565b5b613b968254613664565b613ba1828285613acf565b6000601f831160018114613bd05760008415613bbe578287015490505b613bc88582613b40565b865550613c3b565b601f198416613bde876139ba565b9650613be9866139ba565b60005b82811015613c1157848901548255600182019150600185019450602081019050613bec565b86831015613c2e5784890154613c2a601f891682613b22565b8355505b6001600288020188555050505b5050505050505b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050613c828161337e565b92915050565b600060208284031215613c9e57613c9d612d07565b5b6000613cac84828501613c73565b91505092915050565b6000604082019050613cca6000830185612cc5565b613cd76020830184612cc5565b9392505050565b7f416d6f756e7420697320746f6f20686967680000000000000000000000000000600082015250565b6000613d146012836134d4565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b7f576974686472617720776974682070656e616c74792074696d6520657863656560008201527f6420796f752063616e206e6f7720756e7374616b6520746f6b656e2000000000602082015250565b6000613da6603c836134d4565b9150613db182613d4a565b604082019050919050565b60006020820190508181036000830152613dd581613d99565b9050919050565b7f417272617973206c656e677468206d69736d6174636800000000000000000000600082015250565b6000613e126016836134d4565b9150613e1d82613ddc565b602082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f416d6f756e742063616e206e6f74206265203000000000000000000000000000600082015250565b6000613e7e6013836134d4565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f416d6f756e742063616e6e2774206265207a65726f0000000000000000000000600082015250565b6000613eea6015836134d4565b9150613ef582613eb4565b602082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b6000613f566013836134d4565b9150613f6182613f20565b602082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4e6f7420456c696769626c6520666f7220726577617264000000000000000000600082015250565b6000613fc26017836134d4565b9150613fcd82613f8c565b602082019050919050565b60006020820190508181036000830152613ff181613fb5565b9050919050565b7f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000600082015250565b600061402e6016836134d4565b915061403982613ff8565b602082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c06026836134d4565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f57616c6c657420646f6573206e6f74206f776e20616e792044657374696e617460008201527f696f6e20496e6865726974616e63652039303232204e46547300000000000000602082015250565b60006141526039836134d4565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b7f496e73756666696369656e7420246941492062616c616e636500000000000000600082015250565b60006141be6019836134d4565b91506141c982614188565b602082019050919050565b600060208201905081810360008301526141ed816141b1565b9050919050565b7f24694149207468726573686f6c64206e6f74206d657400000000000000000000600082015250565b600061422a6016836134d4565b9150614235826141f4565b602082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b60006060820190506142756000830186612cac565b6142826020830185612cac565b61428f6040830184612cc5565b949350505050565b6142a082612e70565b67ffffffffffffffff8111156142b9576142b861320f565b5b6142c38254613664565b6142ce828285613acf565b600060209050601f83116001811461430157600084156142ef578287015190505b6142f98582613b40565b865550614361565b601f19841661430f866139ba565b60005b8281101561433757848901518255600182019150602085019450602081019050614312565b868310156143545784890151614350601f891682613b22565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061439f6020836134d4565b91506143aa82614369565b602082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061440b601f836134d4565b9150614416826143d5565b602082019050919050565b6000602082019050818103600083015261443a816143fe565b905091905056fea26469706673582212204e1f64ea846eb90169d6faecf06bdd4443e485072fad83b068e1bb77d9abd99564736f6c634300081100330000000000000000000000006dde4ffd6db302bc9a46850f61399e082f6c2122000000000000000000000000853806fca5ee8a6ac99dc84a8e3596a4f6541796

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063c7601677116100a0578063de15af2e1161006f578063de15af2e14610729578063ed7b526c14610752578063f2fde38b1461078f578063fbf3e49b146107b8578063fe313112146107f55761023d565b8063c760167714610683578063d207e244146106ae578063dc4a81af146106d7578063dcb40c9f146107005761023d565b8063b2189330116100dc578063b2189330146105db578063b6187b2b14610604578063b7f06c8114610641578063b88a802f1461066c5761023d565b80638da5cb5b1461052f578063a9f74b241461055a578063b0e6bc0014610585578063b1dd61b6146105b05761023d565b8063525c12ea1161019057806361e88fe01161015f57806361e88fe01461047257806366692ff01461049b578063715018a6146104c657806387bde549146104dd5780638b8959af146105065761023d565b8063525c12ea146103b857806356d2b1d1146103e157806357ded9c91461040a57806361e87005146104355761023d565b80633f69da75116101cc5780633f69da75146102ec578063460cd97814610329578063519dc8d21461035257806351cff8d91461038f5761023d565b8063041e0a3e146102425780630ebd8f521461027f5780631a1ce2fc146102965780632b3f6f66146102c15761023d565b3661023d577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051610233929190612cd4565b60405180910390a1005b600080fd5b34801561024e57600080fd5b5061026960048036038101906102649190612d3d565b610811565b6040516102769190612d85565b60405180910390f35b34801561028b57600080fd5b506102946109b4565b005b3480156102a257600080fd5b506102ab6109e8565b6040516102b89190612da0565b60405180910390f35b3480156102cd57600080fd5b506102d66109ee565b6040516102e39190612e1a565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612d3d565b610a14565b6040516103209190612ff9565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190613047565b610b62565b005b34801561035e57600080fd5b5061037960048036038101906103749190612d3d565b61121f565b6040516103869190613123565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612d3d565b6113f4565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613047565b61148f565b005b3480156103ed57600080fd5b5061040860048036038101906104039190612d3d565b611b49565b005b34801561041657600080fd5b5061041f611b95565b60405161042c9190612da0565b60405180910390f35b34801561044157600080fd5b5061045c60048036038101906104579190613145565b611b9b565b60405161046991906131e8565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613441565b611cc5565b005b3480156104a757600080fd5b506104b0611d94565b6040516104bd9190612da0565b60405180910390f35b3480156104d257600080fd5b506104db611d9a565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613047565b611dae565b005b34801561051257600080fd5b5061052d60048036038101906105289190613047565b611e03565b005b34801561053b57600080fd5b50610544611e58565b60405161055191906134b9565b60405180910390f35b34801561056657600080fd5b5061056f611e82565b60405161057c9190612da0565b60405180910390f35b34801561059157600080fd5b5061059a611e88565b6040516105a79190612da0565b60405180910390f35b3480156105bc57600080fd5b506105c5611e8e565b6040516105d2919061351e565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190613047565b611f1c565b005b34801561061057600080fd5b5061062b60048036038101906106269190613047565b611f71565b6040516106389190612d85565b60405180910390f35b34801561064d57600080fd5b50610656611f91565b6040516106639190612d85565b60405180910390f35b34801561067857600080fd5b50610681611fa4565b005b34801561068f57600080fd5b50610698612323565b6040516106a59190613561565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190612d3d565b612349565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190613145565b612395565b005b34801561070c57600080fd5b5061072760048036038101906107229190613047565b612442565b005b34801561073557600080fd5b50610750600480360381019061074b9190613047565b612497565b005b34801561075e57600080fd5b5061077960048036038101906107749190612d3d565b6124ec565b6040516107869190612da0565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612d3d565b612535565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d3d565b6125b8565b6040516107ec9190612da0565b60405180910390f35b61080f600480360381019061080a9190613047565b612601565b005b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161086f91906134b9565b602060405180830381865afa15801561088c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b09190613591565b9050600080600090505b828110156109a757600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b815260040161091f929190612cd4565b602060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109609190613591565b9150600e600083815260200190815260200160002060009054906101000a900460ff161561099457600193505050506109af565b808061099f906135ed565b9150506108ba565b506000925050505b919050565b6109bc612a50565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b60095481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b575783829060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054610ac690613664565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290613664565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b50505050508152505081526020019060010190610a75565b505050509050919050565b610b6a612ace565b600a60009054906101000a900460ff16610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c359061374d565b60405180910390fd5b600181610c4b919061376d565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501015610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906137ed565b60405180910390fd5b60008190506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610d2757610d2661380d565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054610d6e90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9a90613664565b8015610de75780601f10610dbc57610100808354040283529160200191610de7565b820191906000526020600020905b815481529060010190602001808311610dca57829003601f168201915b50505050508152505090506000816040015142610e04919061383c565b9050600854811015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906138e2565b60405180910390fd5b600082600001519050600061271060055483610e679190613902565b610e719190613973565b905060008183610e81919061376d565b905060008790505b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610ed8919061383c565b811015610ff257600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610f2b919061376d565b81548110610f3c57610f3b61380d565b5b9060005260206000209060040201600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610f9b57610f9a61380d565b5b906000526020600020906004020160008201548160000155600182015481600101556002820154816002015560038201816003019081610fdb9190613b5c565b509050508080610fea906135ed565b915050610e89565b50600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061104257611041613c44565b5b60019003818190600052602060002090600402016000808201600090556001820160009055600282016000905560038201600061107f9190612bf5565b5050905582600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d2919061383c565b9250508190555042600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161117a929190612cd4565b6020604051808303816000875af1158015611199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bd9190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167fc2b6ce907a80e663575d7e56ca2f7fb6f9089365ca93e155c85d64dce06102bc8286604051611206929190613cb5565b60405180910390a250505050505061121c612b1d565b50565b60606000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161127e91906134b9565b602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190613591565b905060008167ffffffffffffffff8111156112dd576112dc61320f565b5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b828110156113e957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b8152600401611376929190612cd4565b602060405180830381865afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b79190613591565b8282815181106113ca576113c961380d565b5b60200260200101818152505080806113e1906135ed565b915050611311565b508092505050919050565b6113fc612a50565b600047905060008111611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90613d2a565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561148a573d6000803e3d6000fd5b505050565b611497612ace565b600a60009054906101000a900460ff166114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161156b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115629061374d565b60405180910390fd5b600181611578919061376d565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905010156115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f3906137ed565b60405180910390fd5b60008190506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106116545761165361380d565b5b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201805461169b90613664565b80601f01602080910402602001604051908101604052809291908181526020018280546116c790613664565b80156117145780601f106116e957610100808354040283529160200191611714565b820191906000526020600020905b8154815290600101906020018083116116f757829003601f168201915b50505050508152505090506000816040015142611731919061383c565b9050600082600001519050600854821115611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613dbc565b60405180910390fd5b60006064600954836117939190613902565b61179d9190613973565b905060008690505b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506117f4919061383c565b81101561190e57600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182611847919061376d565b815481106118585761185761380d565b5b9060005260206000209060040201600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106118b7576118b661380d565b5b9060005260206000209060040201600082015481600001556001820154816001015560028201548160020155600382018160030190816118f79190613b5c565b509050508080611906906135ed565b9150506117a5565b50600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061195e5761195d613c44565b5b60019003818190600052602060002090600402016000808201600090556001820160009055600282016000905560038201600061199b9190612bf5565b5050905581600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ee919061383c565b9250508190555042600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008183611a47919061383c565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611aa6929190612cd4565b6020604051808303816000875af1158015611ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae99190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167f322e5021ddf51920f7602154a6c845b34ef1b32704a1fa2c66927b56be28076282604051611b309190612da0565b60405180910390a2505050505050611b46612b1d565b50565b611b51612a50565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b611ba3612c35565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611bf457611bf361380d565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382018054611c3b90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6790613664565b8015611cb45780601f10611c8957610100808354040283529160200191611cb4565b820191906000526020600020905b815481529060010190602001808311611c9757829003601f168201915b505050505081525050905092915050565b611ccd612a50565b8051825114611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0890613e28565b60405180910390fd5b60005b8251811015611d8f57818181518110611d3057611d2f61380d565b5b6020026020010151600e6000858481518110611d4f57611d4e61380d565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d87906135ed565b915050611d14565b505050565b60075481565b611da2612a50565b611dac6000612b27565b565b611db6612a50565b60008111611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613e94565b60405180910390fd5b8060078190555050565b611e0b612a50565b60008111611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590613e94565b60405180910390fd5b8060068190555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b60065481565b60048054611e9b90613664565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec790613664565b8015611f145780601f10611ee957610100808354040283529160200191611f14565b820191906000526020600020905b815481529060010190602001808311611ef757829003601f168201915b505050505081565b611f24612a50565b60008111611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90613f00565b60405180910390fd5b8060098190555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611fac612ace565b600a60009054906101000a900460ff16611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906136e1565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011612080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120779061374d565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008142612116919061383c565b90506000811161215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290613f6c565b60405180910390fd5b60006064620151808361216e9190613973565b61016d60055461217e9190613973565b866121899190613902565b6121939190613902565b61219d9190613973565b9050600081116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613fd8565b60405180910390fd5b42600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612283929190612cd4565b6020604051808303816000875af11580156122a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c69190613c88565b503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161230d9190612da0565b60405180910390a250505050612321612b1d565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612351612a50565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61239d612a50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016123fa929190612cd4565b6020604051808303816000875af1158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d9190613c88565b505050565b61244a612a50565b6000811161248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614044565b60405180910390fd5b8060058190555050565b61249f612a50565b600081116124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990613f00565b60405180910390fd5b8060088190555050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61253d612a50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a3906140d6565b60405180910390fd5b6125b581612b27565b50565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900460ff16612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906136e1565b60405180910390fd5b61265933610811565b612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614168565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016126f491906134b9565b602060405180830381865afa158015612711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127359190613591565b1015612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d906141d4565b60405180910390fd5b6007548110156127bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b290614240565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161281a93929190614260565b6020604051808303816000875af1158015612839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285d9190613c88565b5080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ad919061376d565b92505081905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040528083815260200160055481526020014281526020016004805461291f90613664565b80601f016020809104026020016040519081016040528092919081815260200182805461294b90613664565b80156129985780601f1061296d57610100808354040283529160200191612998565b820191906000526020600020905b81548152906001019060200180831161297b57829003601f168201915b5050505050815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030190816129fc9190614297565b5050503373ffffffffffffffffffffffffffffffffffffffff167f423eb3fc7f00914fa251f391851045c36a87052e7afb63e89ad6991b56a6c61782604051612a459190612da0565b60405180910390a250565b612a58612bed565b73ffffffffffffffffffffffffffffffffffffffff16612a76611e58565b73ffffffffffffffffffffffffffffffffffffffff1614612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac3906143b5565b60405180910390fd5b565b600260005403612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a90614421565b60405180910390fd5b6002600081905550565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b508054612c0190613664565b6000825580601f10612c135750612c32565b601f016020900490600052602060002090810190612c319190612c5d565b5b50565b6040518060800160405280600081526020016000815260200160008152602001606081525090565b5b80821115612c76576000816000905550600101612c5e565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ca582612c7a565b9050919050565b612cb581612c9a565b82525050565b6000819050919050565b612cce81612cbb565b82525050565b6000604082019050612ce96000830185612cac565b612cf66020830184612cc5565b9392505050565b6000604051905090565b600080fd5b600080fd5b612d1a81612c9a565b8114612d2557600080fd5b50565b600081359050612d3781612d11565b92915050565b600060208284031215612d5357612d52612d07565b5b6000612d6184828501612d28565b91505092915050565b60008115159050919050565b612d7f81612d6a565b82525050565b6000602082019050612d9a6000830184612d76565b92915050565b6000602082019050612db56000830184612cc5565b92915050565b6000819050919050565b6000612de0612ddb612dd684612c7a565b612dbb565b612c7a565b9050919050565b6000612df282612dc5565b9050919050565b6000612e0482612de7565b9050919050565b612e1481612df9565b82525050565b6000602082019050612e2f6000830184612e0b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612e6a81612cbb565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eaa578082015181840152602081019050612e8f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ed282612e70565b612edc8185612e7b565b9350612eec818560208601612e8c565b612ef581612eb6565b840191505092915050565b6000608083016000830151612f186000860182612e61565b506020830151612f2b6020860182612e61565b506040830151612f3e6040860182612e61565b5060608301518482036060860152612f568282612ec7565b9150508091505092915050565b6000612f6f8383612f00565b905092915050565b6000602082019050919050565b6000612f8f82612e35565b612f998185612e40565b935083602082028501612fab85612e51565b8060005b85811015612fe75784840389528151612fc88582612f63565b9450612fd383612f77565b925060208a01995050600181019050612faf565b50829750879550505050505092915050565b600060208201905081810360008301526130138184612f84565b905092915050565b61302481612cbb565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b60006020828403121561305d5761305c612d07565b5b600061306b84828501613032565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006130ac8383612e61565b60208301905092915050565b6000602082019050919050565b60006130d082613074565b6130da818561307f565b93506130e583613090565b8060005b838110156131165781516130fd88826130a0565b9750613108836130b8565b9250506001810190506130e9565b5085935050505092915050565b6000602082019050818103600083015261313d81846130c5565b905092915050565b6000806040838503121561315c5761315b612d07565b5b600061316a85828601612d28565b925050602061317b85828601613032565b9150509250929050565b600060808301600083015161319d6000860182612e61565b5060208301516131b06020860182612e61565b5060408301516131c36040860182612e61565b50606083015184820360608601526131db8282612ec7565b9150508091505092915050565b600060208201905081810360008301526132028184613185565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61324782612eb6565b810181811067ffffffffffffffff821117156132665761326561320f565b5b80604052505050565b6000613279612cfd565b9050613285828261323e565b919050565b600067ffffffffffffffff8211156132a5576132a461320f565b5b602082029050602081019050919050565b600080fd5b60006132ce6132c98461328a565b61326f565b905080838252602082019050602084028301858111156132f1576132f06132b6565b5b835b8181101561331a57806133068882613032565b8452602084019350506020810190506132f3565b5050509392505050565b600082601f8301126133395761333861320a565b5b81356133498482602086016132bb565b91505092915050565b600067ffffffffffffffff82111561336d5761336c61320f565b5b602082029050602081019050919050565b61338781612d6a565b811461339257600080fd5b50565b6000813590506133a48161337e565b92915050565b60006133bd6133b884613352565b61326f565b905080838252602082019050602084028301858111156133e0576133df6132b6565b5b835b8181101561340957806133f58882613395565b8452602084019350506020810190506133e2565b5050509392505050565b600082601f8301126134285761342761320a565b5b81356134388482602086016133aa565b91505092915050565b6000806040838503121561345857613457612d07565b5b600083013567ffffffffffffffff81111561347657613475612d0c565b5b61348285828601613324565b925050602083013567ffffffffffffffff8111156134a3576134a2612d0c565b5b6134af85828601613413565b9150509250929050565b60006020820190506134ce6000830184612cac565b92915050565b600082825260208201905092915050565b60006134f082612e70565b6134fa81856134d4565b935061350a818560208601612e8c565b61351381612eb6565b840191505092915050565b6000602082019050818103600083015261353881846134e5565b905092915050565b600061354b82612de7565b9050919050565b61355b81613540565b82525050565b60006020820190506135766000830184613552565b92915050565b60008151905061358b8161301b565b92915050565b6000602082840312156135a7576135a6612d07565b5b60006135b58482850161357c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135f882612cbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361362a576136296135be565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367c57607f821691505b60208210810361368f5761368e613635565b5b50919050565b7f506f6f6c206973206e6f742063757272656e746c792061637469766500000000600082015250565b60006136cb601c836134d4565b91506136d682613695565b602082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f4e6f207374616b657320666f756e6420666f7220746865206164647265737300600082015250565b6000613737601f836134d4565b915061374282613701565b602082019050919050565b600060208201905081810360008301526137668161372a565b9050919050565b600061377882612cbb565b915061378383612cbb565b925082820190508082111561379b5761379a6135be565b5b92915050565b7f5374616b6520646f6573206e6f74206578697374000000000000000000000000600082015250565b60006137d76014836134d4565b91506137e2826137a1565b602082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061384782612cbb565b915061385283612cbb565b925082820390508181111561386a576138696135be565b5b92915050565b7f4d696e696d756d20706f6f6c696e6720706572696f64206e6f7420726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006138cc6022836134d4565b91506138d782613870565b604082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b600061390d82612cbb565b915061391883612cbb565b925082820261392681612cbb565b9150828204841483151761393d5761393c6135be565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061397e82612cbb565b915061398983612cbb565b92508261399957613998613944565b5b828204905092915050565b6000815490506139b381613664565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613a1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139df565b613a2686836139df565b95508019841693508086168417925050509392505050565b6000613a59613a54613a4f84612cbb565b612dbb565b612cbb565b9050919050565b6000819050919050565b613a7383613a3e565b613a87613a7f82613a60565b8484546139ec565b825550505050565b600090565b613a9c613a8f565b613aa7818484613a6a565b505050565b5b81811015613acb57613ac0600082613a94565b600181019050613aad565b5050565b601f821115613b1057613ae1816139ba565b613aea846139cf565b81016020851015613af9578190505b613b0d613b05856139cf565b830182613aac565b50505b505050565b600082821c905092915050565b6000613b3360001984600802613b15565b1980831691505092915050565b6000613b4c8383613b22565b9150826002028217905092915050565b818103613b6a575050613c42565b613b73826139a4565b67ffffffffffffffff811115613b8c57613b8b61320f565b5b613b968254613664565b613ba1828285613acf565b6000601f831160018114613bd05760008415613bbe578287015490505b613bc88582613b40565b865550613c3b565b601f198416613bde876139ba565b9650613be9866139ba565b60005b82811015613c1157848901548255600182019150600185019450602081019050613bec565b86831015613c2e5784890154613c2a601f891682613b22565b8355505b6001600288020188555050505b5050505050505b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050613c828161337e565b92915050565b600060208284031215613c9e57613c9d612d07565b5b6000613cac84828501613c73565b91505092915050565b6000604082019050613cca6000830185612cc5565b613cd76020830184612cc5565b9392505050565b7f416d6f756e7420697320746f6f20686967680000000000000000000000000000600082015250565b6000613d146012836134d4565b9150613d1f82613cde565b602082019050919050565b60006020820190508181036000830152613d4381613d07565b9050919050565b7f576974686472617720776974682070656e616c74792074696d6520657863656560008201527f6420796f752063616e206e6f7720756e7374616b6520746f6b656e2000000000602082015250565b6000613da6603c836134d4565b9150613db182613d4a565b604082019050919050565b60006020820190508181036000830152613dd581613d99565b9050919050565b7f417272617973206c656e677468206d69736d6174636800000000000000000000600082015250565b6000613e126016836134d4565b9150613e1d82613ddc565b602082019050919050565b60006020820190508181036000830152613e4181613e05565b9050919050565b7f416d6f756e742063616e206e6f74206265203000000000000000000000000000600082015250565b6000613e7e6013836134d4565b9150613e8982613e48565b602082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f416d6f756e742063616e6e2774206265207a65726f0000000000000000000000600082015250565b6000613eea6015836134d4565b9150613ef582613eb4565b602082019050919050565b60006020820190508181036000830152613f1981613edd565b9050919050565b7f4e6f207265776172647320746f20636c61696d00000000000000000000000000600082015250565b6000613f566013836134d4565b9150613f6182613f20565b602082019050919050565b60006020820190508181036000830152613f8581613f49565b9050919050565b7f4e6f7420456c696769626c6520666f7220726577617264000000000000000000600082015250565b6000613fc26017836134d4565b9150613fcd82613f8c565b602082019050919050565b60006020820190508181036000830152613ff181613fb5565b9050919050565b7f416d6f756e742063616e206e6f74206265207a65726f00000000000000000000600082015250565b600061402e6016836134d4565b915061403982613ff8565b602082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c06026836134d4565b91506140cb82614064565b604082019050919050565b600060208201905081810360008301526140ef816140b3565b9050919050565b7f57616c6c657420646f6573206e6f74206f776e20616e792044657374696e617460008201527f696f6e20496e6865726974616e63652039303232204e46547300000000000000602082015250565b60006141526039836134d4565b915061415d826140f6565b604082019050919050565b6000602082019050818103600083015261418181614145565b9050919050565b7f496e73756666696369656e7420246941492062616c616e636500000000000000600082015250565b60006141be6019836134d4565b91506141c982614188565b602082019050919050565b600060208201905081810360008301526141ed816141b1565b9050919050565b7f24694149207468726573686f6c64206e6f74206d657400000000000000000000600082015250565b600061422a6016836134d4565b9150614235826141f4565b602082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b60006060820190506142756000830186612cac565b6142826020830185612cac565b61428f6040830184612cc5565b949350505050565b6142a082612e70565b67ffffffffffffffff8111156142b9576142b861320f565b5b6142c38254613664565b6142ce828285613acf565b600060209050601f83116001811461430157600084156142ef578287015190505b6142f98582613b40565b865550614361565b601f19841661430f866139ba565b60005b8281101561433757848901518255600182019150602085019450602081019050614312565b868310156143545784890151614350601f891682613b22565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061439f6020836134d4565b91506143aa82614369565b602082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061440b601f836134d4565b9150614416826143d5565b602082019050919050565b6000602082019050818103600083015261443a816143fe565b905091905056fea26469706673582212204e1f64ea846eb90169d6faecf06bdd4443e485072fad83b068e1bb77d9abd99564736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006dde4ffd6db302bc9a46850f61399e082f6c2122000000000000000000000000853806fca5ee8a6ac99dc84a8e3596a4f6541796

-----Decoded View---------------
Arg [0] : iAITokenAddress (address): 0x6dDe4fFD6dB302Bc9a46850f61399e082f6c2122
Arg [1] : nftTokenAddress (address): 0x853806fCa5Ee8a6Ac99Dc84a8e3596A4F6541796

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006dde4ffd6db302bc9a46850f61399e082f6c2122
Arg [1] : 000000000000000000000000853806fca5ee8a6ac99dc84a8e3596a4f6541796


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.