Address Details
contract

0x7fAB9095861B3dB2EcD8C9f7539aC9675b548927

Contract Name
NFTKToken
Creator
0x0ca82c–81b919 at 0xefc9b4–f2de08
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
11 Transactions
Transfers
0 Transfers
Gas Used
411,805
Last Balance Update
15160258
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
NFTKToken




Optimization enabled
false
Compiler version
v0.8.2+commit.661d1103




EVM Version
istanbul




Verified at
2022-12-24T14:05:39.219543Z

BIP20.sol

pragma solidity 0.8.2;

interface BIP20 {
  function totalSupply() external view returns (uint24);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint24);
  function transfer(address recipient, uint24 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint24);
  function approve(address spender, uint24 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint24 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint24 value);
  event Approval(address indexed owner, address indexed spender, uint24 value);
} 

library ECDSA {
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (signature.length == 65) {
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
        } else if (signature.length == 64) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                let vs := mload(add(signature, 0x40))
                r := mload(add(signature, 0x20))
                s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
                v := add(shr(255, vs), 27)
            }
        } else {
            revert("ECDSA: invalid signature length");
        }

        return recover(hash, v, r, s);
    }
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");
        return signer;
    }
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}
contract Context {
  constructor ()  { }

  function _msgSender() internal view returns (address ) {
    return msg.sender;
  }

  function _msgData() internal view returns (bytes memory) {
    this; 
    return msg.data;
  }
}

