Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
9,979,629.692138133603099814 UTX
Holders
859
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
4,552.083333 UTXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract contains unverified libraries: SafeMathLibExt
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CrowdsaleTokenExtv1
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; // /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ abstract contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view virtual returns (uint256); function transfer(address to, uint256 value) public virtual returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ abstract contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view virtual returns (uint256); function transferFrom(address from, address to, uint256 value) public virtual returns (bool); function approve(address spender, uint256 value) public virtual returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) public pure returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) public pure returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) public pure returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) public pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20 { using SafeMathLibExt for uint256; /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint256 amount); /* Actual balances of token holders */ mapping(address => uint256) public balances; /* approve() allowances */ mapping (address => mapping (address => uint256)) public allowed; /* Interface declaration */ function isToken() public pure returns (bool weAre) { return true; } function transfer(address _to, uint256 _value) public virtual override returns (bool success) { balances[msg.sender] = balances[msg.sender].minus(_value); balances[_to] = balances[_to].plus(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public virtual override returns (bool success) { uint256 _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].plus(_value); balances[_from] = balances[_from].minus(_value); allowed[_from][msg.sender] = _allowance.minus(_value); emit Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view virtual override returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public virtual override returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 // if ((_addedValue != 0) && (allowed[msg.sender][_spender] != 0)) revert(); if(_value == 0 ) revert("Cannot approve 0 value"); if(_spender == address(0)) revert("Cannot approve for Null aDDRESS"); if(allowed[msg.sender][_spender] == 0 ) revert("Spender already approved,instead increase/decrease allowance"); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) { if(_addedValue == 0 ) revert("Cannot add 0 allowance value"); if(_spender == address(0)) revert("Cannot allow for Null address"); allowed[msg.sender][_spender] = allowed[msg.sender][_spender].plus(allowed[msg.sender][_spender]); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender].plus(allowed[msg.sender][_spender])); return true; } function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) { if(_subtractedValue == 0 ) revert("Cannot add 0 decrease value"); if(_spender == address(0)) revert("Cannot allow for Null address"); require(_subtractedValue <= allowed[msg.sender][_spender], "Cannot remove more than allowance!"); allowed[msg.sender][_spender] = allowed[msg.sender][_spender].minus(allowed[msg.sender][_spender]); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender].minus(allowed[msg.sender][_spender])); return true; } function allowance(address _owner, address _spender) public view virtual override returns (uint256 remaining) { return allowed[_owner][_spender]; } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ abstract contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public pure returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public virtual; } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { using SafeMathLibExt for uint; /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * New upgrade master available. */ event UpgradeMasterSet(address agent); /** * Do not allow construction without upgrade master set. */ constructor(address _upgradeMaster) { require(_upgradeMaster != address(0), "Upgrade Master cannot be Null Address"); upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if (!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state revert("Called in bad State"); } // Validate input value. if (value == 0) revert("Invalid input value"); balances[msg.sender] = balances[msg.sender].minus(value); // Take tokens out from circulation totalSupply = totalSupply.minus(value); totalUpgraded = totalUpgraded.plus(value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); emit Upgrade(msg.sender, address(upgradeAgent), value); } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public virtual returns(bool) { return true; } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if (!canUpgrade()) { // The token is not yet in a state that we could think upgrading revert("The token is not yet in a state that we could think upgrading"); } if (agent == address(0)) revert("Cannot be Zero Address"); // Only a master can designate the next agent if (msg.sender != upgradeMaster) revert("Only a master can designate the next agent"); // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) revert("Upgrade has already begun for an agent"); upgradeAgent = UpgradeAgent(agent); // Bad interface if (!upgradeAgent.isUpgradeAgent()) revert("Bad interface"); emit UpgradeAgentSet(agent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public returns(UpgradeState) { if (!canUpgrade()) return UpgradeState.NotAllowed; else if (address(upgradeAgent) == address(0)) return UpgradeState.WaitingForAgent; else if (totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == address(0)) revert("Cannot set master contract to 0"); if (msg.sender != upgradeMaster) revert("Msg Sender not upgrade master"); upgradeMaster = master; emit UpgradeMasterSet(master); } } // /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is StandardToken, Ownable { event ReleaseAgentSet(address caller, address agent); event TransferAgentSet(address callet, address agent, bool set); /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if (!released) { if (!transferAgents[_sender]) { revert("Not A Transfer Agent"); } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) public onlyOwner inReleaseState(false) { require(addr != address(0), "Release Agent cannot be Null Address"); // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; emit ReleaseAgentSet(msg.sender, addr); } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) public onlyOwner inReleaseState(false) { transferAgents[addr] = state; emit TransferAgentSet(msg.sender, addr, state); } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. * It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public virtual onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if (releaseState != released) { revert("Not in released state"); } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if (msg.sender != releaseAgent) { revert("Not release agent"); } _; } function transfer(address _to, uint _value) public virtual override canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public virtual override canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); event ReversedTokenListMultipleSet(uint length); event FinalizedReversedAddress(address addr); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; bool isVested; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool private reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if (!mintAgents[msg.sender]) { revert("Only crowdsale contracts are allowed to mint new tokens"); } _; } /** Make sure we are not done yet. */ modifier canMint() { if (mintingFinished) revert(); _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; emit FinalizedReversedAddress(addr); } function isAddressReserved(address addr) public view virtual returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public view returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public view returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public view returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public view returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function getReservedIsVested(address addr) public view returns (bool isVested) { return reservedTokensList[addr].isVested; } function setReservedTokensListMultiple( address[] memory addrs, uint[] memory inTokens, uint[] memory inPercentageUnit, uint[] memory inPercentageDecimals, bool[] memory isVested ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList( addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator], isVested[iterator] ); } } reservedTokensDestinationsAreSet = true; emit ReversedTokenListMultipleSet(addrs.length); } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) public onlyMintAgent canMint { require(receiver != address(0), "Receiver cannot be the Null Address"); totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event emit Transfer(address(0), receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) public onlyOwner canMint { require(addr != address(0), "Mint Agent Cannot be Null Address"); mintAgents[addr] = state; emit MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals,bool isVested) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen.plus(1); } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false, isVested:isVested }); } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { using SafeMathLibExt for uint256; /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint256 public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? * Note that when the token becomes transferable the minting always ends. */ constructor(string memory _name, string memory _symbol, uint256 _initialSupply, uint _decimals, bool _mintable, uint256 _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if (totalSupply > 0) { emit Minted(owner, totalSupply); } // No more new supply allowed after the token creation if (!_mintable) { mintingFinished = true; if (totalSupply == 0) { revert("annot create a token without supply and no minting"); // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public virtual override onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public virtual override returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string memory _name, string memory _symbol) external onlyOwner { name = _name; symbol = _symbol; emit UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) external onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint256 balance = token.balanceOf(address(this)); token.transfer(owner, balance); emit ClaimedTokens(_token, owner, balance); } function transferFrom(address _from, address _to, uint256 _value) public virtual override(StandardToken,ReleasableToken) returns (bool success) { uint256 _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].plus(_value); balances[_from] = balances[_from].minus(_value); allowed[_from][msg.sender] = _allowance.minus(_value); emit Transfer(_from, _to, _value); return true; } function transfer(address _to, uint256 _value) public virtual override(StandardToken,ReleasableToken) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } } // /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExtv1 is CrowdsaleTokenExt { using SafeMathLibExt for uint256; uint256 public originalSupply; address public oldTokenAddress; bool public isUpgradeAgent = false; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? * Note that when the token becomes transferable the minting always ends. */ constructor(string memory _name, string memory _symbol, uint256 _initialSupply, uint256 _decimals, bool _mintable, uint256 _globalMinCap, address _oldTokenAddress, uint256 _originalSupply) CrowdsaleTokenExt(_name, _symbol, _initialSupply, _decimals, _mintable, _globalMinCap) { originalSupply = _originalSupply; oldTokenAddress = _oldTokenAddress; isUpgradeAgent = true; } function upgradeFrom(address _from, uint256 value) public { // Make sure the call is from old token contract require(msg.sender == oldTokenAddress); // Validate input value. balances[_from] = balances[_from].plus(value); // Take tokens out from circulation totalSupply = totalSupply.plus(value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"bool","name":"_mintable","type":"bool"},{"internalType":"uint256","name":"_globalMinCap","type":"uint256"},{"internalType":"address","name":"_oldTokenAddress","type":"address"},{"internalType":"uint256","name":"_originalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":true,"internalType":"address","name":"_controller","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"FinalizedReversedAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"MintingAgentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"agent","type":"address"}],"name":"ReleaseAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"ReversedTokenListMultipleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"callet","type":"address"},{"indexed":false,"internalType":"address","name":"agent","type":"address"},{"indexed":false,"internalType":"bool","name":"set","type":"bool"}],"name":"TransferAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newName","type":"string"},{"indexed":false,"internalType":"string","name":"newSymbol","type":"string"}],"name":"UpdatedTokenInformation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"agent","type":"address"}],"name":"UpgradeAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"agent","type":"address"}],"name":"UpgradeMasterSet","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"areTokensDistributedForAddress","outputs":[{"internalType":"bool","name":"isDistributed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canUpgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"finalizeReservedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getReservedIsVested","outputs":[{"internalType":"bool","name":"isVested","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getReservedPercentageDecimals","outputs":[{"internalType":"uint256","name":"inPercentageDecimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getReservedPercentageUnit","outputs":[{"internalType":"uint256","name":"inPercentageUnit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getReservedTokens","outputs":[{"internalType":"uint256","name":"inTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUpgradeState","outputs":[{"internalType":"enum UpgradeableToken.UpgradeState","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressReserved","outputs":[{"internalType":"bool","name":"isReserved","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isToken","outputs":[{"internalType":"bool","name":"weAre","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isUpgradeAgent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintAgents","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reservedTokensDestinations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reservedTokensDestinationsLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reservedTokensList","outputs":[{"internalType":"uint256","name":"inTokens","type":"uint256"},{"internalType":"uint256","name":"inPercentageUnit","type":"uint256"},{"internalType":"uint256","name":"inPercentageDecimals","type":"uint256"},{"internalType":"bool","name":"isReserved","type":"bool"},{"internalType":"bool","name":"isDistributed","type":"bool"},{"internalType":"bool","name":"isVested","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setMintAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setReleaseAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"inTokens","type":"uint256[]"},{"internalType":"uint256[]","name":"inPercentageUnit","type":"uint256[]"},{"internalType":"uint256[]","name":"inPercentageDecimals","type":"uint256[]"},{"internalType":"bool[]","name":"isVested","type":"bool[]"}],"name":"setReservedTokensListMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setTokenInformation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setTransferAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"agent","type":"address"}],"name":"setUpgradeAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"master","type":"address"}],"name":"setUpgradeMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUpgraded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transferAgents","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeAgent","outputs":[{"internalType":"contract UpgradeAgent","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"upgradeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeMaster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600460146101000a81548160ff0219169083151502179055506000600660006101000a81548160ff0219169083151502179055506000600a556000600b60006101000a81548160ff0219169083151502179055506000601360146101000a81548160ff0219169083151502179055503480156200008257600080fd5b5060405162005f2a38038062005f2a8339818101604052610100811015620000a957600080fd5b8101908080516040519392919084640100000000821115620000ca57600080fd5b83820191506020820185811115620000e157600080fd5b8251866001820283011164010000000082111715620000ff57600080fd5b8083526020830192505050908051906020019080838360005b838110156200013557808201518184015260208101905062000118565b50505050905090810190601f168015620001635780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200018757600080fd5b838201915060208201858111156200019e57600080fd5b8251866001820283011164010000000082111715620001bc57600080fd5b8083526020830192505050908051906020019080838360005b83811015620001f2578082015181840152602081019050620001d5565b50505050905090810190601f168015620002205780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508787878787873333600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062005f056025913960400191505060405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600e9080519060200190620003d1929190620005e3565b5084600f9080519060200190620003ea929190620005e3565b5083600081905550826010819055508060118190555060005460016000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080541115620004ed577f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600054604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b816200056c576001600660006101000a81548160ff0219169083151502179055506000805414156200056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018062005ed36032913960400191505060405180910390fd5b5b5050505050508060128190555081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601360146101000a81548160ff021916908315150217905550505050505050505062000699565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200061b576000855562000667565b82601f106200063657805160ff191683800117855562000667565b8280016001018555821562000667579182015b828111156200066657825182559160200191906001019062000649565b5b5090506200067691906200067a565b5090565b5b80821115620006955760008160009055506001016200067b565b5090565b61582a80620006a96000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80636ffc22b81161019d578063b4ecb847116100e9578063dd62ed3e116100a2578063efa408de1161007c578063efa408de1461116b578063f2274abb14611473578063f2fde38b146114cd578063ffeb7d75146115115761030c565b8063dd62ed3e1461108f578063df8de3e714611107578063eefa597b1461114b5761030c565b8063b4ecb84714610f4d578063c331051714610fa7578063c752ff6214610fc5578063d1f276d314610fe3578063d7e7088a14611017578063d8542d511461105b5761030c565b80638da5cb5b1161015657806396132521116101305780639613252114610e455780639738968c14610e65578063a457c2d714610e85578063a9059cbb14610ee95761030c565b80638da5cb5b14610d3457806395d89b4114610d6857806395fe6f1d14610deb5761030c565b80636ffc22b814610b6f57806370a0823114610bb35780637386f0a714610c0b578063753e88e514610c635780638444b39114610cb1578063867c285714610cda5761030c565b806342c1867b1161025c57806351ed17a4116102155780635f412d4f116101ef5780635f412d4f14610ab9578063600440cb14610ac3578063612544b314610af757806361d3d7a614610b4f5761030c565b806351ed17a41461098c5780635c65816514610a0d5780635de4ccb014610a855761030c565b806342c1867b146106ec578063432146751461074657806345977d031461079657806345e7e140146107c45780634b2ba0dd1461081c5780634eee966f1461083a5761030c565b806327e235e3116102c957806339509351116102a357806339509351146105c45780633d0acdaa146106285780633fa615b01461068057806340c10f191461069e5761030c565b806327e235e31461050a57806329ff4f5314610562578063313ce567146105a65761030c565b806302f652a31461031157806305d2035b1461036157806306fdde0314610381578063095ea7b31461040457806318160ddd1461046857806323b872dd14610486575b600080fd5b61035f6004803603604081101561032757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611555565b005b61036961170a565b60405180821515815260200191505060405180910390f35b61038961171d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c95780820151818401526020810190506103ae565b50505050905090810190601f1680156103f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104506004803603604081101561041a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117bb565b60405180821515815260200191505060405180910390f35b610470611a9c565b6040518082815260200191505060405180910390f35b6104f26004803603606081101561049c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa2565b60405180821515815260200191505060405180910390f35b61054c6004803603602081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed5565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eed565b005b6105ae612107565b6040518082815260200191505060405180910390f35b610610600480360360408110156105da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061210d565b60405180821515815260200191505060405180910390f35b61066a6004803603602081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262e565b6040518082815260200191505060405180910390f35b61068861267a565b6040518082815260200191505060405180910390f35b6106ea600480360360408110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612680565b005b61072e6004803603602081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129de565b60405180821515815260200191505060405180910390f35b6107946004803603604081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129fe565b005b6107c2600480360360208110156107ac57600080fd5b8101908080359060200190929190505050612baa565b005b610806600480360360208110156107da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305d565b6040518082815260200191505060405180910390f35b6108246130a9565b6040518082815260200191505060405180910390f35b61098a6004803603604081101561085057600080fd5b810190808035906020019064010000000081111561086d57600080fd5b82018360208201111561087f57600080fd5b803590602001918460018302840111640100000000831117156108a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561090457600080fd5b82018360208201111561091657600080fd5b8035906020019184600183028401116401000000008311171561093857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506130af565b005b6109ce600480360360208110156109a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613280565b60405180878152602001868152602001858152602001841515815260200183151581526020018215158152602001965050505050505060405180910390f35b610a6f60048036036040811015610a2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e3565b6040518082815260200191505060405180910390f35b610a8d613308565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ac161332e565b005b610acb613416565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3960048036036020811015610b0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061343c565b6040518082815260200191505060405180910390f35b610b57613488565b60405180821515815260200191505060405180910390f35b610bb160048036036020811015610b8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349b565b005b610bf560048036036020811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613608565b6040518082815260200191505060405180910390f35b610c3760048036036020811015610c2157600080fd5b8101908080359060200190929190505050613651565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610caf60048036036040811015610c7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613690565b005b610cb96138a0565b60405180826004811115610cc957fe5b815260200191505060405180910390f35b610d1c60048036036020811015610cf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613933565b60405180821515815260200191505060405180910390f35b610d3c613953565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d70613979565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610db0578082015181840152602081019050610d95565b50505050905090810190601f168015610ddd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e2d60048036036020811015610e0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a17565b60405180821515815260200191505060405180910390f35b610e4d613a70565b60405180821515815260200191505060405180910390f35b610e6d613a83565b60405180821515815260200191505060405180910390f35b610ed160048036036040811015610e9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613aaa565b60405180821515815260200191505060405180910390f35b610f3560048036036040811015610eff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506140a0565b60405180821515815260200191505060405180910390f35b610f8f60048036036020811015610f6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061418a565b60405180821515815260200191505060405180910390f35b610faf6141e3565b6040518082815260200191505060405180910390f35b610fcd6141e9565b6040518082815260200191505060405180910390f35b610feb6141ef565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110596004803603602081101561102d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614215565b005b6110636145d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110f1600480360360408110156110a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145fd565b6040518082815260200191505060405180910390f35b6111496004803603602081101561111d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614684565b005b61115361491e565b60405180821515815260200191505060405180910390f35b611471600480360360a081101561118157600080fd5b810190808035906020019064010000000081111561119e57600080fd5b8201836020820111156111b057600080fd5b803590602001918460208302840111640100000000831117156111d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561123257600080fd5b82018360208201111561124457600080fd5b8035906020019184602083028401116401000000008311171561126657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156112c657600080fd5b8201836020820111156112d857600080fd5b803590602001918460208302840111640100000000831117156112fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561135a57600080fd5b82018360208201111561136c57600080fd5b8035906020019184602083028401116401000000008311171561138e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156113ee57600080fd5b82018360208201111561140057600080fd5b8035906020019184602083028401116401000000008311171561142257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050614927565b005b6114b56004803603602081101561148957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614afb565b60405180821515815260200191505060405180910390f35b61150f600480360360208110156114e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b54565b005b6115536004803603602081101561152757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ca8565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115af57600080fd5b6000600460149054906101000a900460ff16151581151514611639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e2072656c6561736564207374617465000000000000000000000081525060200191505060405180910390fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fed1ac4893a9f15c91db48b531385560822de7e6cbe0c96becd32c44a4d493d7a338484604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018215158152602001935050505060405180910390a1505050565b600660009054906101000a900460ff1681565b600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117b35780601f10611788576101008083540402835291602001916117b3565b820191906000526020600020905b81548152906001019060200180831161179657829003601f168201915b505050505081565b600080821415611833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f7420617070726f766520302076616c75650000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f7420617070726f766520666f72204e756c6c20614444524553530081525060200191505060405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061566b603c913960400191505060405180910390fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611bbc57600080fd5b505af4158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b8101908080519060200190929190505050600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611cd257600080fd5b505af4158015611ce6573d6000803e3d6000fd5b505050506040513d6020811015611cfc57600080fd5b8101908080519060200190929190505050600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611da957600080fd5b505af4158015611dbd573d6000803e3d6000fd5b505050506040513d6020811015611dd357600080fd5b8101908080519060200190929190505050600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60016020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4757600080fd5b6000600460149054906101000a900460ff16151581151514611fd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e2072656c6561736564207374617465000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612057576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157736024913960400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f53ad6c516bf269067125fc12d6ff230c46f078425b8d3e024eceea3a514979863383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60105481565b600080821415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f7420616464203020616c6c6f77616e63652076616c75650000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420616c6c6f7720666f72204e756c6c206164647265737300000081525060200191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561237957600080fd5b505af415801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b8101908080519060200190929190505050600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156125d457600080fd5b505af41580156125e8573d6000803e3d6000fd5b505050506040513d60208110156125fe57600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a36001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60115481565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806156a76037913960400191505060405180910390fd5b600660009054906101000a900460ff161561273c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806157086023913960400191505060405180910390fd5b600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561281d57600080fd5b505af4158015612831573d6000803e3d6000fd5b505050506040513d602081101561284757600080fd5b8101908080519060200190929190505050600081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156128f657600080fd5b505af415801561290a573d6000803e3d6000fd5b505050506040513d602081101561292057600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60076020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5857600080fd5b600660009054906101000a900460ff1615612a7257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157d46021913960400191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4b0adf6c802794c7dde28a08a4e07131abcff3bf9603cd71f14f90bec7865efa8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000612bb46138a0565b905060036004811115612bc357fe5b816004811115612bcf57fe5b1480612bf05750600480811115612be257fe5b816004811115612bee57fe5b145b612c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616c6c656420696e206261642053746174650000000000000000000000000081525060200191505060405180910390fd5b6000821415612cd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420696e7075742076616c75650000000000000000000000000081525060200191505060405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612d7157600080fd5b505af4158015612d85573d6000803e3d6000fd5b505050506040513d6020811015612d9b57600080fd5b8101908080519060200190929190505050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612e4a57600080fd5b505af4158015612e5e573d6000803e3d6000fd5b505050506040513d6020811015612e7457600080fd5b8101908080519060200190929190505050600081905550600d54733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ee657600080fd5b505af4158015612efa573d6000803e3d6000fd5b505050506040513d6020811015612f1057600080fd5b8101908080519060200190929190505050600d81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663753e88e533846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612fba57600080fd5b505af1158015612fce573d6000803e3d6000fd5b50505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac846040518082815260200191505060405180910390a35050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60125481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461310957600080fd5b81600e908051906020019061311f9291906155bf565b5080600f90805190602001906131369291906155bf565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb46600e600f6040518080602001806020018381038352858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156131e95780601f106131be576101008083540402835291602001916131e9565b820191906000526020600020905b8154815290600101906020018083116131cc57829003601f168201915b505083810382528481815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561326c5780601f106132415761010080835404028352916020019161326c565b820191906000526020600020905b81548152906001019060200180831161324f57829003601f168201915b505094505050505060405180910390a15050565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16905086565b6002602052816000526040600020602052806000526040600020600091509150505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f742072656c65617365206167656e7400000000000000000000000000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff021916908315150217905550613414614e9f565b565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b601360149054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806156a76037913960400191505060405180910390fd5b600660009054906101000a900460ff161561355757600080fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160030160016101000a81548160ff0219169083151502179055507ff30c7fcd9fd678846e18459c28dc824d5d764462d6a7984e536eca43e2c747d982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6009818154811061366157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136ea57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561378257600080fd5b505af4158015613796573d6000803e3d6000fd5b505050506040513d60208110156137ac57600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561385b57600080fd5b505af415801561386f573d6000803e3d6000fd5b505050506040513d602081101561388557600080fd5b81019080805190602001909291905050506000819055505050565b60006138aa613a83565b6138b75760019050613930565b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139175760029050613930565b6000600d54141561392b5760039050613930565b600490505b90565b60056020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a0f5780601f106139e457610100808354040283529160200191613a0f565b820191906000526020600020905b8154815290600101906020018083116139f257829003601f168201915b505050505081565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff169050919050565b600460149054906101000a900460ff1681565b6000600460149054906101000a900460ff168015613aa55750613aa4614f7f565b5b905090565b600080821415613b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742061646420302064656372656173652076616c7565000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420616c6c6f7720666f72204e756c6c206164647265737300000081525060200191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157516022913960400191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015613deb57600080fd5b505af4158015613dff573d6000803e3d6000fd5b505050506040513d6020811015613e1557600080fd5b8101908080519060200190929190505050600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561404657600080fd5b505af415801561405a573d6000803e3d6000fd5b505050506040513d602081101561407057600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a36001905092915050565b600033600460149054906101000a900460ff1661417757600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614176576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742041205472616e73666572204167656e7400000000000000000000000081525060200191505060405180910390fd5b5b6141818484614f88565b91505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160019054906101000a900460ff169050919050565b600a5481565b600d5481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61421d613a83565b614272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180615797603d913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265205a65726f20416464726573730000000000000000000081525060200191505060405180910390fd5b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146143bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806156de602a913960400191505060405180910390fd5b6004808111156143c757fe5b6143cf6138a0565b60048111156143da57fe5b1415614431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061572b6026913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d3d7a66040518163ffffffff1660e01b815260040160206040518083038186803b1580156144da57600080fd5b505afa1580156144ee573d6000803e3d6000fd5b505050506040513d602081101561450457600080fd5b8101908080519060200190929190505050614587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f42616420696e746572666163650000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146146de57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561471857600080fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561478657600080fd5b505afa15801561479a573d6000803e3d6000fd5b505050506040513d60208110156147b057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561485657600080fd5b505af115801561486a573d6000803e3d6000fd5b505050506040513d602081101561488057600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a3505050565b60006001905090565b600660009054906101000a900460ff161561494157600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461499b57600080fd5b600b60009054906101000a900460ff16156149b257fe5b83518551146149bd57fe5b82518451146149c857fe5b81518351146149d357fe5b60005b8551811015614aa057600073ffffffffffffffffffffffffffffffffffffffff16868281518110614a0357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614614a9357614a92868281518110614a3557fe5b6020026020010151868381518110614a4957fe5b6020026020010151868481518110614a5d57fe5b6020026020010151868581518110614a7157fe5b6020026020010151868681518110614a8557fe5b6020026020010151615072565b5b80806001019150506149d6565b506001600b60006101000a81548160ff0219169083151502179055507ff5d05f4d917e73fd3cfc7c78b8b428aadb7942b9ab681a3e74be043a4ca6c8b585516040518082815260200191505060405180910390a15050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160029054906101000a900460ff169050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614bae57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614be857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f7420736574206d617374657220636f6e747261637420746f20300081525060200191505060405180910390fd5b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d73672053656e646572206e6f742075706772616465206d617374657200000081525060200191505060405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0bae748e6d38d2b1532af619519837d91d74845ad693f6f229677b4ac20b2d5081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f742072656c65617365206167656e7400000000000000000000000000000081525060200191505060405180910390fd5b6001600460146101000a81548160ff021916908315150217905550565b60006001905090565b600033600460149054906101000a900460ff1661505f57600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661505e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742041205472616e73666572204167656e7400000000000000000000000081525060200191505060405180910390fd5b5b6150698484615322565b91505092915050565b600660009054906101000a900460ff161561508c57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146150e657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561511d57fe5b61512685613a17565b615226576009859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156151e957600080fd5b505af41580156151fd573d6000803e3d6000fd5b505050506040513d602081101561521357600080fd5b8101908080519060200190929190505050505b6040518060c00160405280858152602001848152602001838152602001600115158152602001600015158152602001821515815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff0219169083151502179055509050505050505050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156153bc57600080fd5b505af41580156153d0573d6000803e3d6000fd5b505050506040513d60208110156153e657600080fd5b8101908080519060200190929190505050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156154d257600080fd5b505af41580156154e6573d6000803e3d6000fd5b505050506040513d60208110156154fc57600080fd5b8101908080519060200190929190505050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155f5576000855561563c565b82601f1061560e57805160ff191683800117855561563c565b8280016001018555821561563c579182015b8281111561563b578251825591602001919060010190615620565b5b509050615649919061564d565b5090565b5b8082111561566657600081600090555060010161564e565b509056fe5370656e64657220616c726561647920617070726f7665642c696e737465616420696e6372656173652f646563726561736520616c6c6f77616e63654f6e6c792063726f776473616c6520636f6e7472616374732061726520616c6c6f77656420746f206d696e74206e657720746f6b656e734f6e6c792061206d61737465722063616e2064657369676e61746520746865206e657874206167656e7452656365697665722063616e6e6f7420626520746865204e756c6c2041646472657373557067726164652068617320616c726561647920626567756e20666f7220616e206167656e7443616e6e6f742072656d6f7665206d6f7265207468616e20616c6c6f77616e63652152656c65617365204167656e742063616e6e6f74206265204e756c6c204164647265737354686520746f6b656e206973206e6f742079657420696e2061207374617465207468617420776520636f756c64207468696e6b20757067726164696e674d696e74204167656e742043616e6e6f74206265204e756c6c2041646472657373a26469706673582212204592b660cbdaf4e72c790149857803c2094291e22c420fdf98e68844f364cd9864736f6c63430007060033616e6e6f7420637265617465206120746f6b656e20776974686f757420737570706c7920616e64206e6f206d696e74696e6755706772616465204d61737465722063616e6e6f74206265204e756c6c2041646472657373000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf7ffd530c2b4ee36f9b862b58fe8a12196566500000000000000000000000000000000000000000000065a4da25d3016c000000000000000000000000000000000000000000000000000000000000000000004557469780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035554580000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80636ffc22b81161019d578063b4ecb847116100e9578063dd62ed3e116100a2578063efa408de1161007c578063efa408de1461116b578063f2274abb14611473578063f2fde38b146114cd578063ffeb7d75146115115761030c565b8063dd62ed3e1461108f578063df8de3e714611107578063eefa597b1461114b5761030c565b8063b4ecb84714610f4d578063c331051714610fa7578063c752ff6214610fc5578063d1f276d314610fe3578063d7e7088a14611017578063d8542d511461105b5761030c565b80638da5cb5b1161015657806396132521116101305780639613252114610e455780639738968c14610e65578063a457c2d714610e85578063a9059cbb14610ee95761030c565b80638da5cb5b14610d3457806395d89b4114610d6857806395fe6f1d14610deb5761030c565b80636ffc22b814610b6f57806370a0823114610bb35780637386f0a714610c0b578063753e88e514610c635780638444b39114610cb1578063867c285714610cda5761030c565b806342c1867b1161025c57806351ed17a4116102155780635f412d4f116101ef5780635f412d4f14610ab9578063600440cb14610ac3578063612544b314610af757806361d3d7a614610b4f5761030c565b806351ed17a41461098c5780635c65816514610a0d5780635de4ccb014610a855761030c565b806342c1867b146106ec578063432146751461074657806345977d031461079657806345e7e140146107c45780634b2ba0dd1461081c5780634eee966f1461083a5761030c565b806327e235e3116102c957806339509351116102a357806339509351146105c45780633d0acdaa146106285780633fa615b01461068057806340c10f191461069e5761030c565b806327e235e31461050a57806329ff4f5314610562578063313ce567146105a65761030c565b806302f652a31461031157806305d2035b1461036157806306fdde0314610381578063095ea7b31461040457806318160ddd1461046857806323b872dd14610486575b600080fd5b61035f6004803603604081101561032757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611555565b005b61036961170a565b60405180821515815260200191505060405180910390f35b61038961171d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c95780820151818401526020810190506103ae565b50505050905090810190601f1680156103f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104506004803603604081101561041a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117bb565b60405180821515815260200191505060405180910390f35b610470611a9c565b6040518082815260200191505060405180910390f35b6104f26004803603606081101561049c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa2565b60405180821515815260200191505060405180910390f35b61054c6004803603602081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed5565b6040518082815260200191505060405180910390f35b6105a46004803603602081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eed565b005b6105ae612107565b6040518082815260200191505060405180910390f35b610610600480360360408110156105da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061210d565b60405180821515815260200191505060405180910390f35b61066a6004803603602081101561063e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262e565b6040518082815260200191505060405180910390f35b61068861267a565b6040518082815260200191505060405180910390f35b6106ea600480360360408110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612680565b005b61072e6004803603602081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129de565b60405180821515815260200191505060405180910390f35b6107946004803603604081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506129fe565b005b6107c2600480360360208110156107ac57600080fd5b8101908080359060200190929190505050612baa565b005b610806600480360360208110156107da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305d565b6040518082815260200191505060405180910390f35b6108246130a9565b6040518082815260200191505060405180910390f35b61098a6004803603604081101561085057600080fd5b810190808035906020019064010000000081111561086d57600080fd5b82018360208201111561087f57600080fd5b803590602001918460018302840111640100000000831117156108a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561090457600080fd5b82018360208201111561091657600080fd5b8035906020019184600183028401116401000000008311171561093857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506130af565b005b6109ce600480360360208110156109a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613280565b60405180878152602001868152602001858152602001841515815260200183151581526020018215158152602001965050505050505060405180910390f35b610a6f60048036036040811015610a2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132e3565b6040518082815260200191505060405180910390f35b610a8d613308565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ac161332e565b005b610acb613416565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b3960048036036020811015610b0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061343c565b6040518082815260200191505060405180910390f35b610b57613488565b60405180821515815260200191505060405180910390f35b610bb160048036036020811015610b8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061349b565b005b610bf560048036036020811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613608565b6040518082815260200191505060405180910390f35b610c3760048036036020811015610c2157600080fd5b8101908080359060200190929190505050613651565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610caf60048036036040811015610c7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613690565b005b610cb96138a0565b60405180826004811115610cc957fe5b815260200191505060405180910390f35b610d1c60048036036020811015610cf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613933565b60405180821515815260200191505060405180910390f35b610d3c613953565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d70613979565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610db0578082015181840152602081019050610d95565b50505050905090810190601f168015610ddd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e2d60048036036020811015610e0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a17565b60405180821515815260200191505060405180910390f35b610e4d613a70565b60405180821515815260200191505060405180910390f35b610e6d613a83565b60405180821515815260200191505060405180910390f35b610ed160048036036040811015610e9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613aaa565b60405180821515815260200191505060405180910390f35b610f3560048036036040811015610eff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506140a0565b60405180821515815260200191505060405180910390f35b610f8f60048036036020811015610f6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061418a565b60405180821515815260200191505060405180910390f35b610faf6141e3565b6040518082815260200191505060405180910390f35b610fcd6141e9565b6040518082815260200191505060405180910390f35b610feb6141ef565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110596004803603602081101561102d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614215565b005b6110636145d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110f1600480360360408110156110a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145fd565b6040518082815260200191505060405180910390f35b6111496004803603602081101561111d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614684565b005b61115361491e565b60405180821515815260200191505060405180910390f35b611471600480360360a081101561118157600080fd5b810190808035906020019064010000000081111561119e57600080fd5b8201836020820111156111b057600080fd5b803590602001918460208302840111640100000000831117156111d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561123257600080fd5b82018360208201111561124457600080fd5b8035906020019184602083028401116401000000008311171561126657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156112c657600080fd5b8201836020820111156112d857600080fd5b803590602001918460208302840111640100000000831117156112fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561135a57600080fd5b82018360208201111561136c57600080fd5b8035906020019184602083028401116401000000008311171561138e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156113ee57600080fd5b82018360208201111561140057600080fd5b8035906020019184602083028401116401000000008311171561142257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050614927565b005b6114b56004803603602081101561148957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614afb565b60405180821515815260200191505060405180910390f35b61150f600480360360208110156114e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b54565b005b6115536004803603602081101561152757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ca8565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115af57600080fd5b6000600460149054906101000a900460ff16151581151514611639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e2072656c6561736564207374617465000000000000000000000081525060200191505060405180910390fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fed1ac4893a9f15c91db48b531385560822de7e6cbe0c96becd32c44a4d493d7a338484604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018215158152602001935050505060405180910390a1505050565b600660009054906101000a900460ff1681565b600e8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117b35780601f10611788576101008083540402835291602001916117b3565b820191906000526020600020905b81548152906001019060200180831161179657829003601f168201915b505050505081565b600080821415611833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f7420617070726f766520302076616c75650000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f7420617070726f766520666f72204e756c6c20614444524553530081525060200191505060405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c81526020018061566b603c913960400191505060405180910390fd5b81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611bbc57600080fd5b505af4158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b8101908080519060200190929190505050600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611cd257600080fd5b505af4158015611ce6573d6000803e3d6000fd5b505050506040513d6020811015611cfc57600080fd5b8101908080519060200190929190505050600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091856040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015611da957600080fd5b505af4158015611dbd573d6000803e3d6000fd5b505050506040513d6020811015611dd357600080fd5b8101908080519060200190929190505050600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60016020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4757600080fd5b6000600460149054906101000a900460ff16151581151514611fd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f7420696e2072656c6561736564207374617465000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612057576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157736024913960400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f53ad6c516bf269067125fc12d6ff230c46f078425b8d3e024eceea3a514979863383604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b60105481565b600080821415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f7420616464203020616c6c6f77616e63652076616c75650000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420616c6c6f7720666f72204e756c6c206164647265737300000081525060200191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561237957600080fd5b505af415801561238d573d6000803e3d6000fd5b505050506040513d60208110156123a357600080fd5b8101908080519060200190929190505050600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156125d457600080fd5b505af41580156125e8573d6000803e3d6000fd5b505050506040513d60208110156125fe57600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a36001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60115481565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806156a76037913960400191505060405180910390fd5b600660009054906101000a900460ff161561273c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806157086023913960400191505060405180910390fd5b600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561281d57600080fd5b505af4158015612831573d6000803e3d6000fd5b505050506040513d602081101561284757600080fd5b8101908080519060200190929190505050600081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156128f657600080fd5b505af415801561290a573d6000803e3d6000fd5b505050506040513d602081101561292057600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60076020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a5857600080fd5b600660009054906101000a900460ff1615612a7257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157d46021913960400191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4b0adf6c802794c7dde28a08a4e07131abcff3bf9603cd71f14f90bec7865efa8282604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a15050565b6000612bb46138a0565b905060036004811115612bc357fe5b816004811115612bcf57fe5b1480612bf05750600480811115612be257fe5b816004811115612bee57fe5b145b612c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616c6c656420696e206261642053746174650000000000000000000000000081525060200191505060405180910390fd5b6000821415612cd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420696e7075742076616c75650000000000000000000000000081525060200191505060405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612d7157600080fd5b505af4158015612d85573d6000803e3d6000fd5b505050506040513d6020811015612d9b57600080fd5b8101908080519060200190929190505050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612e4a57600080fd5b505af4158015612e5e573d6000803e3d6000fd5b505050506040513d6020811015612e7457600080fd5b8101908080519060200190929190505050600081905550600d54733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015612ee657600080fd5b505af4158015612efa573d6000803e3d6000fd5b505050506040513d6020811015612f1057600080fd5b8101908080519060200190929190505050600d81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663753e88e533846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612fba57600080fd5b505af1158015612fce573d6000803e3d6000fd5b50505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac846040518082815260200191505060405180910390a35050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60125481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461310957600080fd5b81600e908051906020019061311f9291906155bf565b5080600f90805190602001906131369291906155bf565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb46600e600f6040518080602001806020018381038352858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156131e95780601f106131be576101008083540402835291602001916131e9565b820191906000526020600020905b8154815290600101906020018083116131cc57829003601f168201915b505083810382528481815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561326c5780601f106132415761010080835404028352916020019161326c565b820191906000526020600020905b81548152906001019060200180831161324f57829003601f168201915b505094505050505060405180910390a15050565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16905086565b6002602052816000526040600020602052806000526040600020600091509150505481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f742072656c65617365206167656e7400000000000000000000000000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff021916908315150217905550613414614e9f565b565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b601360149054906101000a900460ff1681565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806156a76037913960400191505060405180910390fd5b600660009054906101000a900460ff161561355757600080fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160030160016101000a81548160ff0219169083151502179055507ff30c7fcd9fd678846e18459c28dc824d5d764462d6a7984e536eca43e2c747d982604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6009818154811061366157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136ea57600080fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561378257600080fd5b505af4158015613796573d6000803e3d6000fd5b505050506040513d60208110156137ac57600080fd5b8101908080519060200190929190505050600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091836040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561385b57600080fd5b505af415801561386f573d6000803e3d6000fd5b505050506040513d602081101561388557600080fd5b81019080805190602001909291905050506000819055505050565b60006138aa613a83565b6138b75760019050613930565b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156139175760029050613930565b6000600d54141561392b5760039050613930565b600490505b90565b60056020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a0f5780601f106139e457610100808354040283529160200191613a0f565b820191906000526020600020905b8154815290600101906020018083116139f257829003601f168201915b505050505081565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff169050919050565b600460149054906101000a900460ff1681565b6000600460149054906101000a900460ff168015613aa55750613aa4614f7f565b5b905090565b600080821415613b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742061646420302064656372656173652076616c7565000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420616c6c6f7720666f72204e756c6c206164647265737300000081525060200191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157516022913960400191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b158015613deb57600080fd5b505af4158015613dff573d6000803e3d6000fd5b505050506040513d6020811015613e1557600080fd5b8101908080519060200190929190505050600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561404657600080fd5b505af415801561405a573d6000803e3d6000fd5b505050506040513d602081101561407057600080fd5b81019080805190602001909291905050506040518082815260200191505060405180910390a36001905092915050565b600033600460149054906101000a900460ff1661417757600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614176576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742041205472616e73666572204167656e7400000000000000000000000081525060200191505060405180910390fd5b5b6141818484614f88565b91505092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160019054906101000a900460ff169050919050565b600a5481565b600d5481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61421d613a83565b614272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180615797603d913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614315576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265205a65726f20416464726573730000000000000000000081525060200191505060405180910390fd5b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146143bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806156de602a913960400191505060405180910390fd5b6004808111156143c757fe5b6143cf6138a0565b60048111156143da57fe5b1415614431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061572b6026913960400191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d3d7a66040518163ffffffff1660e01b815260040160206040518083038186803b1580156144da57600080fd5b505afa1580156144ee573d6000803e3d6000fd5b505050506040513d602081101561450457600080fd5b8101908080519060200190929190505050614587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f42616420696e746572666163650000000000000000000000000000000000000081525060200191505060405180910390fd5b7f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146146de57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561471857600080fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561478657600080fd5b505afa15801561479a573d6000803e3d6000fd5b505050506040513d60208110156147b057600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561485657600080fd5b505af115801561486a573d6000803e3d6000fd5b505050506040513d602081101561488057600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c836040518082815260200191505060405180910390a3505050565b60006001905090565b600660009054906101000a900460ff161561494157600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461499b57600080fd5b600b60009054906101000a900460ff16156149b257fe5b83518551146149bd57fe5b82518451146149c857fe5b81518351146149d357fe5b60005b8551811015614aa057600073ffffffffffffffffffffffffffffffffffffffff16868281518110614a0357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614614a9357614a92868281518110614a3557fe5b6020026020010151868381518110614a4957fe5b6020026020010151868481518110614a5d57fe5b6020026020010151868581518110614a7157fe5b6020026020010151868681518110614a8557fe5b6020026020010151615072565b5b80806001019150506149d6565b506001600b60006101000a81548160ff0219169083151502179055507ff5d05f4d917e73fd3cfc7c78b8b428aadb7942b9ab681a3e74be043a4ca6c8b585516040518082815260200191505060405180910390a15050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160029054906101000a900460ff169050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614bae57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614be857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f7420736574206d617374657220636f6e747261637420746f20300081525060200191505060405180910390fd5b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d73672053656e646572206e6f742075706772616465206d617374657200000081525060200191505060405180910390fd5b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0bae748e6d38d2b1532af619519837d91d74845ad693f6f229677b4ac20b2d5081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f742072656c65617365206167656e7400000000000000000000000000000081525060200191505060405180910390fd5b6001600460146101000a81548160ff021916908315150217905550565b60006001905090565b600033600460149054906101000a900460ff1661505f57600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661505e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f742041205472616e73666572204167656e7400000000000000000000000081525060200191505060405180910390fd5b5b6150698484615322565b91505092915050565b600660009054906101000a900460ff161561508c57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146150e657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561511d57fe5b61512685613a17565b615226576009859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f909160016040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156151e957600080fd5b505af41580156151fd573d6000803e3d6000fd5b505050506040513d602081101561521357600080fd5b8101908080519060200190929190505050505b6040518060c00160405280858152602001848152602001838152602001600115158152602001600015158152602001821515815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555060808201518160030160016101000a81548160ff02191690831515021790555060a08201518160030160026101000a81548160ff0219169083151502179055509050505050505050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac163f4f3bdc19091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156153bc57600080fd5b505af41580156153d0573d6000803e3d6000fd5b505050506040513d60208110156153e657600080fd5b8101908080519060200190929190505050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054733aafd7dcba30a40ca9a1ddaf9af4bb5ac529fac16366098d4f9091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156154d257600080fd5b505af41580156154e6573d6000803e3d6000fd5b505050506040513d60208110156154fc57600080fd5b8101908080519060200190929190505050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826155f5576000855561563c565b82601f1061560e57805160ff191683800117855561563c565b8280016001018555821561563c579182015b8281111561563b578251825591602001919060010190615620565b5b509050615649919061564d565b5090565b5b8082111561566657600081600090555060010161564e565b509056fe5370656e64657220616c726561647920617070726f7665642c696e737465616420696e6372656173652f646563726561736520616c6c6f77616e63654f6e6c792063726f776473616c6520636f6e7472616374732061726520616c6c6f77656420746f206d696e74206e657720746f6b656e734f6e6c792061206d61737465722063616e2064657369676e61746520746865206e657874206167656e7452656365697665722063616e6e6f7420626520746865204e756c6c2041646472657373557067726164652068617320616c726561647920626567756e20666f7220616e206167656e7443616e6e6f742072656d6f7665206d6f7265207468616e20616c6c6f77616e63652152656c65617365204167656e742063616e6e6f74206265204e756c6c204164647265737354686520746f6b656e206973206e6f742079657420696e2061207374617465207468617420776520636f756c64207468696e6b20757067726164696e674d696e74204167656e742043616e6e6f74206265204e756c6c2041646472657373a26469706673582212204592b660cbdaf4e72c790149857803c2094291e22c420fdf98e68844f364cd9864736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf7ffd530c2b4ee36f9b862b58fe8a12196566500000000000000000000000000000000000000000000065a4da25d3016c000000000000000000000000000000000000000000000000000000000000000000004557469780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035554580000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Utix
Arg [1] : _symbol (string): UTX
Arg [2] : _initialSupply (uint256): 0
Arg [3] : _decimals (uint256): 18
Arg [4] : _mintable (bool): True
Arg [5] : _globalMinCap (uint256): 0
Arg [6] : _oldTokenAddress (address): 0xdaF7FFD530c2B4eE36f9b862b58fe8a121965665
Arg [7] : _originalSupply (uint256): 30000000000000000000000
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000daf7ffd530c2b4ee36f9b862b58fe8a121965665
Arg [7] : 00000000000000000000000000000000000000000000065a4da25d3016c00000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 5574697800000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 5554580000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.