library SafeMath {
  function add(uint24 a, uint24 b) internal pure returns (uint24) {
    uint24 c = a + b;
    require(c >= a, "SafeMath: addition overflow");
    return c;
  }
  function sub(uint24 a, uint24 b) internal pure returns (uint24) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  function sub(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    require(b <= a, errorMessage);
    uint24 c = a - b;

    return c;
  }
  function mul(uint24 a, uint24 b) internal pure returns (uint24) {
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint24 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  function div(uint24 a, uint24 b) internal pure returns (uint24) {
    return div(a, b, "SafeMath: division by zero");
  }

  function div(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint24 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  function mod(uint24 a, uint24 b) internal pure returns (uint24) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  function mod(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  constructor ()  {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  function owner() public view returns (address) {
    return _owner;
  }

  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  function renounceOwnership() public onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

contract NFTKToken is Context, BIP20, Ownable {
  using SafeMath for uint24;

  mapping (address => uint24) private _balances;

  mapping (address => mapping (address => uint24)) private _allowances;

  uint24 private _totalSupply;
  uint8 private _decimals;
  string private _symbol;
  string private _name;
  string private _ico;
  string private _baseURI;
 
  constructor() public {
    _name = "NFTicket Pay Token";
    _symbol = "NFTK";
    _decimals = 0;
    _ico = "QmPNAJEacA9FRnkirZxqm1xav4QizRhrNPNuSiX9yS3Vp2";
    _totalSupply = 400000;
    _balances[msg.sender] = _totalSupply;
    _baseURI="https://ipfs.io/ipfs/";
    DOMAIN_SEPARATOR = hashEIP712Domain(
    EIP712Domain({
                name : "EIP712Domain",
                version : "1",
                chainId : 100,
                verifyingContract : address(this)
                }));
    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  function setBaseURI(string calldata _uri) external  returns (bool) {
    _baseURI = _uri;
    return true;
  }

  function getOwner() override external view returns (address) {
    return owner();
  }

  function getIconCID() external view returns (string memory) {
    return _ico;
  }
  function getBaseURI() external view returns (string memory) {
    return _baseURI;
  }

  function decimals() override external view returns (uint8) {
    return _decimals;
  }
  function symbol() override external view returns (string memory) {
    return _symbol;
  }
  function ico() external view returns (string memory) {
    return string(abi.encodePacked(_baseURI, _ico));
  }
  function icon() external view returns (string memory) {
    return string(abi.encodePacked(_baseURI, _ico));
  }

  /**
  * @dev Returns the token name.
  */
  function name() override external view returns (string memory) {
    return _name;
  }

  function totalSupply() override external view returns (uint24) {
    return _totalSupply;
  }

  function balanceOf(address account) override external view returns (uint24) {
    return _balances[account];
  }

  function transfer(address recipient, uint24 amount) override external returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address owner, address spender) override external view returns (uint24) {
    return _allowances[owner][spender];
  }
  function approve(address spender, uint24 amount) override external returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint24 amount) override external returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "NFTicket: transfer amount exceeds allowance"));
    return true;
  }

  function increaseAllowance(address spender, uint24 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  function decreaseAllowance(address spender, uint24 subtractedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "NFTicket: decreased allowance below zero"));
    return true;
  }

  function mint(uint24 amount) public onlyOwner returns (bool) {
    _mint(_msgSender(), amount);
    return true;
  }

  function _transfer(address sender, address recipient, uint24 amount) internal {
    require(sender != address(0), "NFTicket: transfer from the zero address");
    require(recipient != address(0), "NFTicket: transfer to the zero address");

    _balances[sender] = _balances[sender].sub(amount, "NFTicket: transfer amount exceeds balance");
    _balances[recipient] = _balances[recipient].add(amount);
    emit Transfer(sender, recipient, amount);
  }

  function _mint(address account, uint24 amount) internal {
    require(account != address(0), "NFTicket: mint to the zero address");

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }

  function _burn(address account, uint24 amount) internal {
    require(account != address(0), "NFTicket: burn from the zero address");

    _balances[account] = _balances[account].sub(amount, "NFTicket: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
  }

  function _approve(address owner, address spender, uint24 amount) internal {
    require(owner != address(0), "NFTicket: approve from the zero address");
    require(spender != address(0), "NFTicket: approve to the zero address");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  function _burnFrom(address account, uint24 amount) internal {
    _burn(account, amount);
    _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "NFTicket: burn amount exceeds allowance"));
  }

  /*SenderApprove*/
    using ECDSA for bytes32;
    bytes32 DOMAIN_SEPARATOR;
    bytes32 constant EIP712DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
    bytes32 constant internal VERIFIABLE_CREDENTIAL_TYPEHASH = keccak256("VerifiableCredential(address _from,address _to,string memory _nonce,uint256 _amount)");
    struct EIP712Domain {string name;string version;uint256 chainId;address verifyingContract;}
  
    function hashEIP712Domain(EIP712Domain memory eip712Domain) internal pure returns (bytes32) {
        return keccak256(abi.encode(EIP712DOMAIN_TYPEHASH,keccak256(bytes(eip712Domain.name)),keccak256(bytes(eip712Domain.version)),eip712Domain.chainId,eip712Domain.verifyingContract));
    }

    function hashForSigned(address _from, address _to, string memory nonce, uint256 amount) public view returns (bytes32) {
        return (_hashForSigned(nonce, _from, _to, amount));
    }

    function hashVerifiableCredential(address _from,address _to,string memory _nonce,uint256 _amount) public pure returns (bytes32) {//0xAABBCC11223344....556677
        return keccak256(abi.encode(VERIFIABLE_CREDENTIAL_TYPEHASH, _from, _to, _nonce,_amount));
    }

    function _hashForSigned(string memory _nonce, address _from, address _to, uint256 _amount) internal view returns (bytes32) {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashVerifiableCredential(_from, _to, _nonce, _amount)
            )
        );
        return (digest);
    }

    struct metadata {
        address from;
        address to;
        uint256 amount;
        uint256 timestamp;
    } 
    mapping (string=>metadata) public nonces;
    
    function transferSender(address _to, uint24 _amount, string calldata nonce, bytes32 _credentialHash, bytes memory _signature ) external  {
        address _from = _credentialHash.recover(_signature);
        require(nonces[nonce].timestamp==0, "nonce has been used");
        bytes32 _cred = hashForSigned(_from, _to, nonce, _amount);
        require(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32",_cred))==_credentialHash, "Rejected POAV");
        nonces[nonce] = metadata(_from, _to, _amount, block.timestamp);
        _transfer(_from, _to, _amount);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint24","name":"value","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint24","name":"value","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"subtractedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getBaseURI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getIconCID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"hashForSigned","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"string","name":"nonce","internalType":"string"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"hashVerifiableCredential","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"string","name":"_nonce","internalType":"string"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"ico","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"icon","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"addedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"timestamp","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"string","name":"","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setBaseURI","inputs":[{"type":"string","name":"_uri","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferSender","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint24","name":"_amount","internalType":"uint24"},{"type":"string","name":"nonce","internalType":"string"},{"type":"bytes32","name":"_credentialHash","internalType":"bytes32"},{"type":"bytes","name":"_signature","internalType":"bytes"}]}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b50600062000024620003bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280601281526020017f4e465469636b65742050617920546f6b656e0000000000000000000000000000815250600590805190602001906200010f9291906200043f565b506040518060400160405280600481526020017f4e46544b00000000000000000000000000000000000000000000000000000000815250600490805190602001906200015d9291906200043f565b5060006003806101000a81548160ff021916908360ff1602179055506040518060600160405280602e8152602001620037d0602e913960069080519060200190620001aa9291906200043f565b5062061a80600360006101000a81548162ffffff021916908362ffffff160217905550600360009054906101000a900462ffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055506040518060400160405280601581526020017f68747470733a2f2f697066732e696f2f697066732f000000000000000000000081525060079080519060200190620002879291906200043f565b506200033a60405180608001604052806040518060400160405280600c81526020017f454950373132446f6d61696e000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508152602001606481526020013073ffffffffffffffffffffffffffffffffffffffff16815250620003c760201b60201c565b6008819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf867793600360009054906101000a900462ffffff16604051620003b1919062000590565b60405180910390a362000669565b600033905090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f826000015180519060200120836020015180519060200120846040015185606001516040516020016200042295949392919062000533565b604051602081830303815290604052805190602001209050919050565b8280546200044d9062000604565b90600052602060002090601f016020900481019282620004715760008555620004bd565b82601f106200048c57805160ff1916838001178555620004bd565b82800160010185558215620004bd579182015b82811115620004bc5782518255916020019190600101906200049f565b5b509050620004cc9190620004d0565b5090565b5b80821115620004eb576000816000905550600101620004d1565b5090565b620004fa81620005ad565b82525050565b6200050b81620005c1565b82525050565b6200051c81620005eb565b82525050565b6200052d81620005fa565b82525050565b600060a0820190506200054a600083018862000500565b62000559602083018762000500565b62000568604083018662000500565b62000577606083018562000522565b620005866080830184620004ef565b9695505050505050565b6000602082019050620005a7600083018462000511565b92915050565b6000620005ba82620005cb565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060028204905060018216806200061d57607f821691505b602082108114156200063457620006336200063a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61315780620006796000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063601b7921116100de57806395d89b4111610097578063dd62ed3e11610071578063dd62ed3e1461047d578063eaef4d8f146104ad578063f2fde38b146104dd578063f4de1e97146104f957610173565b806395d89b411461040e578063b24fce881461042c578063c557b9851461045f57610173565b8063601b79211461034a57806370a082311461037a578063714c5398146103aa578063715018a6146103c8578063893d20e8146103d25780638da5cb5b146103f057610173565b806338ee22351161013057806338ee22351461023c57806348d1544b1461026c5780634f61fd2a1461029c57806355f804b3146102cc5780635b195c86146102fc5780635d4522011461032c57610173565b806306fdde0314610178578063176cd7101461019657806318160ddd146101c6578063188743a8146101e4578063238386f314610202578063313ce5671461021e575b600080fd5b610180610529565b60405161018d9190612786565b60405180910390f35b6101b060048036038101906101ab9190612055565b6105bb565b6040516101bd91906126b1565b60405180910390f35b6101ce6106a8565b6040516101db9190612968565b60405180910390f35b6101ec6106c1565b6040516101f99190612786565b60405180910390f35b61021c600480360381019061021791906120e0565b610753565b005b6102266109bd565b6040516102339190612983565b60405180910390f35b61025660048036038101906102519190611fda565b6109d2565b60405161026391906126cc565b60405180910390f35b61028660048036038101906102819190611fda565b6109ea565b60405161029391906126cc565b60405180910390f35b6102b660048036038101906102b191906120a4565b610a45565b6040516102c391906126b1565b60405180910390f35b6102e660048036038101906102e1919061218a565b610b26565b6040516102f391906126b1565b60405180910390f35b610316600480360381019061031191906120a4565b610b44565b60405161032391906126b1565b60405180910390f35b610334610b62565b6040516103419190612786565b60405180910390f35b610364600480360381019061035f91906120a4565b610b8d565b60405161037191906126b1565b60405180910390f35b610394600480360381019061038f9190611f75565b610bab565b6040516103a19190612968565b60405180910390f35b6103b2610c03565b6040516103bf9190612786565b60405180910390f35b6103d0610c95565b005b6103da610de8565b6040516103e79190612651565b60405180910390f35b6103f8610df7565b6040516104059190612651565b60405180910390f35b610416610e20565b6040516104239190612786565b60405180910390f35b610446600480360381019061044191906121cf565b610eb2565b604051610456949392919061266c565b60405180910390f35b610467610f38565b6040516104749190612786565b60405180910390f35b61049760048036038101906104929190611f9e565b610f63565b6040516104a49190612968565b60405180910390f35b6104c760048036038101906104c29190612210565b610ff9565b6040516104d491906126b1565b60405180910390f35b6104f760048036038101906104f29190611f75565b6110aa565b005b610513600480360381019061050e91906120a4565b61114b565b60405161052091906126b1565b60405180910390f35b60606005805461053890612b7e565b80601f016020809104026020016040519081016040528092919081815260200182805461056490612b7e565b80156105b15780601f10610586576101008083540402835291602001916105b1565b820191906000526020600020905b81548152906001019060200180831161059457829003601f168201915b5050505050905090565b60006105c8848484611212565b61069d846105d46114f8565b610698856040518060600160405280602b81526020016130ce602b9139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061063a6114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b61156e565b600190509392505050565b6000600360009054906101000a900462ffffff16905090565b6060600680546106d090612b7e565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90612b7e565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905090565b6000610768828461175190919063ffffffff16565b905060006009868660405161077e9291906125b7565b908152602001604051809103902060030154146107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906127c8565b60405180910390fd5b6000610827828988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a62ffffff166109d2565b9050838160405160200161083b91906125f4565b6040516020818303038152906040528051906020012014610891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610888906127e8565b60405180910390fd5b60405180608001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018862ffffff16815260200142815250600987876040516108f59291906125b7565b908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301559050506109b3828989611212565b5050505050505050565b600060038054906101000a900460ff16905090565b60006109e08386868561181b565b9050949350505050565b60007f196e3ceae7c0ca1844cca8e762e192eb05c5eb1851a90519cf64bfeab2ae9cd985858585604051602001610a259594939291906126e7565b604051602081830303815290604052805190602001209050949350505050565b6000610b1c610a526114f8565b84610b17856040518060600160405280602881526020016130a66028913960026000610a7c6114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b61156e565b6001905092915050565b6000828260079190610b39929190611d64565b506001905092915050565b6000610b58610b516114f8565b8484611212565b6001905092915050565b606060076006604051602001610b799291906125d0565b604051602081830303815290604052905090565b6000610ba1610b9a6114f8565b848461156e565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff169050919050565b606060078054610c1290612b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90612b7e565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b5050505050905090565b610c9d6114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2190612928565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610df2610df7565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e2f90612b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90612b7e565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b5050505050905090565b6009818051602081018201805184825260208301602085012081835280955050505050506000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b606060076006604051602001610f4f9291906125d0565b604051602081830303815290604052905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff16905092915050565b60006110036114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790612928565b60405180910390fd5b6110a161109b6114f8565b83611862565b60019050919050565b6110b26114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690612928565b60405180910390fd5b61114881611a44565b50565b60006112086111586114f8565b8461120385600260006111696114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b61156e565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990612948565b60405180910390fd5b611372816040518060600160405280602981526020016130f960299139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff16021790555061143381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf867793836040516114eb9190612968565b60405180910390a3505050565b600033905090565b60008362ffffff168362ffffff1611158290611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499190612786565b60405180910390fd5b50600083856115619190612a9a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590612868565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590612888565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3ba96ffca58a5c0843f7fa57ac208298b3b86e7feed3d33a9f706270c2626e9836040516117449190612968565b60405180910390a3505050565b60008060008060418551141561177e576020850151925060408501519150606085015160001a9050611804565b6040855114156117c8576040850151602086015193507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81169250601b8160ff1c01915050611803565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90612808565b60405180910390fd5b5b61181086828585611bd9565b935050505092915050565b60008060085461182d868689876109ea565b60405160200161183e92919061261a565b60405160208183030381529060405280519060200120905080915050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c9906128e8565b60405180910390fd5b6118fb81600360009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600360006101000a81548162ffffff021916908362ffffff16021790555061197f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf86779383604051611a389190612968565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90612828565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611b809190612a61565b90508362ffffff168162ffffff161015611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690612848565b60405180910390fd5b8091505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c38906128a8565b60405180910390fd5b601b8460ff161480611c565750601c8460ff16145b611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90612908565b60405180910390fd5b600060018686868660405160008152602001604052604051611cba9493929190612741565b6020604051602081039080840390855afa158015611cdc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906127a8565b60405180910390fd5b80915050949350505050565b828054611d7090612b7e565b90600052602060002090601f016020900481019282611d925760008555611dd9565b82601f10611dab57803560ff1916838001178555611dd9565b82800160010185558215611dd9579182015b82811115611dd8578235825591602001919060010190611dbd565b5b509050611de69190611dea565b5090565b5b80821115611e03576000816000905550600101611deb565b5090565b6000611e1a611e15846129c3565b61299e565b905082815260208101848484011115611e3257600080fd5b611e3d848285612b3c565b509392505050565b6000611e58611e53846129f4565b61299e565b905082815260208101848484011115611e7057600080fd5b611e7b848285612b3c565b509392505050565b600081359050611e9281613049565b92915050565b600081359050611ea781613060565b92915050565b600082601f830112611ebe57600080fd5b8135611ece848260208601611e07565b91505092915050565b60008083601f840112611ee957600080fd5b8235905067ffffffffffffffff811115611f0257600080fd5b602083019150836001820283011115611f1a57600080fd5b9250929050565b600082601f830112611f3257600080fd5b8135611f42848260208601611e45565b91505092915050565b600081359050611f5a81613077565b92915050565b600081359050611f6f8161308e565b92915050565b600060208284031215611f8757600080fd5b6000611f9584828501611e83565b91505092915050565b60008060408385031215611fb157600080fd5b6000611fbf85828601611e83565b9250506020611fd085828601611e83565b9150509250929050565b60008060008060808587031215611ff057600080fd5b6000611ffe87828801611e83565b945050602061200f87828801611e83565b935050604085013567ffffffffffffffff81111561202c57600080fd5b61203887828801611f21565b925050606061204987828801611f60565b91505092959194509250565b60008060006060848603121561206a57600080fd5b600061207886828701611e83565b935050602061208986828701611e83565b925050604061209a86828701611f4b565b9150509250925092565b600080604083850312156120b757600080fd5b60006120c585828601611e83565b92505060206120d685828601611f4b565b9150509250929050565b60008060008060008060a087890312156120f957600080fd5b600061210789828a01611e83565b965050602061211889828a01611f4b565b955050604087013567ffffffffffffffff81111561213557600080fd5b61214189828a01611ed7565b9450945050606061215489828a01611e98565b925050608087013567ffffffffffffffff81111561217157600080fd5b61217d89828a01611ead565b9150509295509295509295565b6000806020838503121561219d57600080fd5b600083013567ffffffffffffffff8111156121b757600080fd5b6121c385828601611ed7565b92509250509250929050565b6000602082840312156121e157600080fd5b600082013567ffffffffffffffff8111156121fb57600080fd5b61220784828501611f21565b91505092915050565b60006020828403121561222257600080fd5b600061223084828501611f4b565b91505092915050565b61224281612ace565b82525050565b61225181612ae0565b82525050565b61226081612aec565b82525050565b61227761227282612aec565b612be1565b82525050565b60006122898385612a56565b9350612296838584612b3c565b82840190509392505050565b60006122ad82612a3a565b6122b78185612a45565b93506122c7818560208601612b4b565b6122d081612c78565b840191505092915050565b600081546122e881612b7e565b6122f28186612a56565b9450600182166000811461230d576001811461231e57612351565b60ff19831686528186019350612351565b61232785612a25565b60005b838110156123495781548189015260018201915060208101905061232a565b838801955050505b50505092915050565b6000612367601883612a45565b915061237282612c89565b602082019050919050565b600061238a601383612a45565b915061239582612cb2565b602082019050919050565b60006123ad600d83612a45565b91506123b882612cdb565b602082019050919050565b60006123d0601f83612a45565b91506123db82612d04565b602082019050919050565b60006123f3601c83612a56565b91506123fe82612d2d565b601c82019050919050565b6000612416602683612a45565b915061242182612d56565b604082019050919050565b6000612439600283612a56565b915061244482612da5565b600282019050919050565b600061245c601b83612a45565b915061246782612dce565b602082019050919050565b600061247f602783612a45565b915061248a82612df7565b604082019050919050565b60006124a2602583612a45565b91506124ad82612e46565b604082019050919050565b60006124c5602283612a45565b91506124d082612e95565b604082019050919050565b60006124e8602883612a45565b91506124f382612ee4565b604082019050919050565b600061250b602283612a45565b915061251682612f33565b604082019050919050565b600061252e602283612a45565b915061253982612f82565b604082019050919050565b6000612551602083612a45565b915061255c82612fd1565b602082019050919050565b6000612574602683612a45565b915061257f82612ffa565b604082019050919050565b61259381612b16565b82525050565b6125a281612b25565b82525050565b6125b181612b2f565b82525050565b60006125c482848661227d565b91508190509392505050565b60006125dc82856122db565b91506125e882846122db565b91508190509392505050565b60006125ff826123e6565b915061260b8284612266565b60208201915081905092915050565b60006126258261242c565b91506126318285612266565b6020820191506126418284612266565b6020820191508190509392505050565b60006020820190506126666000830184612239565b92915050565b60006080820190506126816000830187612239565b61268e6020830186612239565b61269b6040830185612599565b6126a86060830184612599565b95945050505050565b60006020820190506126c66000830184612248565b92915050565b60006020820190506126e16000830184612257565b92915050565b600060a0820190506126fc6000830188612257565b6127096020830187612239565b6127166040830186612239565b818103606083015261272881856122a2565b90506127376080830184612599565b9695505050505050565b60006080820190506127566000830187612257565b61276360208301866125a8565b6127706040830185612257565b61277d6060830184612257565b95945050505050565b600060208201905081810360008301526127a081846122a2565b905092915050565b600060208201905081810360008301526127c18161235a565b9050919050565b600060208201905081810360008301526127e18161237d565b9050919050565b60006020820190508181036000830152612801816123a0565b9050919050565b60006020820190508181036000830152612821816123c3565b9050919050565b6000602082019050818103600083015261284181612409565b9050919050565b600060208201905081810360008301526128618161244f565b9050919050565b6000602082019050818103600083015261288181612472565b9050919050565b600060208201905081810360008301526128a181612495565b9050919050565b600060208201905081810360008301526128c1816124b8565b9050919050565b600060208201905081810360008301526128e1816124db565b9050919050565b60006020820190508181036000830152612901816124fe565b9050919050565b6000602082019050818103600083015261292181612521565b9050919050565b6000602082019050818103600083015261294181612544565b9050919050565b6000602082019050818103600083015261296181612567565b9050919050565b600060208201905061297d600083018461258a565b92915050565b600060208201905061299860008301846125a8565b92915050565b60006129a86129b9565b90506129b48282612bb0565b919050565b6000604051905090565b600067ffffffffffffffff8211156129de576129dd612c49565b5b6129e782612c78565b9050602081019050919050565b600067ffffffffffffffff821115612a0f57612a0e612c49565b5b612a1882612c78565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612a6c82612b16565b9150612a7783612b16565b92508262ffffff03821115612a8f57612a8e612beb565b5b828201905092915050565b6000612aa582612b16565b9150612ab083612b16565b925082821015612ac357612ac2612beb565b5b828203905092915050565b6000612ad982612af6565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b69578082015181840152602081019050612b4e565b83811115612b78576000848401525b50505050565b60006002820490506001821680612b9657607f821691505b60208210811415612baa57612ba9612c1a565b5b50919050565b612bb982612c78565b810181811067ffffffffffffffff82111715612bd857612bd7612c49565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f6e6f6e636520686173206265656e207573656400000000000000000000000000600082015250565b7f52656a656374656420504f415600000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4e465469636b65743a20617070726f76652066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a20617070726f766520746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a207472616e736665722066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a206d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e465469636b65743a207472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b61305281612ace565b811461305d57600080fd5b50565b61306981612aec565b811461307457600080fd5b50565b61308081612b16565b811461308b57600080fd5b50565b61309781612b25565b81146130a257600080fd5b5056fe4e465469636b65743a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e465469636b65743a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e465469636b65743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122021f4bf0aca9e6562a4698d6c6fd41ef752087603e17532829f1725a5d6baa4aa64736f6c63430008020033516d504e414a456163413946526e6b69725a78716d317861763451697a5268724e504e7553695839795333567032

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063601b7921116100de57806395d89b4111610097578063dd62ed3e11610071578063dd62ed3e1461047d578063eaef4d8f146104ad578063f2fde38b146104dd578063f4de1e97146104f957610173565b806395d89b411461040e578063b24fce881461042c578063c557b9851461045f57610173565b8063601b79211461034a57806370a082311461037a578063714c5398146103aa578063715018a6146103c8578063893d20e8146103d25780638da5cb5b146103f057610173565b806338ee22351161013057806338ee22351461023c57806348d1544b1461026c5780634f61fd2a1461029c57806355f804b3146102cc5780635b195c86146102fc5780635d4522011461032c57610173565b806306fdde0314610178578063176cd7101461019657806318160ddd146101c6578063188743a8146101e4578063238386f314610202578063313ce5671461021e575b600080fd5b610180610529565b60405161018d9190612786565b60405180910390f35b6101b060048036038101906101ab9190612055565b6105bb565b6040516101bd91906126b1565b60405180910390f35b6101ce6106a8565b6040516101db9190612968565b60405180910390f35b6101ec6106c1565b6040516101f99190612786565b60405180910390f35b61021c600480360381019061021791906120e0565b610753565b005b6102266109bd565b6040516102339190612983565b60405180910390f35b61025660048036038101906102519190611fda565b6109d2565b60405161026391906126cc565b60405180910390f35b61028660048036038101906102819190611fda565b6109ea565b60405161029391906126cc565b60405180910390f35b6102b660048036038101906102b191906120a4565b610a45565b6040516102c391906126b1565b60405180910390f35b6102e660048036038101906102e1919061218a565b610b26565b6040516102f391906126b1565b60405180910390f35b610316600480360381019061031191906120a4565b610b44565b60405161032391906126b1565b60405180910390f35b610334610b62565b6040516103419190612786565b60405180910390f35b610364600480360381019061035f91906120a4565b610b8d565b60405161037191906126b1565b60405180910390f35b610394600480360381019061038f9190611f75565b610bab565b6040516103a19190612968565b60405180910390f35b6103b2610c03565b6040516103bf9190612786565b60405180910390f35b6103d0610c95565b005b6103da610de8565b6040516103e79190612651565b60405180910390f35b6103f8610df7565b6040516104059190612651565b60405180910390f35b610416610e20565b6040516104239190612786565b60405180910390f35b610446600480360381019061044191906121cf565b610eb2565b604051610456949392919061266c565b60405180910390f35b610467610f38565b6040516104749190612786565b60405180910390f35b61049760048036038101906104929190611f9e565b610f63565b6040516104a49190612968565b60405180910390f35b6104c760048036038101906104c29190612210565b610ff9565b6040516104d491906126b1565b60405180910390f35b6104f760048036038101906104f29190611f75565b6110aa565b005b610513600480360381019061050e91906120a4565b61114b565b60405161052091906126b1565b60405180910390f35b60606005805461053890612b7e565b80601f016020809104026020016040519081016040528092919081815260200182805461056490612b7e565b80156105b15780601f10610586576101008083540402835291602001916105b1565b820191906000526020600020905b81548152906001019060200180831161059457829003601f168201915b5050505050905090565b60006105c8848484611212565b61069d846105d46114f8565b610698856040518060600160405280602b81526020016130ce602b9139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061063a6114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b61156e565b600190509392505050565b6000600360009054906101000a900462ffffff16905090565b6060600680546106d090612b7e565b80601f01602080910402602001604051908101604052809291908181526020018280546106fc90612b7e565b80156107495780601f1061071e57610100808354040283529160200191610749565b820191906000526020600020905b81548152906001019060200180831161072c57829003601f168201915b5050505050905090565b6000610768828461175190919063ffffffff16565b905060006009868660405161077e9291906125b7565b908152602001604051809103902060030154146107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906127c8565b60405180910390fd5b6000610827828988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a62ffffff166109d2565b9050838160405160200161083b91906125f4565b6040516020818303038152906040528051906020012014610891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610888906127e8565b60405180910390fd5b60405180608001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018862ffffff16815260200142815250600987876040516108f59291906125b7565b908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301559050506109b3828989611212565b5050505050505050565b600060038054906101000a900460ff16905090565b60006109e08386868561181b565b9050949350505050565b60007f196e3ceae7c0ca1844cca8e762e192eb05c5eb1851a90519cf64bfeab2ae9cd985858585604051602001610a259594939291906126e7565b604051602081830303815290604052805190602001209050949350505050565b6000610b1c610a526114f8565b84610b17856040518060600160405280602881526020016130a66028913960026000610a7c6114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b61156e565b6001905092915050565b6000828260079190610b39929190611d64565b506001905092915050565b6000610b58610b516114f8565b8484611212565b6001905092915050565b606060076006604051602001610b799291906125d0565b604051602081830303815290604052905090565b6000610ba1610b9a6114f8565b848461156e565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff169050919050565b606060078054610c1290612b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90612b7e565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b5050505050905090565b610c9d6114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2190612928565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610df2610df7565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e2f90612b7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90612b7e565b8015610ea85780601f10610e7d57610100808354040283529160200191610ea8565b820191906000526020600020905b815481529060010190602001808311610e8b57829003601f168201915b5050505050905090565b6009818051602081018201805184825260208301602085012081835280955050505050506000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b606060076006604051602001610f4f9291906125d0565b604051602081830303815290604052905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff16905092915050565b60006110036114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790612928565b60405180910390fd5b6110a161109b6114f8565b83611862565b60019050919050565b6110b26114f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690612928565b60405180910390fd5b61114881611a44565b50565b60006112086111586114f8565b8461120385600260006111696114f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b61156e565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990612948565b60405180910390fd5b611372816040518060600160405280602981526020016130f960299139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166115009092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff16021790555061143381600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf867793836040516114eb9190612968565b60405180910390a3505050565b600033905090565b60008362ffffff168362ffffff1611158290611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499190612786565b60405180910390fd5b50600083856115619190612a9a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590612868565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590612888565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3ba96ffca58a5c0843f7fa57ac208298b3b86e7feed3d33a9f706270c2626e9836040516117449190612968565b60405180910390a3505050565b60008060008060418551141561177e576020850151925060408501519150606085015160001a9050611804565b6040855114156117c8576040850151602086015193507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81169250601b8160ff1c01915050611803565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90612808565b60405180910390fd5b5b61181086828585611bd9565b935050505092915050565b60008060085461182d868689876109ea565b60405160200161183e92919061261a565b60405160208183030381529060405280519060200120905080915050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c9906128e8565b60405180910390fd5b6118fb81600360009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600360006101000a81548162ffffff021916908362ffffff16021790555061197f81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff16611b7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf86779383604051611a389190612968565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab90612828565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284611b809190612a61565b90508362ffffff168162ffffff161015611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690612848565b60405180910390fd5b8091505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c38906128a8565b60405180910390fd5b601b8460ff161480611c565750601c8460ff16145b611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90612908565b60405180910390fd5b600060018686868660405160008152602001604052604051611cba9493929190612741565b6020604051602081039080840390855afa158015611cdc573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906127a8565b60405180910390fd5b80915050949350505050565b828054611d7090612b7e565b90600052602060002090601f016020900481019282611d925760008555611dd9565b82601f10611dab57803560ff1916838001178555611dd9565b82800160010185558215611dd9579182015b82811115611dd8578235825591602001919060010190611dbd565b5b509050611de69190611dea565b5090565b5b80821115611e03576000816000905550600101611deb565b5090565b6000611e1a611e15846129c3565b61299e565b905082815260208101848484011115611e3257600080fd5b611e3d848285612b3c565b509392505050565b6000611e58611e53846129f4565b61299e565b905082815260208101848484011115611e7057600080fd5b611e7b848285612b3c565b509392505050565b600081359050611e9281613049565b92915050565b600081359050611ea781613060565b92915050565b600082601f830112611ebe57600080fd5b8135611ece848260208601611e07565b91505092915050565b60008083601f840112611ee957600080fd5b8235905067ffffffffffffffff811115611f0257600080fd5b602083019150836001820283011115611f1a57600080fd5b9250929050565b600082601f830112611f3257600080fd5b8135611f42848260208601611e45565b91505092915050565b600081359050611f5a81613077565b92915050565b600081359050611f6f8161308e565b92915050565b600060208284031215611f8757600080fd5b6000611f9584828501611e83565b91505092915050565b60008060408385031215611fb157600080fd5b6000611fbf85828601611e83565b9250506020611fd085828601611e83565b9150509250929050565b60008060008060808587031215611ff057600080fd5b6000611ffe87828801611e83565b945050602061200f87828801611e83565b935050604085013567ffffffffffffffff81111561202c57600080fd5b61203887828801611f21565b925050606061204987828801611f60565b91505092959194509250565b60008060006060848603121561206a57600080fd5b600061207886828701611e83565b935050602061208986828701611e83565b925050604061209a86828701611f4b565b9150509250925092565b600080604083850312156120b757600080fd5b60006120c585828601611e83565b92505060206120d685828601611f4b565b9150509250929050565b60008060008060008060a087890312156120f957600080fd5b600061210789828a01611e83565b965050602061211889828a01611f4b565b955050604087013567ffffffffffffffff81111561213557600080fd5b61214189828a01611ed7565b9450945050606061215489828a01611e98565b925050608087013567ffffffffffffffff81111561217157600080fd5b61217d89828a01611ead565b9150509295509295509295565b6000806020838503121561219d57600080fd5b600083013567ffffffffffffffff8111156121b757600080fd5b6121c385828601611ed7565b92509250509250929050565b6000602082840312156121e157600080fd5b600082013567ffffffffffffffff8111156121fb57600080fd5b61220784828501611f21565b91505092915050565b60006020828403121561222257600080fd5b600061223084828501611f4b565b91505092915050565b61224281612ace565b82525050565b61225181612ae0565b82525050565b61226081612aec565b82525050565b61227761227282612aec565b612be1565b82525050565b60006122898385612a56565b9350612296838584612b3c565b82840190509392505050565b60006122ad82612a3a565b6122b78185612a45565b93506122c7818560208601612b4b565b6122d081612c78565b840191505092915050565b600081546122e881612b7e565b6122f28186612a56565b9450600182166000811461230d576001811461231e57612351565b60ff19831686528186019350612351565b61232785612a25565b60005b838110156123495781548189015260018201915060208101905061232a565b838801955050505b50505092915050565b6000612367601883612a45565b915061237282612c89565b602082019050919050565b600061238a601383612a45565b915061239582612cb2565b602082019050919050565b60006123ad600d83612a45565b91506123b882612cdb565b602082019050919050565b60006123d0601f83612a45565b91506123db82612d04565b602082019050919050565b60006123f3601c83612a56565b91506123fe82612d2d565b601c82019050919050565b6000612416602683612a45565b915061242182612d56565b604082019050919050565b6000612439600283612a56565b915061244482612da5565b600282019050919050565b600061245c601b83612a45565b915061246782612dce565b602082019050919050565b600061247f602783612a45565b915061248a82612df7565b604082019050919050565b60006124a2602583612a45565b91506124ad82612e46565b604082019050919050565b60006124c5602283612a45565b91506124d082612e95565b604082019050919050565b60006124e8602883612a45565b91506124f382612ee4565b604082019050919050565b600061250b602283612a45565b915061251682612f33565b604082019050919050565b600061252e602283612a45565b915061253982612f82565b604082019050919050565b6000612551602083612a45565b915061255c82612fd1565b602082019050919050565b6000612574602683612a45565b915061257f82612ffa565b604082019050919050565b61259381612b16565b82525050565b6125a281612b25565b82525050565b6125b181612b2f565b82525050565b60006125c482848661227d565b91508190509392505050565b60006125dc82856122db565b91506125e882846122db565b91508190509392505050565b60006125ff826123e6565b915061260b8284612266565b60208201915081905092915050565b60006126258261242c565b91506126318285612266565b6020820191506126418284612266565b6020820191508190509392505050565b60006020820190506126666000830184612239565b92915050565b60006080820190506126816000830187612239565b61268e6020830186612239565b61269b6040830185612599565b6126a86060830184612599565b95945050505050565b60006020820190506126c66000830184612248565b92915050565b60006020820190506126e16000830184612257565b92915050565b600060a0820190506126fc6000830188612257565b6127096020830187612239565b6127166040830186612239565b818103606083015261272881856122a2565b90506127376080830184612599565b9695505050505050565b60006080820190506127566000830187612257565b61276360208301866125a8565b6127706040830185612257565b61277d6060830184612257565b95945050505050565b600060208201905081810360008301526127a081846122a2565b905092915050565b600060208201905081810360008301526127c18161235a565b9050919050565b600060208201905081810360008301526127e18161237d565b9050919050565b60006020820190508181036000830152612801816123a0565b9050919050565b60006020820190508181036000830152612821816123c3565b9050919050565b6000602082019050818103600083015261284181612409565b9050919050565b600060208201905081810360008301526128618161244f565b9050919050565b6000602082019050818103600083015261288181612472565b9050919050565b600060208201905081810360008301526128a181612495565b9050919050565b600060208201905081810360008301526128c1816124b8565b9050919050565b600060208201905081810360008301526128e1816124db565b9050919050565b60006020820190508181036000830152612901816124fe565b9050919050565b6000602082019050818103600083015261292181612521565b9050919050565b6000602082019050818103600083015261294181612544565b9050919050565b6000602082019050818103600083015261296181612567565b9050919050565b600060208201905061297d600083018461258a565b92915050565b600060208201905061299860008301846125a8565b92915050565b60006129a86129b9565b90506129b48282612bb0565b919050565b6000604051905090565b600067ffffffffffffffff8211156129de576129dd612c49565b5b6129e782612c78565b9050602081019050919050565b600067ffffffffffffffff821115612a0f57612a0e612c49565b5b612a1882612c78565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612a6c82612b16565b9150612a7783612b16565b92508262ffffff03821115612a8f57612a8e612beb565b5b828201905092915050565b6000612aa582612b16565b9150612ab083612b16565b925082821015612ac357612ac2612beb565b5b828203905092915050565b6000612ad982612af6565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612b69578082015181840152602081019050612b4e565b83811115612b78576000848401525b50505050565b60006002820490506001821680612b9657607f821691505b60208210811415612baa57612ba9612c1a565b5b50919050565b612bb982612c78565b810181811067ffffffffffffffff82111715612bd857612bd7612c49565b5b80604052505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f6e6f6e636520686173206265656e207573656400000000000000000000000000600082015250565b7f52656a656374656420504f415600000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4e465469636b65743a20617070726f76652066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a20617070726f766520746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a207472616e736665722066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a206d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e465469636b65743a207472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b61305281612ace565b811461305d57600080fd5b50565b61306981612aec565b811461307457600080fd5b50565b61308081612b16565b811461308b57600080fd5b50565b61309781612b25565b81146130a257600080fd5b5056fe4e465469636b65743a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e465469636b65743a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e465469636b65743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122021f4bf0aca9e6562a4698d6c6fd41ef752087603e17532829f1725a5d6baa4aa64736f6c63430008020033