ETH Price: $3,262.44 (-0.61%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claimbynum115136932020-12-24 2:48:521477 days ago1608778132IN
0x44836483...b8D3bB82D
0 ETH0.0042585
Raise Power114611372020-12-16 1:21:271485 days ago1608081687IN
0x44836483...b8D3bB82D
0 ETH0.0055681738
Renew NFT114527292020-12-14 18:27:561487 days ago1607970476IN
0x44836483...b8D3bB82D
0 ETH0.0188470538
Raise Power114517182020-12-14 14:41:231487 days ago1607956883IN
0x44836483...b8D3bB82D
0 ETH0.0105909981
Set Relay Power114510832020-12-14 12:18:381487 days ago1607948318IN
0x44836483...b8D3bB82D
0 ETH0.0019476771
Withdraw114497262020-12-14 7:18:441487 days ago1607930324IN
0x44836483...b8D3bB82D
0 ETH0.003170520
Renew NFT114445162020-12-13 11:50:521488 days ago1607860252IN
0x44836483...b8D3bB82D
0 ETH0.0084256518
Claimbynum114442832020-12-13 11:00:141488 days ago1607857214IN
0x44836483...b8D3bB82D
0 ETH0.0079177118.7
Claimbynum114437152020-12-13 9:01:501488 days ago1607850110IN
0x44836483...b8D3bB82D
0 ETH0.0054271818
Claimbynum114429722020-12-13 6:20:311488 days ago1607840431IN
0x44836483...b8D3bB82D
0 ETH0.006738115
Claimbynum114427132020-12-13 5:26:141488 days ago1607837174IN
0x44836483...b8D3bB82D
0 ETH0.0033611728
Claimbynum114426372020-12-13 5:09:331488 days ago1607836173IN
0x44836483...b8D3bB82D
0 ETH0.006738115
Claimbynum114423162020-12-13 4:04:581488 days ago1607832298IN
0x44836483...b8D3bB82D
0 ETH0.0098834522.002
Claimbynum114422362020-12-13 3:43:531488 days ago1607831033IN
0x44836483...b8D3bB82D
0 ETH0.0087258320.1
Claimbynum114419462020-12-13 2:41:271488 days ago1607827287IN
0x44836483...b8D3bB82D
0 ETH0.0098828122
Renew NFT114403502020-12-12 20:39:221488 days ago1607805562IN
0x44836483...b8D3bB82D
0 ETH0.0138264729
Renew NFT114403212020-12-12 20:32:501488 days ago1607805170IN
0x44836483...b8D3bB82D
0 ETH0.0146932829
Renew NFT114402982020-12-12 20:28:201488 days ago1607804900IN
0x44836483...b8D3bB82D
0 ETH0.0138264729
Renew NFT114402392020-12-12 20:12:181488 days ago1607803938IN
0x44836483...b8D3bB82D
0 ETH0.0133908927
Claimbynum114394132020-12-12 17:14:041489 days ago1607793244IN
0x44836483...b8D3bB82D
0 ETH0.0084680620
Store114380372020-12-12 12:14:321489 days ago1607775272IN
0x44836483...b8D3bB82D
0 ETH0.0049950426
Raise Power114377982020-12-12 11:20:101489 days ago1607772010IN
0x44836483...b8D3bB82D
0 ETH0.0022108819.1
Renew NFT114377812020-12-12 11:14:541489 days ago1607771694IN
0x44836483...b8D3bB82D
0 ETH0.0077541217
Claimbynum114377222020-12-12 11:03:151489 days ago1607770995IN
0x44836483...b8D3bB82D
0 ETH0.0073974117
Claimbynum114377222020-12-12 11:03:151489 days ago1607770995IN
0x44836483...b8D3bB82D
0 ETH0.0074529117
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NftFactory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-07
*/

pragma solidity ^0.5.16;

/**
  * @title ArtDeco Finance
  *
  * @notice ArtDeco NFT Factory: ERC-721 NFT token generated by user selfly  
  * 
  */
  
/***
* 
* MIT License
* ===========
* 
*  Copyright (c) 2020 ArtDeco
* 
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/

interface AnftToken {
  function mint(address account, uint256 tokenId) external returns (bool);
  function safeMint(address to, uint256 tokenId, bytes calldata _data) external returns (bool);
  function ownerOf(uint256 tokenId) external returns (address owner);
  function totalSupply() external view returns (uint256);
  function safeTransferFrom(address from, address to, uint256 tokenId) external;
}  

interface ApwrToken {
  function mint(address account, uint256 amount) external;
  function totalSupply() external returns (uint256);
  function burnFrom(address account, uint256 _value) external;
} 

interface ArtdToken {
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function mint(address account, uint256 amount) external;
}

interface NFTFactory{
    function getMeta( uint256 resId ) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, address);
    function getMeta2( uint256 nftId ) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256);
    function getFactory( uint256 nftId ) external view returns (address);
    function renewPromote( uint256 nftId, uint256 value ) external;
    function renewAmount( uint256 nftId, uint256 value ) external;
    function renewAPWR( uint256 nftId, uint256 value ) external;
    function renewSKILL( uint256 nftId, uint256 value ) external;
    function renewERA( uint256 nftId, uint256 value ) external;
    function renewLocktime( uint256 nftId, uint256 value ) external;
    function getAuthor( uint256 nftId ) external view returns (address);
    function getcreatedTime( uint256 nftId ) external view returns (uint256);
    function getLock( uint256 nftId ) external view returns (uint256);
}

interface validfactory {
  function isValidfactory( address _factory ) external view returns (bool);
} 

interface ArttToken {
  function transferFrom(address src, address dst, uint rawAmount) external returns (bool);
} 

interface RandomSeed {
  function random_getSeed( address sender, uint256 num ) external view returns (uint256);
  function random_get9999( address sender, uint256 random ) external view returns (uint);
  function random_get9999x( address sender, uint256 num ) external returns (uint);
} 


/**
 * @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 private _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 () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @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 {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
    int256 constant private INT256_MIN = -2**255;

    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Multiplies two signed integers, reverts on overflow.
    */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below

        int256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
    */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0); // Solidity only automatically asserts when dividing by 0
        require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow

        int256 c = a / b;

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Subtracts two signed integers, reverts on overflow.
    */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Adds two signed integers, reverts on overflow.
    */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solium-disable-next-line security/no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

contract nftMeta {

     mapping(uint256 => uint256) internal _era;
     mapping(uint256 => uint256) internal _grade;
     mapping(uint256 => uint256) internal _promote;
     mapping(uint256 => uint256) internal _artdamount;
     mapping(uint256 => uint256) internal _apwramount;
     mapping(uint256 => uint256) internal _skill;
     mapping(uint256 => address) internal _factory;
     
     mapping(uint256 => address) internal _author;
     mapping(uint256 => uint256) internal _createdTime;
     mapping(uint256 => uint256) internal _lock;
}    
 


contract NftFactory is  Ownable, nftMeta {
    using SafeMath for uint256;
    using Address for address;
    
    uint256 private releaseDate;
    
    address public _artd =  address(0xA23F8462d90dbc60a06B9226206bFACdEAD2A26F);
    address public _anft =  address(0x99a7e1188CE9a0b7514d084878DFb8A405D8529F);
    address public _apwr = address(0xb60F072494c7f1b5a8ba46bc735C71A83D940D1A);
    address public _artt = address(0x77dF79539083DCd4a8898dbA296d899aFef20067);
    address public _fundpool = address(0x37C8fC383e037f92f501E5884B8B5E37e3f5170E);
    
    address public _validchecker = address(0x58F62d9B184BE5D7eE6881854DD16898Afe0cf90);
    address private _randseed = address(0x75A7c0f3c7E59D0Aa323cc8832EaF2729Fe2127C);
 
    address public _relay = address(0xe9089848C9873B6cCcF72D23446EaA2851f77E61);
        
    address public _burnPool = 0x6666666666666666666666666666666666666666;
    
    uint256 public _eraNFT = 2;   //  NEW Generration 
    uint256 private pwrdist = 0.002 * 1e18;  // claim APWR amount 
    uint256 private pwrupg  = 0.005 * 1e18;  // upgrade APWR amount
    uint256 private pwrrelay  = 0.004 * 1e18;  // relay APWR amount
     
    address[] public _allfactorylist;
    uint256 public _storestartTime =  now + 365 days;
    uint256 private nonce = 0;
    uint256 private max_promote = 9999;
    uint256 public constant _rateBase = 10000; 
    uint256 public _burnRate = 250;       
    uint256 public _rewardRate = 250;
    uint256 public _claimdays = 60 days;
    uint256 public _factorycount = 0;
    uint256 public _factorylimit = 1000;
    
    bytes _data = new bytes(0);
    
    mapping(uint256 => uint256) public _lastStoreTime;
    mapping(uint256 => uint) private _allowchallenge;
        
    // Mapping from airdrop receiver to boolean 
    mapping (address => bool) public hasClaimed;

    event TokenParameter(uint256 indexed resId, uint256 era, uint256 grade, uint256 promote, uint256 artdamount, uint256 apwramount,uint256 skill, address factory, address author, uint256 createdTime);
    event DataParameter( bytes _data );
    event Store(uint256 indexed Id, address user, uint256 amount);
    event Withdraw(uint256 indexed Id, address user, uint256 amount);
    event MetaUpdated(address addr, uint256 nftid, uint256 value);
    event BurnNFT(address addr, uint256 nftid);
    event Fusion(uint256 nftId1, uint256 nftId2, uint256 value);
    event Challenge(uint256 nftId, bool winlose, uint256 diffamount, uint256 finalamount);
    event RaisePower(uint256 indexed Id, address user, uint256 amount);
    event ADDSKILL(uint256 indexed Id, address user, uint256 amount);
    event SwChallenge(uint256 nftId, bool onoff);
    event LockTime(uint256 nftId, uint256 time);
    event Grade1(address user, uint256 time, uint256 block);
    event Grade2(address user, uint256 time, uint256 block);
    event Grade3(address user, uint256 time, uint256 block);
    event Grade4(address user, uint256 time, uint256 block);
    event Grade5(address user, uint256 time, uint256 block);
    event Grade6(address user, uint256 time, uint256 block);
    event reNewNft(address user, uint256 nftId, uint256 newId);
    
    // Throws when msg.sender has already claimed the airdrop 
    modifier hasNotClaimed() {
        require(hasClaimed[msg.sender] == false);
        _;
    }
    
    // Throws when the 30 day airdrop period has passed 
    modifier canClaim() {
        require(releaseDate + _claimdays >= now);
        _;
    }

    modifier checkstoreStart() {
        require(block.timestamp > _storestartTime, "store not start");
        _;
    }

    constructor() public {
        // Set releaseDate
        releaseDate = now;
        _allfactorylist.push( address(this) );
    }

    function _random_get_seed( uint256 num ) internal view returns (uint256) {

        RandomSeed _rc = RandomSeed(_randseed);
        return _rc.random_getSeed(msg.sender,num);
    }

    function _randomGrade( uint random ) internal view returns (uint8) {

        RandomSeed _rc = RandomSeed(_randseed);
        uint256 num = _rc.random_get9999(msg.sender,random);   
        
        uint8 grade = 1;

        if ( num >= 9995 ){   // 0.05 % 
            grade = 6;  
        }   
        else if ( num >= 9965 ){   // 0.30 %
            grade = 5;  
        }  
        else if ( num >= 9800 ){   // 1.65 %
            grade = 4;  
        }  
        else if ( num >= 9500 ){   // 3 %
            grade = 3;  
        }  
        else if ( num >= 7000 ){  // 25 %
            grade = 2;  
        }  
        return grade;        // 70%
    }

    function _randomGradeX() internal returns (uint8) 
    {
        nonce = nonce + 1;
        RandomSeed _rc = RandomSeed(_randseed);
        uint256 num = _rc.random_get9999x(msg.sender,nonce);   
        
        uint8 grade = 1;

        if ( num >= 9995 ){    
            grade = 6;  
        }   
        else if ( num >= 9965 ){  
            grade = 5;  
        }  
        else if ( num >= 9800 ){   
            grade = 4;  
        }  
        else if ( num >= 9500 ){   
            grade = 3;  
        }  
        else if ( num >= 7000 ){  
            grade = 2;  
        }  
        return grade;        
    }
    
    function _randomPromote() internal view returns (uint256) {

        uint256 num = _random_get_seed( nonce ) % 1000;
        
        return num;
    }

    function setMintPower( uint256 newpwrdist ) external onlyOwner {
        pwrdist = newpwrdist;
    }

    function setUpgradePower( uint256 newpwrupg ) external onlyOwner {
        pwrupg = newpwrupg;
    }
    
    function setRelayPower( uint256 newpwr ) external onlyOwner {
        pwrrelay = newpwr;
    }
    
    function setRate(uint256 burn_rate, uint256 reward_rate) external onlyOwner
    {
        _burnRate = burn_rate;
        _rewardRate = reward_rate;
    }    
    
    function setArtd( address artd ) external onlyOwner {
        _artd = artd;
    }
    
    function setAnft( address anft ) external onlyOwner {
        _anft = anft;
    }

    function setApwr( address apwr ) external onlyOwner {
        _apwr = apwr;
    }

    function setArtt( address artt ) external onlyOwner {
        _artt = artt;
    }
    
    function setFundPool( address fundpool ) external onlyOwner {
       _fundpool = fundpool;
    }
    
    function seteraNFT( uint256 era ) external onlyOwner {
        _eraNFT = era;
    }
    
    function setvalidchecker( address checker ) external onlyOwner {
        _validchecker = checker;
    }
    
    function setstoreStart( uint256 starttime ) external onlyOwner {
        _storestartTime = starttime;
    }

    function setclaimDays( uint256 claimdays ) external onlyOwner {
        _claimdays = claimdays;
    }

    function setranseed( address ranseed ) external onlyOwner {
        _randseed = ranseed;
    }

    function setfactoryLimit( uint256 limitamount ) external onlyOwner {
        _factorylimit = limitamount;
    }

    function getfactoryCount() public view returns( uint256 ) {
       return _factorycount;
    }
    
    function getMeta_current( uint256 nftId ) internal view returns (uint256, uint256, uint256, uint256, uint256, uint256, address) 
    {
       return ( _era[nftId], _grade[nftId], _promote[nftId], _artdamount[nftId], _apwramount[nftId], _skill[nftId], _factory[nftId]); 
    }

    function getMeta( uint256 nftId ) public view returns (uint256, uint256, uint256, uint256, uint256, uint256, address) 
    {    
        if( _grade[nftId] != 0 ) 
        {
            return getMeta_current(nftId);
        }
        else{
            for (uint i = 0; i < _allfactorylist.length; i++) {
               NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
               (uint256 t1,,,,,,) = _nftfactoryx.getMeta( nftId );  
               if( t1 != 0){
                    return _nftfactoryx.getMeta( nftId );  
                }
            }
            return (0, 0, 0, 0, 0, 0, address(0) );
        } 
    }  


    function getMeta_current2( uint256 nftId ) internal view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) 
    {
          return ( _era[nftId], _grade[nftId], _promote[nftId], _artdamount[nftId], _apwramount[nftId], _skill[nftId], _lock[nftId] );
    }
    
    function getMeta2( uint256 nftId ) public view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) 
    {    
        if( _grade[nftId] != 0 ) 
        {
            return getMeta_current2(nftId);
        }
        else{
            for (uint i = 0; i < _allfactorylist.length; i++) {
               NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
               (uint256 t1,,,,,,) = _nftfactoryx.getMeta2( nftId );  
               if( t1 != 0){
                    return _nftfactoryx.getMeta2( nftId );  
                }
            }
            return (0, 0, 0, 0, 0, 0, 0 );
        } 
    }  
    
    function setlinkFactory( address[] calldata _factorylist ) external onlyOwner {
        _allfactorylist = _factorylist;
    }

    function fusion( uint256 nftId1, uint256 nftId2 ) external
    {
        address owner1 = NFTownerOf(nftId1);
        address owner2 = NFTownerOf(nftId2);
        require(msg.sender == owner1 && msg.sender == owner2);
        require(nftId1 != nftId2, "TWO NFTs ID can not same");
        uint256 sum = 0;
        owner1 = address(0);
        owner2 = address(0);

        uint256 pm1 = 0;
        uint256 pm2 = 0;
        uint256 grade1 = 0;
        uint256 grade2 = 0;

        pm1 = this.getPormote( nftId1 );
        pm2 = this.getPormote( nftId2 );
        grade1 = this.getGrade( nftId1 );
        grade2 = this.getGrade( nftId2 );
        
        owner1 = this.getFactory(nftId1);
        owner2 = this.getFactory(nftId2);
        require(owner1 != address(0), "NFT ID1 not found");
        require(owner2 != address(0), "NFT ID2 not found");

        require(this.getLock(nftId1) < now && this.getLock(nftId2) < now, "Wait for locktime");
        
        if( pm1 > 0 && pm2 > 0 && grade1 >0 && grade2 >0 )
        {
             sum = pm1 + pm2;
             if( sum > max_promote )
                     sum = max_promote;
                     
             AnftToken _anftx =  AnftToken(_anft);         
             if( grade2 > grade1 )
             {
                 updatePromote(owner2,nftId2,owner1,nftId1,sum);
                 _anftx.safeTransferFrom( msg.sender, _burnPool, nftId1 );
            
                 emit MetaUpdated(owner2,nftId2,sum);
                 emit BurnNFT(owner1,nftId1);
             }
             else{
                 updatePromote(owner1,nftId1,owner2,nftId2,sum);     
                 _anftx.safeTransferFrom( msg.sender, _burnPool, nftId2 );
                 emit MetaUpdated(owner1,nftId1,sum);
                 emit BurnNFT(owner2,nftId2);
             }
             emit Fusion( nftId1, nftId2, sum);
        }
    }
    
    
    function updatePromote( address factory1, uint256 nftId1, address factory2, uint256 nftId2, uint256 value )
     private
    {
                if( nftId1 !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory1);
                    f1.renewPromote( nftId1, value );
                }
                if( nftId2 !=0 )
                {
                    NFTFactory f2 =  NFTFactory(factory2);
                    f2.renewPromote(  nftId2, 0 );
                }
    }
    
    function renewPromote( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _promote[nftId] = value;
    }

    function updateAmount( address factory1, uint256 nftId1, uint256 value )
     private
    {
                if( nftId1 !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory1);
                    f1.renewAmount( nftId1, value );
                }
    }
    
    function renewAmount( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _artdamount[nftId] = value;
    }


    function updateLocktime( address factory, uint256 nftId, uint256 value )
     private
    {
                if( nftId !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory);
                    f1.renewLocktime( nftId, value );
                }
    }
    
    function renewLocktime( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _lock[nftId] = value;
    }


    function updateAPWR( address factory1, uint256 nftId1, uint256 value )
     private
    {
                if( nftId1 !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory1);
                    f1.renewAPWR( nftId1, value );
                }
    }
    
    function renewAPWR( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _apwramount[nftId] = value;
    }

    function updateERA( address factory1, uint256 nftId1, uint256 value )
     private
    {
                if( nftId1 !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory1);
                    f1.renewERA( nftId1, value );
                }
    }
    
    function renewERA( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _era[nftId] = value;
    }
    
    function updateSKILL( address factory1, uint256 nftId1, uint256 value )
     private
    {
                if( nftId1 !=0 )
                {
                    NFTFactory f1 =  NFTFactory(factory1);
                    f1.renewSKILL( nftId1, value );
                }
    }
    
    function renewSKILL( uint256 nftId, uint256 value ) external
    {
        validfactory _checker = validfactory(_validchecker);
        require( _checker.isValidfactory(msg.sender)==true );
        _skill[nftId] = value;
    }

    function lockNft( uint256 nftId ) external 
    {
        uint256 locktime = 0;
        address factory = NFTownerOf(nftId);
        require(msg.sender == factory);

        factory = this.getFactory(nftId);
        locktime = now + 14 days;
        updateLocktime( factory, nftId, locktime );

        emit LockTime( nftId, locktime );
    }
    
    
    function isAllowChallenge(uint256 nftId) external view returns (bool)
    {
        if( _allowchallenge[nftId]==0 )
           return false;
        return true;
    }
    
    function challengeSwitch( uint256 nftId, uint key) external 
    {
        address owner = NFTownerOf(nftId);
        require(msg.sender == owner);
        _allowchallenge[nftId] = key;
        if( key != 0 )
            emit SwChallenge( nftId, true );
        else
            emit SwChallenge( nftId, false );
    }

    function randomChallenge( uint256 mynftId, uint256 targetId ) internal view returns (bool) 
    {
        uint256 num = _random_get_seed( mynftId +  targetId + nonce ) % 10000;
        if ( num >= 5000 )
        { 
            if( _allowchallenge[mynftId] >= _allowchallenge[targetId])
                return true;  
            return false;
        }
        else
        {
            if( _allowchallenge[mynftId] < _allowchallenge[targetId])
                return true;  
            return false;
        }
    }

    function challenge( uint256 mynftId, uint256 targetId) public
    {
        address owner1 = NFTownerOf(mynftId);
        require(msg.sender == owner1);
        address owner2 = NFTownerOf(targetId);
        
        require(owner1 != owner2, "NFTID owner can not same");
        require(mynftId != targetId, "TWO NFTs ID can not same");
        require(owner1 != address(0) && owner2 != address(0));
        require(_allowchallenge[targetId] != 0, "TargetId must turn-on switch");
        
        uint256 myStore = this.currentStore(mynftId);
        uint256 targetStore = this.currentStore(targetId);
        uint256 left = 0;
        uint256 diff_amount = 0;
        uint256 final_amount = 0;
        uint256 locktime1 = 0;
        uint256 locktime2 = 0;       
        
        owner1 = this.getFactory(mynftId);
        owner2 = this.getFactory(targetId);
        require(owner1 != address(0), "mynftId not found");
        require(owner2 != address(0), "targetId not found");
    
        locktime1 = this.getLock(mynftId);
        locktime2 = this.getLock(targetId);
        require(locktime1 < now && locktime2 < now, "Wait for locktime");

        if( randomChallenge( mynftId, targetId ) == false)
        {
            left = myStore.mul(95).div(100);
            diff_amount = myStore - left;
            final_amount = diff_amount + targetStore; 
        
            updateAmount(owner1, mynftId, left);
            updateAmount(owner2, targetId, final_amount);
            emit Challenge(mynftId, false, diff_amount, left);
            emit Challenge(targetId, true, diff_amount, final_amount);
        }
        else
        {
            left = targetStore.mul(95).div(100);
            diff_amount = targetStore - left;
            final_amount = diff_amount + myStore; 
            
            updateAmount(owner1, mynftId, final_amount);
            updateAmount(owner2, targetId, left);
            emit Challenge(mynftId, true, diff_amount, final_amount);
            emit Challenge(targetId, false, diff_amount, left);
        }
        nonce = nonce + 1;
    }



    function getSkill( uint256 nftId ) external view returns (uint256)
    {
        uint256 currentskill = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        
        if( _grade[nftId] != 0 ) 
        {
            (,,,,,currentskill,) = getMeta_current(nftId);
            return currentskill;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
           NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
           if( aa == 0 )
           {
               (,s1,,,,currentskill,) = _nftfactoryx.getMeta( nftId );  
               if( s1 != 0){
                    aa = s1;
               }
           }
        }
 
        return currentskill;
    }

    function getEra( uint256 nftId ) external view returns (uint256)
    {
        uint256 era = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        
        if( _grade[nftId] != 0 ) 
        {
            (era,,,,,,) = getMeta_current(nftId);
            return era;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
                   NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
                   if( aa == 0 )
                   {
                       (era,s1,,,,,) = _nftfactoryx.getMeta( nftId );  
                       if( s1 != 0){
                            aa = s1;
                       }
                   }
        }

        return era;   
    }

    function getGrade( uint256 nftId ) external view returns (uint256)
    {
        uint256 grade = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        if( _grade[nftId] != 0 ) 
        {
            (,grade,,,,,) = getMeta_current(nftId);
            return grade;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
                   NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
                   if( aa == 0 )
                   {
                       (,grade,,,,,) = _nftfactoryx.getMeta( nftId );  
                       if( s1 != 0){
                            aa = grade;
                       }
                   }
        }
           
        return grade;   
    }

    function getPormote( uint256 nftId ) external view returns (uint256)
    {
        uint256 promote = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        if( _grade[nftId] != 0 ) 
        {
            (,,promote,,,,) = getMeta_current(nftId);
            return promote;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
                   NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
                   if( aa == 0 )
                   {
                       (,s1,promote,,,,) = _nftfactoryx.getMeta( nftId );  
                       if( s1 != 0){
                            aa = s1;
                       }
                   }
        }

        return promote;   
    }
    
    function getFactory( uint256 nftId ) external view returns (address)
    {
        address factory = address(0);
        uint256 aa = 0;
        uint256 s1 = 0;
        if( _grade[nftId] != 0 ) 
        {
            (,,,,,,factory) = getMeta_current(nftId);
            return factory;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
                   NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
                   if( aa == 0 )
                   {
                       (,s1,,,,,factory) = _nftfactoryx.getMeta( nftId );  
                       if( s1 != 0){
                            aa = s1;
                       }
                   }
        }
        
        return factory;   
    }    

    function getPower( uint256 nftId ) external view returns (uint256)
    {
        uint256 currentpower = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        
        if( _grade[nftId] != 0 ) 
        {
            (,,,,currentpower,,) = getMeta_current(nftId);
            return currentpower;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
           NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
           if( aa == 0 )
           {
               (,s1,,,currentpower,,) = _nftfactoryx.getMeta( nftId );  
               if( s1 != 0){
                    aa = s1;
               }
           }
        }
        return currentpower;
    }

    function getAuthor( uint256 nftId ) external view returns (address)
    {
        address factory = address(0);
        factory = this.getFactory(nftId);
        if( factory == address(this) )
        {
             return _author[nftId];
        }
        else{
            NFTFactory f =  NFTFactory(factory);
            return f.getAuthor(nftId);
        }
    }

    function getLock( uint256 nftId ) external view returns (uint256)
    {
        address factory = address(0);
        factory = this.getFactory(nftId);
        if( factory == address(this) )
        {
             return _lock[nftId];
        }
        else{
            NFTFactory f =  NFTFactory(factory);
            return f.getLock(nftId);
        }
    }
    
    function getcreatedTime( uint256 nftId ) external view returns (uint256)
    {
        address factory = address(0);
        factory = this.getFactory(nftId);
        if( factory == address(this) )
        {
             return _createdTime[nftId];
        }
        else{
            NFTFactory f =  NFTFactory(factory);
            return f.getcreatedTime(nftId);
        }        
    }
    
    function AddSkill( uint256 ARTTamount, uint256 nftId )
        public
        checkstoreStart
    {
        address factory = address(0);
        uint256 currentskill = 0;
        uint256 exskill = 0;
        uint256 locktime = 0;
        
        currentskill = this.getSkill( nftId );
        factory = this.getFactory(nftId);
        require(factory != address(0), "NFT ID not found");
        require(ARTTamount > 0, "Cannot burn 0 ARTT");
        
        locktime = this.getLock(nftId);
        require(locktime < now, "Wait for locktime");
        
        ArttToken _arttx =  ArttToken(_artt);
        _arttx.transferFrom(msg.sender, address(_burnPool), ARTTamount);
        
        exskill = ARTTamount/uint256(1e18);
        currentskill = currentskill.add(exskill);
        
        updateSKILL(factory, nftId, currentskill);
        
        emit ADDSKILL(nftId, msg.sender, ARTTamount);
    }



    function raisePower( uint256 APWRamount, uint256 nftId )
        public
        checkstoreStart
    {
        address factory = address(0);
        uint256 currentpower = 0;
        uint256 locktime = 0;
        
        currentpower = this.getPower( nftId );
        factory = this.getFactory(nftId);
        require(factory != address(0), "NFT ID not found");
        require(APWRamount > 0, "Cannot burn 0 APWR");

        locktime = this.getLock(nftId);
        require(locktime < now, "Wait for locktime");
        
        ApwrToken _apwrx =  ApwrToken(_apwr);
        _apwrx.burnFrom(msg.sender, APWRamount);
        
        currentpower = currentpower.add(APWRamount);
        updateAPWR(factory, nftId, currentpower);
        
        emit RaisePower(nftId, msg.sender, APWRamount);
    }
    

    function currentStore( uint256 nftId ) external view returns (uint256)
    {
        uint256 currentamount = 0;
        uint256 aa = 0;
        uint256 s1 = 0;
        if( _grade[nftId] != 0 ) 
        {
            (,,,currentamount,,,) = getMeta_current(nftId);
            return currentamount;
        }
        for (uint i = 0; i < _allfactorylist.length; i++) {
           NFTFactory _nftfactoryx =  NFTFactory(_allfactorylist[i]);
           if( aa == 0 )
           {
               (,s1,,currentamount,,,) = _nftfactoryx.getMeta( nftId );  
               if( s1 != 0){
                    aa = s1;
               }
           }
        }

        return currentamount;
    }


    function store( uint256 amount, uint256 nftId )
        public
        checkstoreStart
    {
        uint256 locktime = 0;
        address factory = address(0);
        uint256 currentamount = 0;
        currentamount = this.currentStore( nftId );
        factory = this.getFactory(nftId);
        require(factory != address(0), "NFT ID not found");
        require(amount > 0, "Cannot store 0");
        
        locktime = this.getLock(nftId);
        require(locktime < now, "Wait for locktime");
        
        /**
         * @dev Check the owner of the NFT ID
         */
        // address owner = NFTownerOf(nftId);
        // require(msg.sender == owner);

        ArtdToken _artdx =  ArtdToken(_artd);
        _artdx.transferFrom(msg.sender, address(_fundpool), amount);
        
        uint256 left_amount = calcSendamount(amount);
        currentamount = currentamount.add(left_amount);
        
        updateAmount(factory, nftId, currentamount);
        _lastStoreTime[nftId] = now;
         
        emit Store(nftId, msg.sender, left_amount);
    }


    function withdraw( uint256 amount, uint256 nftId )
        public
        checkstoreStart
    {
        uint256 locktime = 0;
        address factory = address(0);
        uint256 currentamount = 0;
        currentamount = this.currentStore( nftId );
        
        factory = this.getFactory(nftId);
        require(factory != address(0), "NFT ID not found");
        address owner = NFTownerOf(nftId);
        require(msg.sender == owner);
        require(amount > 0 && currentamount >= amount, "withdraw amount error");

        locktime = this.getLock(nftId);
        require(locktime < now, "Wait for locktime");
        
        currentamount = currentamount.sub(amount);
        updateAmount(factory, nftId, currentamount);
        
        ArtdToken _artdx =  ArtdToken(_artd);
        _artdx.transferFrom(address(_fundpool), msg.sender, amount);

        emit Withdraw(nftId, msg.sender, amount);
    }

    /**
     * @dev Gets the owner of the NFT ID
     * @param nftId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given NFT ID
     */
    function NFTownerOf(uint256 nftId) private returns (address) {
        AnftToken _anftx =  AnftToken(_anft);
        address owner = _anftx.ownerOf(nftId);
        require(owner != address(0));
        return owner;
    }


    function addresstoBytes(address x) internal pure returns (bytes memory b) 
    {
         b = new bytes(32);
         for (uint i = 0; i < 32; i++)
            b[i] = byte(uint8(uint(x) / (2**(8*(31 - i)))));
    }
    
    function toBytesEth(uint256 x) internal pure returns (bytes memory b) {
        b = new bytes(32);
        for (uint i = 0; i < 32; i++) {
            b[i] = byte(uint8(x / (2**(8*(31 - i))))); 
        }
    }

    function bytesConcat_uint256( bytes memory source, uint256 _a ) internal pure returns (bytes memory) {
             bytes memory _xbyte;
             uint256 k = 0;
             if( source.length == 0 ){
                  _xbyte = toBytesEth(_a);
                  return _xbyte;
             }
            _xbyte = toBytesEth(_a);
            bytes memory ext_source = new bytes( source.length + _xbyte.length );
            for (uint256 i = 0; i < source.length; i++) ext_source[k++] = source[i];
            for (uint256 j = 0; j < _xbyte.length; j++) ext_source[k++] = _xbyte[j];
            return ext_source;
    }

    function bytesConcat_address( bytes memory source, address _a ) internal pure returns (bytes memory) {
             bytes memory _xbyte;
             uint256 k = 0;
             if( source.length == 0 ){
                  _xbyte = addresstoBytes(_a);
                  return _xbyte;
             }
            _xbyte = addresstoBytes(_a);
            bytes memory ext_source = new bytes( source.length + _xbyte.length );
            for (uint256 i = 0; i < source.length; i++) ext_source[k++] = source[i];
            for (uint256 j = 0; j < _xbyte.length; j++) ext_source[k++] = _xbyte[j];
            return ext_source;
    }

    function claim_process( uint32 random_grade, uint256 pwr ) internal returns (uint256) {
        
        nonce = nonce + 1;
        uint256 id = 0; 
        
        uint32 grade = random_grade;
        uint256 promote =  _randomPromote();
        uint256 artdAmount = 1000000000000000000;
        uint256 apwrAmount = 0;
        uint256 skill = 0;
        uint256 createdTime = now;
        address factory = address(this);
        address author = msg.sender;

        _data = new bytes(0);
        if( grade >= 3 )
        {
            artdAmount = 0;
        }

        AnftToken _anftx =  AnftToken(_anft);
        id = _anftx.totalSupply();
        id = id + 1;
        _anftx.safeMint(msg.sender, id, _data);
        
        _era[id] = _eraNFT;
        _grade[id] = grade;
        _promote[id] = promote;
        _artdamount[id] = artdAmount;
        _apwramount[id] = apwrAmount;
        _skill[id] = skill;        
        _factory[id] = factory;
        _author[id] = author;
        _createdTime[id] = createdTime;
        _lock[id] = 0;
     
        emit TokenParameter(id, _eraNFT, grade, promote, artdAmount, apwrAmount, skill, factory, author, createdTime );
        if ( grade == 6 )
        { 
            emit Grade6( msg.sender, block.timestamp, block.number); 
        }
        else if ( grade == 5 )
        { 
            emit Grade5( msg.sender, block.timestamp, block.number); 
        }   
        else if ( grade == 4 )
        { 
            emit Grade4( msg.sender, block.timestamp, block.number); 
        }  
        else if ( grade == 3 )
        { 
            emit Grade3( msg.sender, block.timestamp, block.number); 
        }          
        else if ( grade == 2 )
        { 
            emit Grade2( msg.sender, block.timestamp, block.number); 
        }   
        else if ( grade == 1 )
        { 
            emit Grade1( msg.sender, block.timestamp, block.number); 
        }   
        
        
        ApwrToken _apwrx = ApwrToken(_apwr);
        _apwrx.mint (msg.sender, pwr );
        
        if( artdAmount > 0 )
        {
            ArtdToken _artdx =  ArtdToken(_artd);
            _artdx.mint( address(_fundpool) , artdAmount ); 
        }     
        
        _factorycount = _factorycount + 1;
        if( _factorycount >= _factorylimit )
        {
             _claimdays = 0;    // To stop the NFT claim  
        }
        
        return id;
    }

    function isContract(address _addr) internal view returns (bool)
    {
        uint32 size;
          assembly {
            size := extcodesize(_addr)
          }
          return (size > 0);
    }

    function claim() public hasNotClaimed canClaim {
        require( isContract(msg.sender) == false, "Not allow contract to call");
        uint32 random  = _randomGrade(0);
        claim_process( random, pwrdist );
        
        // Set boolean for hasClaimed
        hasClaimed[msg.sender] = true;
    } 

    
    function claimbynum( uint number ) public hasNotClaimed canClaim {
        require( isContract(msg.sender) == false, "Not allow contract to call");
        uint32 random  = _randomGrade(number);
        claim_process( random, pwrdist );
        // Set boolean for hasClaimed
        hasClaimed[msg.sender] = true;
    } 

    function claimbyrelay() public 
    {
        require( msg.sender == _relay, "Invalid caller");
        uint32 random  = _randomGradeX();
        claim_process( random, pwrrelay );
    }

    function randomaddress( uint256 NftId ) internal view returns (address) 
    {
        address randaddr = address(uint160(uint(keccak256(abi.encodePacked(nonce+NftId, blockhash(block.number))))));
        return randaddr;
    }
    
    function Isrenewable(  uint256 NftId ) public view returns(bool)
    {
        return ( this.getEra( NftId ) < _eraNFT );
    }
    
    function renewNFT(  uint256 NftId ) external canClaim
    {
        require( NFTownerOf( NftId ) == msg.sender, "NftId owner fail");
        
        AnftToken _anftx =  AnftToken(_anft);
        if( this.getEra( NftId ) < _eraNFT )
        {
            _anftx.safeTransferFrom( msg.sender, _burnPool, NftId );
            
            uint32 random  = _randomGrade(0);
            uint256 newid = claim_process( random, pwrupg );
            
            emit reNewNft( msg.sender, NftId, newid);
        }

    }
    
    function calcSendamount(uint256 value) internal view returns (uint256)  
    {
        uint256 sendAmount = value;
        uint256 burnFee = (value.mul(_burnRate)).div(_rateBase);
        if (burnFee > 0) {
           sendAmount = sendAmount.sub(burnFee);    
        }
        uint256 rewardFee = (value.mul(_rewardRate)).div(_rateBase);
        if (rewardFee > 0) {
           sendAmount = sendAmount.sub(rewardFee);    
        }
        return sendAmount;
    }
    
            
    function setRelay( address relay ) external onlyOwner
    {
        _relay = relay;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"Id","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ADDSKILL","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftid","type":"uint256"}],"name":"BurnNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"winlose","type":"bool"},{"indexed":false,"internalType":"uint256","name":"diffamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"finalamount","type":"uint256"}],"name":"Challenge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"DataParameter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftId2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Fusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade3","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade4","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade5","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"Grade6","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"LockTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"MetaUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"Id","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RaisePower","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"Id","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Store","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"onoff","type":"bool"}],"name":"SwChallenge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"resId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"era","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"grade","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"promote","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"artdamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"apwramount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"skill","type":"uint256"},{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"author","type":"address"},{"indexed":false,"internalType":"uint256","name":"createdTime","type":"uint256"}],"name":"TokenParameter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"Id","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newId","type":"uint256"}],"name":"reNewNft","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"ARTTamount","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"AddSkill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"NftId","type":"uint256"}],"name":"Isrenewable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_allfactorylist","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_anft","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_apwr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_artd","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_artt","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_burnPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_burnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_claimdays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_eraNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_factorycount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_factorylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_fundpool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lastStoreTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rateBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_relay","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_storestartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_validchecker","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"mynftId","type":"uint256"},{"internalType":"uint256","name":"targetId","type":"uint256"}],"name":"challenge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"key","type":"uint256"}],"name":"challengeSwitch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"claimbynum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimbyrelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"currentStore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId1","type":"uint256"},{"internalType":"uint256","name":"nftId2","type":"uint256"}],"name":"fusion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getAuthor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getGrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getMeta","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getMeta2","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getPormote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getSkill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"getcreatedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getfactoryCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"isAllowChallenge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"lockNft","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"APWRamount","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"raisePower","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewAPWR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewERA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewLocktime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"NftId","type":"uint256"}],"name":"renewNFT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewPromote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"renewSKILL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"anft","type":"address"}],"name":"setAnft","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"apwr","type":"address"}],"name":"setApwr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"artd","type":"address"}],"name":"setArtd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"artt","type":"address"}],"name":"setArtt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"fundpool","type":"address"}],"name":"setFundPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newpwrdist","type":"uint256"}],"name":"setMintPower","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"burn_rate","type":"uint256"},{"internalType":"uint256","name":"reward_rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"relay","type":"address"}],"name":"setRelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newpwr","type":"uint256"}],"name":"setRelayPower","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newpwrupg","type":"uint256"}],"name":"setUpgradePower","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"claimdays","type":"uint256"}],"name":"setclaimDays","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"era","type":"uint256"}],"name":"seteraNFT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"limitamount","type":"uint256"}],"name":"setfactoryLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_factorylist","type":"address[]"}],"name":"setlinkFactory","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ranseed","type":"address"}],"name":"setranseed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"starttime","type":"uint256"}],"name":"setstoreStart","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"checker","type":"address"}],"name":"setvalidchecker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"store","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

600c80546001600160a01b031990811673a23f8462d90dbc60a06b9226206bfacdead2a26f17909155600d805482167399a7e1188ce9a0b7514d084878dfb8a405d8529f179055600e8054821673b60f072494c7f1b5a8ba46bc735c71a83d940d1a179055600f805482167377df79539083dcd4a8898dba296d899afef200671790556010805482167337c8fc383e037f92f501e5884b8b5e37e3f5170e1790556011805482167358f62d9b184be5d7ee6881854dd16898afe0cf901790556012805482167375a7c0f3c7e59d0aa323cc8832eaf2729fe2127c17905560138054821673e9089848c9873b6cccf72d23446eaa2851f77e6117905560148054909116736666666666666666666666666666666666666666179055600260155566071afd498d00006016556611c37937e08000601755660e35fa931a00006018556301e133804201601a556000601b81905561270f601c5560fa601d819055601e55624f1a00601f5560208190556103e8602155608081815260a060405290508051620001949160229160209091019062000238565b50348015620001a257600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a342600b55601980546001810182556000919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b03191630179055620002dd565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027b57805160ff1916838001178555620002ab565b82800160010185558215620002ab579182015b82811115620002ab5782518255916020019190600101906200028e565b50620002b9929150620002bd565b5090565b620002da91905b80821115620002b95760008155600101620002c4565b90565b61527a80620002ed6000396000f3fe608060405234801561001057600080fd5b50600436106104335760003560e01c80636ed28ed011610236578063bd880fae1161013b578063df3e2bb8116100c3578063f77ad2c111610087578063f77ad2c114610c00578063f854f48214610c1d578063f97f390a14610c3a578063f989adfe14610c5d578063fa26b9af14610c6557610433565b8063df3e2bb814610b87578063e1e0485e14610b8f578063eadb511814610bac578063f046ed6514610bd2578063f2fde38b14610bda57610433565b8063d37967381161010a578063d379673814610b17578063d4310dbf14610b1f578063d4e918ec14610b27578063d68f4dd114610b4d578063db2b71b214610b6a57610433565b8063bd880fae14610a9a578063c100946914610ab7578063c805f68b14610ad4578063d0259e6914610afa57610433565b80638f32d59b116101be578063a2e20c821161018d578063a2e20c82146109a1578063a7fb1693146109be578063ad9e8650146109e1578063b22bbb5f14610a51578063b865759714610a7457610433565b80638f32d59b146109575780638ffc177c1461095f57806394fb6d58146109675780639e2b84881461098457610433565b8063775e137711610205578063775e1377146108c457806379138df1146108cc5780637c3c3736146108d45780638da5cb5b146109295780638e4157a61461093157610433565b80636ed28ed014610856578063715018a61461087957806373b2e80e1461088157806376bd8df4146108a757610433565b80633da0fe191161033c57806355a204f9116102c457806365a8a0371161029357806365a8a037146107bf57806365e874d2146107e257806368fd25cd146108055780636ddee2b91461080d5780636ebdff2c1461083057610433565b806355a204f914610760578063578b40a21461077d5780635c94b9dd1461079a578063637dba06146107b757610433565b806346df2ccb1161030b57806346df2ccb146106d55780634ad82965146106f85780634dcbc739146107155780634e71d92d14610732578063545893051461073a57610433565b80633da0fe19146106415780633e53354014610664578063441a3e7014610695578063443f8992146106b857610433565b806328d2bc91116103bf5780632e6edf151161038e5780632e6edf151461057b5780632eedcb1814610583578063336bb238146105a057806336dac2cc146105bd5780633786dcee1461061b57610433565b806328d2bc9114610540578063290ab922146105485780632a3d1775146105505780632e4148901461055857610433565b8063136328021161040657806313632802146104d35780631a667e23146104f65780631fcf24ba14610513578063219d810c1461051b57806324d28bd51461053857610433565b8063017fe8091461043857806306b5a2dd146104675780630c2574541461048c5780630d36a170146104b0575b600080fd5b6104556004803603602081101561044e57600080fd5b5035610c6d565b60408051918252519081900360200190f35b61048a6004803603604081101561047d57600080fd5b5080359060200135610d77565b005b610494610e10565b604080516001600160a01b039092168252519081900360200190f35b61048a600480360360408110156104c657600080fd5b5080359060200135610e1f565b61048a600480360360408110156104e957600080fd5b5080359060200135610eb8565b6104556004803603602081101561050c57600080fd5b5035611202565b610455611214565b6104556004803603602081101561053157600080fd5b503561121a565b610455611318565b61049461131f565b61049461132e565b61049461133d565b61048a6004803603604081101561056e57600080fd5b508035906020013561134c565b61048a6119d1565b6104556004803603602081101561059957600080fd5b5035611a40565b61048a600480360360208110156105b657600080fd5b5035611b3c565b6105da600480360360208110156105d357600080fd5b5035611b52565b604080519788526020880196909652868601949094526060860192909252608085015260a08401526001600160a01b031660c0830152519081900360e00190f35b61048a6004803603602081101561063157600080fd5b50356001600160a01b0316611d13565b61048a6004803603604081101561065757600080fd5b5080359060200135611d46565b6106816004803603602081101561067a57600080fd5b50356120b8565b604080519115158252519081900360200190f35b61048a600480360360408110156106ab57600080fd5b50803590602001356120db565b610455600480360360208110156106ce57600080fd5b5035612476565b61048a600480360360408110156106eb57600080fd5b5080359060200135612574565b61048a6004803603602081101561070e57600080fd5b5035612590565b61048a6004803603602081101561072b57600080fd5b5035612759565b61048a612841565b61048a6004803603602081101561075057600080fd5b50356001600160a01b0316612907565b6104946004803603602081101561077657600080fd5b503561293a565b6104556004803603602081101561079357600080fd5b5035612a37565b61048a600480360360208110156107b057600080fd5b5035612b4e565b610494612b64565b61048a600480360360408110156107d557600080fd5b5080359060200135612b73565b61048a600480360360408110156107f857600080fd5b508035906020013561333e565b6104556133f8565b61048a6004803603604081101561082357600080fd5b50803590602001356133fe565b61048a6004803603602081101561084657600080fd5b50356001600160a01b0316613497565b61048a6004803603604081101561086c57600080fd5b50803590602001356134ca565b61048a613850565b6106816004803603602081101561089757600080fd5b50356001600160a01b03166138ab565b61048a600480360360208110156108bd57600080fd5b50356138c0565b6104556138d6565b6104556138dc565b6108f1600480360360208110156108ea57600080fd5b50356138e2565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610494613a06565b61048a6004803603602081101561094757600080fd5b50356001600160a01b0316613a15565b610681613a48565b610494613a59565b6104946004803603602081101561097d57600080fd5b5035613a68565b6104946004803603602081101561099a57600080fd5b5035613a8f565b61048a600480360360208110156109b757600080fd5b5035613b79565b61048a600480360360408110156109d457600080fd5b5080359060200135613b8f565b61048a600480360360208110156109f757600080fd5b810190602081018135640100000000811115610a1257600080fd5b820183602082011115610a2457600080fd5b80359060200191846020830284011164010000000083111715610a4657600080fd5b509092509050613c28565b61048a60048036036040811015610a6757600080fd5b5080359060200135613c45565b61048a60048036036020811015610a8a57600080fd5b50356001600160a01b0316613cde565b61045560048036036020811015610ab057600080fd5b5035613d11565b61068160048036036020811015610acd57600080fd5b5035613e0e565b61048a60048036036020811015610aea57600080fd5b50356001600160a01b0316613e8a565b61048a60048036036020811015610b1057600080fd5b5035613ebd565b610455613ed3565b610455613ed9565b61048a60048036036020811015610b3d57600080fd5b50356001600160a01b0316613edf565b61045560048036036020811015610b6357600080fd5b5035613f12565b61048a60048036036020811015610b8057600080fd5b5035613ff3565b610455614009565b61045560048036036020811015610ba557600080fd5b503561400f565b61048a60048036036020811015610bc257600080fd5b50356001600160a01b0316614104565b610494614137565b61048a60048036036020811015610bf057600080fd5b50356001600160a01b0316614146565b61048a60048036036020811015610c1657600080fd5b5035614163565b61048a60048036036020811015610c3357600080fd5b5035614229565b61048a60048036036040811015610c5057600080fd5b508035906020013561423f565b6104556142d8565b6104946142de565b60008181526002602052604081205481908190819015610ca257610c90856142ed565b50909850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110610cbe57fe5b6000918252602090912001546001600160a01b0316905083610d6257806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d60e0811015610d4857600080fd5b506020810151608090910151955092508215610d62578293505b50600101610ca5565b5091925050505b919050565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015610dc357600080fd5b505afa158015610dd7573d6000803e3d6000fd5b505050506040513d6020811015610ded57600080fd5b50511515600114610dfd57600080fd5b5060009182526003602052604090912055565b6010546001600160a01b031681565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b50511515600114610ea557600080fd5b506000918252600a602052604090912055565b601a544211610f00576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163017fe80960e01b815260048101839052905160009182918291309163017fe80991602480820192602092909190829003018186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d6020811015610f7057600080fd5b5051604080516355a204f960e01b815260048101879052905191935030916355a204f991602480820192602092909190829003018186803b158015610fb457600080fd5b505afa158015610fc8573d6000803e3d6000fd5b505050506040513d6020811015610fde57600080fd5b505192506001600160a01b038316611030576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b6000851161107a576040805162461bcd60e51b815260206004820152601260248201527121b0b73737ba10313ab93710181020a82ba960711b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b50519050428110611134576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600e546040805163079cc67960e41b81523360048201526024810188905290516001600160a01b039092169182916379cc679091604480830192600092919082900301818387803b15801561118857600080fd5b505af115801561119c573d6000803e3d6000fd5b505050506111b3868461434a90919063ffffffff16565b92506111c0848685614365565b6040805133815260208101889052815187927f76352b8c502f69d9eda573d79b49c4b025b913b52eb0c4454c19da1ac229059b928290030190a2505050505050565b60236020526000908152604090205481565b601f5481565b6000818152600260205260408120548190819081901561124f5761123d856142ed565b50929850610d72975050505050505050565b60005b601954811015610d6b5760006019828154811061126b57fe5b6000918252602090912001546001600160a01b031690508361130f57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d60e08110156112f557600080fd5b50602081015160409091015195509250821561130f578293505b50600101611252565b6020545b90565b6014546001600160a01b031681565b6013546001600160a01b031681565b6011546001600160a01b031681565b6000611357836143dc565b9050336001600160a01b0382161461136e57600080fd5b6000611379836143dc565b9050806001600160a01b0316826001600160a01b031614156113e2576040805162461bcd60e51b815260206004820152601860248201527f4e46544944206f776e65722063616e206e6f742073616d650000000000000000604482015290519081900360640190fd5b82841415611432576040805162461bcd60e51b815260206004820152601860248201527754574f204e4654732049442063616e206e6f742073616d6560401b604482015290519081900360640190fd5b6001600160a01b0382161580159061145257506001600160a01b03811615155b61145b57600080fd5b6000838152602460205260409020546114bb576040805162461bcd60e51b815260206004820152601c60248201527f5461726765744964206d757374207475726e2d6f6e2073776974636800000000604482015290519081900360640190fd5b6000306001600160a01b031663443f8992866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d602081101561152b57600080fd5b50516040805163221fc4c960e11b8152600481018790529051919250600091309163443f8992916024808301926020929190829003018186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d602081101561159b57600080fd5b5051604080516355a204f960e01b8152600481018990529051919250600091829182918291829130916355a204f9916024808301926020929190829003018186803b1580156115e957600080fd5b505afa1580156115fd573d6000803e3d6000fd5b505050506040513d602081101561161357600080fd5b5051604080516355a204f960e01b8152600481018d90529051919a5030916355a204f991602480820192602092909190829003018186803b15801561165757600080fd5b505afa15801561166b573d6000803e3d6000fd5b505050506040513d602081101561168157600080fd5b505197506001600160a01b0389166116d4576040805162461bcd60e51b81526020600482015260116024820152701b5e5b999d1259081b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b6001600160a01b038816611724576040805162461bcd60e51b81526020600482015260126024820152711d185c99d95d1259081b9bdd08199bdd5b9960721b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd18c6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b50516040805163d68f4dd160e01b8152600481018d90529051919350309163d68f4dd191602480820192602092909190829003018186803b1580156117d657600080fd5b505afa1580156117ea573d6000803e3d6000fd5b505050506040513d602081101561180057600080fd5b50519050428210801561181257504281105b611857576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b6118618b8b614475565b61191857611887606461187b89605f63ffffffff6144f216565b9063ffffffff61451916565b94508487039350858401925061189e898c8761453b565b6118a9888b8561453b565b604080518c8152600060208201528082018690526060810187905290516000805160206152268339815191529181900360800190a1604080518b8152600160208201528082018690526060810185905290516000805160206152268339815191529181900360800190a16119bb565b61192e606461187b88605f63ffffffff6144f216565b945084860393508684019250611945898c8561453b565b611950888b8761453b565b604080518c8152600160208201528082018690526060810185905290516000805160206152268339815191529181900360800190a1604080518b8152600060208201528082018690526060810187905290516000805160206152268339815191529181900360800190a15b5050601b80546001019055505050505050505050565b6013546001600160a01b03163314611a21576040805162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b0b63632b960911b604482015290519081900360640190fd5b6000611a2b614594565b60ff169050611a3c81601854614680565b5050565b60008181526002602052604081205481908190819015611a7557611a63856142ed565b50949850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110611a9157fe5b6000918252602090912001546001600160a01b0316905083611b3357806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611af157600080fd5b505afa158015611b05573d6000803e3d6000fd5b505050506040513d60e0811015611b1b57600080fd5b50805160209091015190955092508215611b33578293505b50600101611a78565b611b44613a48565b611b4d57600080fd5b602155565b60008060008060008060006002600089815260200190815260200160002054600014611b9457611b81886142ed565b9650965096509650965096509650611d08565b60005b601954811015611cf057600060198281548110611bb057fe5b600091825260208220015460408051630db6b0b360e21b8152600481018e905290516001600160a01b03909216935083916336dac2cc9160248082019260e092909190829003018186803b158015611c0757600080fd5b505afa158015611c1b573d6000803e3d6000fd5b505050506040513d60e0811015611c3157600080fd5b505190508015611ce657816001600160a01b03166336dac2cc8c6040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611c7f57600080fd5b505afa158015611c93573d6000803e3d6000fd5b505050506040513d60e0811015611ca957600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949f50929d50909b50995097509095509350611d0892505050565b5050600101611b97565b50600096508695508594508493508392508291508190505b919395979092949650565b611d1b613a48565b611d2457600080fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b601a544211611d8e576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b60408051635ec407d760e11b8152600481018390529051600091829182918291309163bd880fae916024808301926020929190829003018186803b158015611dd557600080fd5b505afa158015611de9573d6000803e3d6000fd5b505050506040513d6020811015611dff57600080fd5b5051604080516355a204f960e01b815260048101889052905191945030916355a204f991602480820192602092909190829003018186803b158015611e4357600080fd5b505afa158015611e57573d6000803e3d6000fd5b505050506040513d6020811015611e6d57600080fd5b505193506001600160a01b038416611ebf576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b60008611611f09576040805162461bcd60e51b815260206004820152601260248201527110d85b9b9bdd08189d5c9b880c081054951560721b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4d57600080fd5b505afa158015611f61573d6000803e3d6000fd5b505050506040513d6020811015611f7757600080fd5b50519050428110611fc3576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600f54601454604080516323b872dd60e01b81523360048201526001600160a01b039283166024820152604481018a90529051919092169182916323b872dd916064808201926020929091908290030181600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d602081101561204f57600080fd5b5050670de0b6b3a764000087049250612068848461434a565b9350612075858786614c8a565b6040805133815260208101899052815188927f31e765c7841d24537a2eb36d7e16e8a7ffec997096148894b11cc5ebc8d02ab6928290030190a250505050505050565b6000818152602460205260408120546120d357506000610d72565b506001919050565b601a544211612123576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163221fc4c960e11b815260048101839052905160009182918291309163443f899291602480820192602092909190829003018186803b15801561216957600080fd5b505afa15801561217d573d6000803e3d6000fd5b505050506040513d602081101561219357600080fd5b5051604080516355a204f960e01b815260048101879052905191925030916355a204f991602480820192602092909190829003018186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b505191506001600160a01b038216612253576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b600061225e856143dc565b9050336001600160a01b0382161461227557600080fd5b6000861180156122855750858210155b6122ce576040805162461bcd60e51b81526020600482015260156024820152743bb4ba34323930bb9030b6b7bab73a1032b93937b960591b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d602081101561233c57600080fd5b50519350428410612388576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b612398828763ffffffff614ce316565b91506123a583868461453b565b600c54601054604080516323b872dd60e01b81526001600160a01b039283166004820152336024820152604481018a90529051919092169182916323b872dd916064808201926020929091908290030181600087803b15801561240757600080fd5b505af115801561241b573d6000803e3d6000fd5b505050506040513d602081101561243157600080fd5b50506040805133815260208101899052815188927f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf928290030190a250505050505050565b600081815260026020526040812054819081908190156124ab57612499856142ed565b50919850610d72975050505050505050565b60005b601954811015610d6b576000601982815481106124c757fe5b6000918252602090912001546001600160a01b031690508361256b57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b15801561252757600080fd5b505afa15801561253b573d6000803e3d6000fd5b505050506040513d60e081101561255157600080fd5b50602081015160609091015195509250821561256b578293505b506001016124ae565b61257c613a48565b61258557600080fd5b601d91909155601e55565b42601f54600b540110156125a357600080fd5b336125ad826143dc565b6001600160a01b0316146125fb576040805162461bcd60e51b815260206004820152601060248201526f13999d1259081bdddb995c8819985a5b60821b604482015290519081900360640190fd5b600d54601554604080516305ddb96360e31b81526004810185905290516001600160a01b03909316923091632eedcb18916024808301926020929190829003018186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d602081101561267557600080fd5b50511015611a3c5760145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018590529051918316916342842e0e9160648082019260009290919082900301818387803b1580156126d857600080fd5b505af11580156126ec573d6000803e3d6000fd5b5050505060006126fc6000614cf8565b60ff169050600061270f82601754614680565b604080513381526020810187905280820183905290519192507ff278a19d2a176aed6fc826ab94a4c10959b5ae5105f9136db28ab55eb11430c5919081900360600190a150505050565b600080612765836143dc565b9050336001600160a01b0382161461277c57600080fd5b306001600160a01b03166355a204f9846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156127c057600080fd5b505afa1580156127d4573d6000803e3d6000fd5b505050506040513d60208110156127ea57600080fd5b505162127500420192509050612801818484614dd7565b604080518481526020810184905281517f3f8466e2ad20795e4cd60d27d38c966e1c15c493abd69990d484a46bf314698b929181900390910190a1505050565b3360009081526025602052604090205460ff161561285e57600080fd5b42601f54600b5401101561287157600080fd5b61287a33614e30565b156128cc576040805162461bcd60e51b815260206004820152601a60248201527f4e6f7420616c6c6f7720636f6e747261637420746f2063616c6c000000000000604482015290519081900360640190fd5b60006128d86000614cf8565b60ff1690506128e981601654614680565b5050336000908152602560205260409020805460ff19166001179055565b61290f613a48565b61291857600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120548190819081901561296e5761295d856142ed565b9950610d7298505050505050505050565b60005b601954811015610d6b5760006019828154811061298a57fe5b6000918252602090912001546001600160a01b0316905083612a2e57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156129ea57600080fd5b505afa1580156129fe573d6000803e3d6000fd5b505050506040513d60e0811015612a1457600080fd5b50602081015160c090910151955092508215612a2e578293505b50600101612971565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b505190506001600160a01b038116301415612acf575050600081815260096020526040902054610d72565b6000819050806001600160a01b031663578b40a2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b505afa158015612b2c573d6000803e3d6000fd5b505050506040513d6020811015612b4257600080fd5b50519250610d72915050565b612b56613a48565b612b5f57600080fd5b601855565b600e546001600160a01b031681565b6000612b7e836143dc565b90506000612b8b836143dc565b9050336001600160a01b038316148015612bad5750336001600160a01b038216145b612bb657600080fd5b82841415612c06576040805162461bcd60e51b815260206004820152601860248201527754574f204e4654732049442063616e206e6f742073616d6560401b604482015290519081900360640190fd5b505060408051630867604360e21b8152600481018490529051600091829182918291829182918291309163219d810c91602480820192602092909190829003018186803b158015612c5657600080fd5b505afa158015612c6a573d6000803e3d6000fd5b505050506040513d6020811015612c8057600080fd5b505160408051630867604360e21b8152600481018b90529051919550309163219d810c91602480820192602092909190829003018186803b158015612cc457600080fd5b505afa158015612cd8573d6000803e3d6000fd5b505050506040513d6020811015612cee57600080fd5b5051604080516370f0242f60e11b8152600481018c90529051919450309163e1e0485e91602480820192602092909190829003018186803b158015612d3257600080fd5b505afa158015612d46573d6000803e3d6000fd5b505050506040513d6020811015612d5c57600080fd5b5051604080516370f0242f60e11b8152600481018b90529051919350309163e1e0485e91602480820192602092909190829003018186803b158015612da057600080fd5b505afa158015612db4573d6000803e3d6000fd5b505050506040513d6020811015612dca57600080fd5b5051604080516355a204f960e01b8152600481018c9052905191925030916355a204f991602480820192602092909190829003018186803b158015612e0e57600080fd5b505afa158015612e22573d6000803e3d6000fd5b505050506040513d6020811015612e3857600080fd5b5051604080516355a204f960e01b8152600481018b9052905191985030916355a204f991602480820192602092909190829003018186803b158015612e7c57600080fd5b505afa158015612e90573d6000803e3d6000fd5b505050506040513d6020811015612ea657600080fd5b505195506001600160a01b038716612ef9576040805162461bcd60e51b81526020600482015260116024820152701391950812510c481b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b6001600160a01b038616612f48576040805162461bcd60e51b81526020600482015260116024820152701391950812510c881b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b42306001600160a01b031663d68f4dd18b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612f8d57600080fd5b505afa158015612fa1573d6000803e3d6000fd5b505050506040513d6020811015612fb757600080fd5b5051108015613034575042306001600160a01b031663d68f4dd18a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561300657600080fd5b505afa15801561301a573d6000803e3d6000fd5b505050506040513d602081101561303057600080fd5b5051105b613079576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b6000841180156130895750600083115b80156130955750600082115b80156130a15750600081115b15613333578284019450601c548511156130bb57601c5494505b600d546001600160a01b0316828211156131e2576130dc878a8a8d8a614e3c565b60145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018d90529051918316916342842e0e9160648082019260009290919082900301818387803b15801561313757600080fd5b505af115801561314b573d6000803e3d6000fd5b5050604080516001600160a01b038b168152602081018d90528082018a905290517ffbab63ea2ce5640f4161925a409a0760eef7f6cd0e29da08eb58344ca308a9d69350908190036060019150a1604080516001600160a01b038a168152602081018c905281517f75545f6382d0aabef706b679ce2782000b9041109764f6774fc711d0854e11f8929181900390910190a16132f1565b6131ef888b898c8a614e3c565b60145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018c90529051918316916342842e0e9160648082019260009290919082900301818387803b15801561324a57600080fd5b505af115801561325e573d6000803e3d6000fd5b5050604080516001600160a01b038c168152602081018e90528082018a905290517ffbab63ea2ce5640f4161925a409a0760eef7f6cd0e29da08eb58344ca308a9d69350908190036060019150a1604080516001600160a01b0389168152602081018b905281517f75545f6382d0aabef706b679ce2782000b9041109764f6774fc711d0854e11f8929181900390910190a15b604080518b8152602081018b905280820188905290517f423a297ae572a6b7ff9b0c3025e62730af91cf544e4f891af4939832f0772aae9181900360600190a1505b505050505050505050565b6000613349836143dc565b9050336001600160a01b0382161461336057600080fd5b600083815260246020526040902082905581156133b757604080518481526001602082015281517fd3a2b72064b8b716ae1d24e608ecbb0a7f318d324b711111f7083ed4104bfb34929181900390910190a16133f3565b604080518481526000602082015281517fd3a2b72064b8b716ae1d24e608ecbb0a7f318d324b711111f7083ed4104bfb34929181900390910190a15b505050565b601e5481565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b15801561344a57600080fd5b505afa15801561345e573d6000803e3d6000fd5b505050506040513d602081101561347457600080fd5b5051151560011461348457600080fd5b5060009182526005602052604090912055565b61349f613a48565b6134a857600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b601a544211613512576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163221fc4c960e11b815260048101839052905160009182918291309163443f899291602480820192602092909190829003018186803b15801561355857600080fd5b505afa15801561356c573d6000803e3d6000fd5b505050506040513d602081101561358257600080fd5b5051604080516355a204f960e01b815260048101879052905191925030916355a204f991602480820192602092909190829003018186803b1580156135c657600080fd5b505afa1580156135da573d6000803e3d6000fd5b505050506040513d60208110156135f057600080fd5b505191506001600160a01b038216613642576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b60008511613688576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f742073746f726520360941b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156136cc57600080fd5b505afa1580156136e0573d6000803e3d6000fd5b505050506040513d60208110156136f657600080fd5b50519250428310613742576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600c54601054604080516323b872dd60e01b81523360048201526001600160a01b039283166024820152604481018990529051919092169182916323b872dd916064808201926020929091908290030181600087803b1580156137a457600080fd5b505af11580156137b8573d6000803e3d6000fd5b505050506040513d60208110156137ce57600080fd5b50600090506137dc87614f25565b90506137ee838263ffffffff61434a16565b92506137fb84878561453b565b6000868152602360209081526040918290204290558151338152908101839052815188927ff2cac92e9503588c463adbfc93fb814bf2f75c45fb8556e600db73aa6286e974928290030190a250505050505050565b613858613a48565b61386157600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60256020526000908152604090205460ff1681565b6138c8613a48565b6138d157600080fd5b601555565b61271081565b601d5481565b6000806000806000806000600260008981526020019081526020016000205460001461391157611b8188614fa4565b60005b601954811015611cf05760006019828154811061392d57fe5b600091825260208220015460408051633e1e1b9b60e11b8152600481018e905290516001600160a01b0390921693508391637c3c37369160248082019260e092909190829003018186803b15801561398457600080fd5b505afa158015613998573d6000803e3d6000fd5b505050506040513d60e08110156139ae57600080fd5b5051905080156139fc57816001600160a01b0316637c3c37368c6040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611c7f57600080fd5b5050600101613914565b6000546001600160a01b031690565b613a1d613a48565b613a2657600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331490565b600f546001600160a01b031681565b60198181548110613a7557fe5b6000918252602090912001546001600160a01b0316905081565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015613ad257600080fd5b505afa158015613ae6573d6000803e3d6000fd5b505050506040513d6020811015613afc57600080fd5b505190506001600160a01b038116301415613b305750506000818152600860205260409020546001600160a01b0316610d72565b6000819050806001600160a01b0316639e2b8488856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b613b81613a48565b613b8a57600080fd5b601a55565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6020811015613c0557600080fd5b50511515600114613c1557600080fd5b5060009182526001602052604090912055565b613c30613a48565b613c3957600080fd5b6133f36019838361510a565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015613c9157600080fd5b505afa158015613ca5573d6000803e3d6000fd5b505050506040513d6020811015613cbb57600080fd5b50511515600114613ccb57600080fd5b5060009182526004602052604090912055565b613ce6613a48565b613cef57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526002602052604081205481908190819015613d4557613d34856142ed565b509850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110613d6157fe5b6000918252602090912001546001600160a01b0316905083613e0557806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015613dc157600080fd5b505afa158015613dd5573d6000803e3d6000fd5b505050506040513d60e0811015613deb57600080fd5b50602081015160a090910151955092508215613e05578293505b50600101613d48565b6000601554306001600160a01b0316632eedcb18846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e5757600080fd5b505afa158015613e6b573d6000803e3d6000fd5b505050506040513d6020811015613e8157600080fd5b50511092915050565b613e92613a48565b613e9b57600080fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b613ec5613a48565b613ece57600080fd5b601655565b60215481565b601a5481565b613ee7613a48565b613ef057600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015613f5557600080fd5b505afa158015613f69573d6000803e3d6000fd5b505050506040513d6020811015613f7f57600080fd5b505190506001600160a01b038116301415613faa5750506000818152600a6020526040902054610d72565b6000819050806001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b613ffb613a48565b61400457600080fd5b601755565b60205481565b6000818152600260205260408120548190819081901561404457614032856142ed565b50939850610d72975050505050505050565b60005b601954811015610d6b5760006019828154811061406057fe5b6000918252602090912001546001600160a01b03169050836140fb57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156140c057600080fd5b505afa1580156140d4573d6000803e3d6000fd5b505050506040513d60e08110156140ea57600080fd5b5060200151945082156140fb578493505b50600101614047565b61410c613a48565b61411557600080fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031681565b61414e613a48565b61415757600080fd5b61416081614ff5565b50565b3360009081526025602052604090205460ff161561418057600080fd5b42601f54600b5401101561419357600080fd5b61419c33614e30565b156141ee576040805162461bcd60e51b815260206004820152601a60248201527f4e6f7420616c6c6f7720636f6e747261637420746f2063616c6c000000000000604482015290519081900360640190fd5b60006141f982614cf8565b60ff16905061420a81601654614680565b5050336000908152602560205260409020805460ff1916600117905550565b614231613a48565b61423a57600080fd5b601f55565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b15801561428b57600080fd5b505afa15801561429f573d6000803e3d6000fd5b505050506040513d60208110156142b557600080fd5b505115156001146142c557600080fd5b5060009182526006602052604090912055565b60155481565b600d546001600160a01b031681565b600090815260016020908152604080832054600283528184205460038452828520546004855283862054600586528487205460068752858820546007909752949096205492969195909490939290916001600160a01b0390911690565b60008282018381101561435c57600080fd5b90505b92915050565b81156133f3576000839050806001600160a01b0316636ddee2b984846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b505af11580156143d2573d6000803e3d6000fd5b5050505050505050565b600d54604080516331a9108f60e11b81526004810184905290516000926001600160a01b03169183918391636352211e91602480830192602092919082900301818787803b15801561442d57600080fd5b505af1158015614441573d6000803e3d6000fd5b505050506040513d602081101561445757600080fd5b505190506001600160a01b03811661446e57600080fd5b9392505050565b60008061271061448a601b5485870101615063565b8161449157fe5b06905061138881106144cc5760008381526024602052604080822054868352912054106144c257600191505061435f565b600091505061435f565b6000838152602460205260408082205486835291205410156144c257600191505061435f565b6000826145015750600061435f565b8282028284828161450e57fe5b041461435c57600080fd5b600080821161452757600080fd5b600082848161453257fe5b04949350505050565b81156133f3576000839050806001600160a01b031663b22bbb5f84846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b601b80546001019081905560125460408051634a3a1c0d60e11b81523360048201526024810193909352516000926001600160a01b039092169183918391639474381a91604480830192602092919082900301818787803b1580156145f857600080fd5b505af115801561460c573d6000803e3d6000fd5b505050506040513d602081101561462257600080fd5b50519050600161270b821061463957506006614679565b6126ed821061464a57506005614679565b612648821061465b57506004614679565b61251c821061466c57506003614679565b611b588210614679575060025b9250505090565b601b8054600101905560008083816146966150eb565b60408051600080825260208201928390529051929350670de0b6b3a764000092909182914291309133916146cd916022919061516d565b5060038863ffffffff16106146e157600095505b600d54604080516318160ddd60e01b815290516001600160a01b039092169182916318160ddd916004808301926020929190829003018186803b15801561472757600080fd5b505afa15801561473b573d6000803e3d6000fd5b505050506040513d602081101561475157600080fd5b81019080805190602001909291905050509950896001019950806001600160a01b0316638832e6e3338c60226040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156148335780601f1061480857610100808354040283529160200191614833565b820191906000526020600020905b81548152906001019060200180831161481657829003601f168201915b5050945050505050602060405180830381600087803b15801561485557600080fd5b505af1158015614869573d6000803e3d6000fd5b505050506040513d602081101561487f57600080fd5b50506015805460008c8152600160209081526040808320939093556002815282822063ffffffff8e1690819055600382528383208d9055600482528383208c9055600582528383208b9055600682528383208a90556007825283832080546001600160a01b03808b166001600160a01b03199283168117909355600885528686208054918b16919092168117909155600984528585208b9055600a84528585209490945594548451908152918201528083018c9052606081018b9052608081018a905260a0810189905260c081019390935260e08301526101008201869052518b917fe46c390f83539a71f55dae85e422a9cb62a46ba5d0df09eb6b180b0f5391cfd291908190036101200190a28863ffffffff16600614156149df5760408051338152426020820152438183015290517f5dede919f72174f8fb81fb46ca7537e0e728a37ff126021cc4dd8196b0e9c9a39181900360600190a1614b75565b8863ffffffff1660051415614a315760408051338152426020820152438183015290517ff34332f50503ac531311088dc24a12d09c5fbb788bdbf8736cbf9d0b08bc67189181900360600190a1614b75565b8863ffffffff1660041415614a835760408051338152426020820152438183015290517f8c82dac155cf31fda1bc96fc0281430b7a5748ecbb097424ac9f50c4f41fc7009181900360600190a1614b75565b8863ffffffff1660031415614ad55760408051338152426020820152438183015290517f69e83085a9253e750718be70083f23bf10806a38a9cd2cd9d1c2b6b77dbf86e19181900360600190a1614b75565b8863ffffffff1660021415614b275760408051338152426020820152438183015290517f8b8ad9ea0dc7ffd227d09b79ba6c80177f1a3830d194b1d20e392fff5cb6c7869181900360600190a1614b75565b8863ffffffff1660011415614b755760408051338152426020820152438183015290517fddd0d31c54ac67342ca77d74ba71891797ee3c66adef426259c762cbdeaa70c79181900360600190a15b600e54604080516340c10f1960e01b8152336004820152602481018f905290516001600160a01b039092169182916340c10f1991604480830192600092919082900301818387803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506000881115614c5f57600c54601054604080516340c10f1960e01b81526001600160a01b039283166004820152602481018c90529051919092169182916340c10f199160448082019260009290919082900301818387803b158015614c4557600080fd5b505af1158015614c59573d6000803e3d6000fd5b50505050505b602080546001019081905560215411614c78576000601f555b50989c9b505050505050505050505050565b81156133f3576000839050806001600160a01b031663f97f390a84846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b600082821115614cf257600080fd5b50900390565b60125460408051631bf3481560e11b81523360048201526024810184905290516000926001600160a01b031691839183916337e6902a916044808301926020929190829003018186803b158015614d4e57600080fd5b505afa158015614d62573d6000803e3d6000fd5b505050506040513d6020811015614d7857600080fd5b50519050600161270b8210614d8f57506006614dcf565b6126ed8210614da057506005614dcf565b6126488210614db157506004614dcf565b61251c8210614dc257506003614dcf565b611b588210614dcf575060025b949350505050565b81156133f3576000839050806001600160a01b0316630d36a17084846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b3b63ffffffff16151590565b8315614eaf576000859050806001600160a01b03166306b5a2dd86846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015614e9557600080fd5b505af1158015614ea9573d6000803e3d6000fd5b50505050505b8115614f1e57604080516306b5a2dd60e01b815260048101849052600060248201819052915185926001600160a01b038416926306b5a2dd926044808301939282900301818387803b158015614f0457600080fd5b505af1158015614f18573d6000803e3d6000fd5b50505050505b5050505050565b6000808290506000614f4861271061187b601d54876144f290919063ffffffff16565b90508015614f6357614f60828263ffffffff614ce316565b91505b6000614f8061271061187b601e54886144f290919063ffffffff16565b90508015614f9b57614f98838263ffffffff614ce316565b92505b50909392505050565b60009081526001602090815260408083205460028352818420546003845282852054600485528386205460058652848720546006875285882054600a90975294909620549296919590949093929091565b6001600160a01b03811661500857600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60125460408051639ee0266360e01b81523360048201526024810184905290516000926001600160a01b0316918291639ee0266391604480820192602092909190829003018186803b1580156150b857600080fd5b505afa1580156150cc573d6000803e3d6000fd5b505050506040513d60208110156150e257600080fd5b50519392505050565b6000806103e86150fc601b54615063565b8161510357fe5b0691505090565b82805482825590600052602060002090810192821561515d579160200282015b8281111561515d5781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061512a565b506151699291506151e7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106151ae57805160ff19168380011785556151db565b828001600101855582156151db579182015b828111156151db5782518255916020019190600101906151c0565b5061516992915061520b565b61131c91905b808211156151695780546001600160a01b03191681556001016151ed565b61131c91905b80821115615169576000815560010161521156fe63d671c5a1d496967a359ab4ae80d0d3968cccb34e531a523c3ab619e427e0a1a265627a7a723158206222b33483123243010a176873f5148ce04d75b5eb58c008086f7acdf322374a64736f6c63430005100032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106104335760003560e01c80636ed28ed011610236578063bd880fae1161013b578063df3e2bb8116100c3578063f77ad2c111610087578063f77ad2c114610c00578063f854f48214610c1d578063f97f390a14610c3a578063f989adfe14610c5d578063fa26b9af14610c6557610433565b8063df3e2bb814610b87578063e1e0485e14610b8f578063eadb511814610bac578063f046ed6514610bd2578063f2fde38b14610bda57610433565b8063d37967381161010a578063d379673814610b17578063d4310dbf14610b1f578063d4e918ec14610b27578063d68f4dd114610b4d578063db2b71b214610b6a57610433565b8063bd880fae14610a9a578063c100946914610ab7578063c805f68b14610ad4578063d0259e6914610afa57610433565b80638f32d59b116101be578063a2e20c821161018d578063a2e20c82146109a1578063a7fb1693146109be578063ad9e8650146109e1578063b22bbb5f14610a51578063b865759714610a7457610433565b80638f32d59b146109575780638ffc177c1461095f57806394fb6d58146109675780639e2b84881461098457610433565b8063775e137711610205578063775e1377146108c457806379138df1146108cc5780637c3c3736146108d45780638da5cb5b146109295780638e4157a61461093157610433565b80636ed28ed014610856578063715018a61461087957806373b2e80e1461088157806376bd8df4146108a757610433565b80633da0fe191161033c57806355a204f9116102c457806365a8a0371161029357806365a8a037146107bf57806365e874d2146107e257806368fd25cd146108055780636ddee2b91461080d5780636ebdff2c1461083057610433565b806355a204f914610760578063578b40a21461077d5780635c94b9dd1461079a578063637dba06146107b757610433565b806346df2ccb1161030b57806346df2ccb146106d55780634ad82965146106f85780634dcbc739146107155780634e71d92d14610732578063545893051461073a57610433565b80633da0fe19146106415780633e53354014610664578063441a3e7014610695578063443f8992146106b857610433565b806328d2bc91116103bf5780632e6edf151161038e5780632e6edf151461057b5780632eedcb1814610583578063336bb238146105a057806336dac2cc146105bd5780633786dcee1461061b57610433565b806328d2bc9114610540578063290ab922146105485780632a3d1775146105505780632e4148901461055857610433565b8063136328021161040657806313632802146104d35780631a667e23146104f65780631fcf24ba14610513578063219d810c1461051b57806324d28bd51461053857610433565b8063017fe8091461043857806306b5a2dd146104675780630c2574541461048c5780630d36a170146104b0575b600080fd5b6104556004803603602081101561044e57600080fd5b5035610c6d565b60408051918252519081900360200190f35b61048a6004803603604081101561047d57600080fd5b5080359060200135610d77565b005b610494610e10565b604080516001600160a01b039092168252519081900360200190f35b61048a600480360360408110156104c657600080fd5b5080359060200135610e1f565b61048a600480360360408110156104e957600080fd5b5080359060200135610eb8565b6104556004803603602081101561050c57600080fd5b5035611202565b610455611214565b6104556004803603602081101561053157600080fd5b503561121a565b610455611318565b61049461131f565b61049461132e565b61049461133d565b61048a6004803603604081101561056e57600080fd5b508035906020013561134c565b61048a6119d1565b6104556004803603602081101561059957600080fd5b5035611a40565b61048a600480360360208110156105b657600080fd5b5035611b3c565b6105da600480360360208110156105d357600080fd5b5035611b52565b604080519788526020880196909652868601949094526060860192909252608085015260a08401526001600160a01b031660c0830152519081900360e00190f35b61048a6004803603602081101561063157600080fd5b50356001600160a01b0316611d13565b61048a6004803603604081101561065757600080fd5b5080359060200135611d46565b6106816004803603602081101561067a57600080fd5b50356120b8565b604080519115158252519081900360200190f35b61048a600480360360408110156106ab57600080fd5b50803590602001356120db565b610455600480360360208110156106ce57600080fd5b5035612476565b61048a600480360360408110156106eb57600080fd5b5080359060200135612574565b61048a6004803603602081101561070e57600080fd5b5035612590565b61048a6004803603602081101561072b57600080fd5b5035612759565b61048a612841565b61048a6004803603602081101561075057600080fd5b50356001600160a01b0316612907565b6104946004803603602081101561077657600080fd5b503561293a565b6104556004803603602081101561079357600080fd5b5035612a37565b61048a600480360360208110156107b057600080fd5b5035612b4e565b610494612b64565b61048a600480360360408110156107d557600080fd5b5080359060200135612b73565b61048a600480360360408110156107f857600080fd5b508035906020013561333e565b6104556133f8565b61048a6004803603604081101561082357600080fd5b50803590602001356133fe565b61048a6004803603602081101561084657600080fd5b50356001600160a01b0316613497565b61048a6004803603604081101561086c57600080fd5b50803590602001356134ca565b61048a613850565b6106816004803603602081101561089757600080fd5b50356001600160a01b03166138ab565b61048a600480360360208110156108bd57600080fd5b50356138c0565b6104556138d6565b6104556138dc565b6108f1600480360360208110156108ea57600080fd5b50356138e2565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b610494613a06565b61048a6004803603602081101561094757600080fd5b50356001600160a01b0316613a15565b610681613a48565b610494613a59565b6104946004803603602081101561097d57600080fd5b5035613a68565b6104946004803603602081101561099a57600080fd5b5035613a8f565b61048a600480360360208110156109b757600080fd5b5035613b79565b61048a600480360360408110156109d457600080fd5b5080359060200135613b8f565b61048a600480360360208110156109f757600080fd5b810190602081018135640100000000811115610a1257600080fd5b820183602082011115610a2457600080fd5b80359060200191846020830284011164010000000083111715610a4657600080fd5b509092509050613c28565b61048a60048036036040811015610a6757600080fd5b5080359060200135613c45565b61048a60048036036020811015610a8a57600080fd5b50356001600160a01b0316613cde565b61045560048036036020811015610ab057600080fd5b5035613d11565b61068160048036036020811015610acd57600080fd5b5035613e0e565b61048a60048036036020811015610aea57600080fd5b50356001600160a01b0316613e8a565b61048a60048036036020811015610b1057600080fd5b5035613ebd565b610455613ed3565b610455613ed9565b61048a60048036036020811015610b3d57600080fd5b50356001600160a01b0316613edf565b61045560048036036020811015610b6357600080fd5b5035613f12565b61048a60048036036020811015610b8057600080fd5b5035613ff3565b610455614009565b61045560048036036020811015610ba557600080fd5b503561400f565b61048a60048036036020811015610bc257600080fd5b50356001600160a01b0316614104565b610494614137565b61048a60048036036020811015610bf057600080fd5b50356001600160a01b0316614146565b61048a60048036036020811015610c1657600080fd5b5035614163565b61048a60048036036020811015610c3357600080fd5b5035614229565b61048a60048036036040811015610c5057600080fd5b508035906020013561423f565b6104556142d8565b6104946142de565b60008181526002602052604081205481908190819015610ca257610c90856142ed565b50909850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110610cbe57fe5b6000918252602090912001546001600160a01b0316905083610d6257806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d60e0811015610d4857600080fd5b506020810151608090910151955092508215610d62578293505b50600101610ca5565b5091925050505b919050565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015610dc357600080fd5b505afa158015610dd7573d6000803e3d6000fd5b505050506040513d6020811015610ded57600080fd5b50511515600114610dfd57600080fd5b5060009182526003602052604090912055565b6010546001600160a01b031681565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015610e6b57600080fd5b505afa158015610e7f573d6000803e3d6000fd5b505050506040513d6020811015610e9557600080fd5b50511515600114610ea557600080fd5b506000918252600a602052604090912055565b601a544211610f00576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163017fe80960e01b815260048101839052905160009182918291309163017fe80991602480820192602092909190829003018186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d6020811015610f7057600080fd5b5051604080516355a204f960e01b815260048101879052905191935030916355a204f991602480820192602092909190829003018186803b158015610fb457600080fd5b505afa158015610fc8573d6000803e3d6000fd5b505050506040513d6020811015610fde57600080fd5b505192506001600160a01b038316611030576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b6000851161107a576040805162461bcd60e51b815260206004820152601260248201527121b0b73737ba10313ab93710181020a82ba960711b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156110be57600080fd5b505afa1580156110d2573d6000803e3d6000fd5b505050506040513d60208110156110e857600080fd5b50519050428110611134576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600e546040805163079cc67960e41b81523360048201526024810188905290516001600160a01b039092169182916379cc679091604480830192600092919082900301818387803b15801561118857600080fd5b505af115801561119c573d6000803e3d6000fd5b505050506111b3868461434a90919063ffffffff16565b92506111c0848685614365565b6040805133815260208101889052815187927f76352b8c502f69d9eda573d79b49c4b025b913b52eb0c4454c19da1ac229059b928290030190a2505050505050565b60236020526000908152604090205481565b601f5481565b6000818152600260205260408120548190819081901561124f5761123d856142ed565b50929850610d72975050505050505050565b60005b601954811015610d6b5760006019828154811061126b57fe5b6000918252602090912001546001600160a01b031690508361130f57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156112cb57600080fd5b505afa1580156112df573d6000803e3d6000fd5b505050506040513d60e08110156112f557600080fd5b50602081015160409091015195509250821561130f578293505b50600101611252565b6020545b90565b6014546001600160a01b031681565b6013546001600160a01b031681565b6011546001600160a01b031681565b6000611357836143dc565b9050336001600160a01b0382161461136e57600080fd5b6000611379836143dc565b9050806001600160a01b0316826001600160a01b031614156113e2576040805162461bcd60e51b815260206004820152601860248201527f4e46544944206f776e65722063616e206e6f742073616d650000000000000000604482015290519081900360640190fd5b82841415611432576040805162461bcd60e51b815260206004820152601860248201527754574f204e4654732049442063616e206e6f742073616d6560401b604482015290519081900360640190fd5b6001600160a01b0382161580159061145257506001600160a01b03811615155b61145b57600080fd5b6000838152602460205260409020546114bb576040805162461bcd60e51b815260206004820152601c60248201527f5461726765744964206d757374207475726e2d6f6e2073776974636800000000604482015290519081900360640190fd5b6000306001600160a01b031663443f8992866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150157600080fd5b505afa158015611515573d6000803e3d6000fd5b505050506040513d602081101561152b57600080fd5b50516040805163221fc4c960e11b8152600481018790529051919250600091309163443f8992916024808301926020929190829003018186803b15801561157157600080fd5b505afa158015611585573d6000803e3d6000fd5b505050506040513d602081101561159b57600080fd5b5051604080516355a204f960e01b8152600481018990529051919250600091829182918291829130916355a204f9916024808301926020929190829003018186803b1580156115e957600080fd5b505afa1580156115fd573d6000803e3d6000fd5b505050506040513d602081101561161357600080fd5b5051604080516355a204f960e01b8152600481018d90529051919a5030916355a204f991602480820192602092909190829003018186803b15801561165757600080fd5b505afa15801561166b573d6000803e3d6000fd5b505050506040513d602081101561168157600080fd5b505197506001600160a01b0389166116d4576040805162461bcd60e51b81526020600482015260116024820152701b5e5b999d1259081b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b6001600160a01b038816611724576040805162461bcd60e51b81526020600482015260126024820152711d185c99d95d1259081b9bdd08199bdd5b9960721b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd18c6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b50516040805163d68f4dd160e01b8152600481018d90529051919350309163d68f4dd191602480820192602092909190829003018186803b1580156117d657600080fd5b505afa1580156117ea573d6000803e3d6000fd5b505050506040513d602081101561180057600080fd5b50519050428210801561181257504281105b611857576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b6118618b8b614475565b61191857611887606461187b89605f63ffffffff6144f216565b9063ffffffff61451916565b94508487039350858401925061189e898c8761453b565b6118a9888b8561453b565b604080518c8152600060208201528082018690526060810187905290516000805160206152268339815191529181900360800190a1604080518b8152600160208201528082018690526060810185905290516000805160206152268339815191529181900360800190a16119bb565b61192e606461187b88605f63ffffffff6144f216565b945084860393508684019250611945898c8561453b565b611950888b8761453b565b604080518c8152600160208201528082018690526060810185905290516000805160206152268339815191529181900360800190a1604080518b8152600060208201528082018690526060810187905290516000805160206152268339815191529181900360800190a15b5050601b80546001019055505050505050505050565b6013546001600160a01b03163314611a21576040805162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b0b63632b960911b604482015290519081900360640190fd5b6000611a2b614594565b60ff169050611a3c81601854614680565b5050565b60008181526002602052604081205481908190819015611a7557611a63856142ed565b50949850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110611a9157fe5b6000918252602090912001546001600160a01b0316905083611b3357806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611af157600080fd5b505afa158015611b05573d6000803e3d6000fd5b505050506040513d60e0811015611b1b57600080fd5b50805160209091015190955092508215611b33578293505b50600101611a78565b611b44613a48565b611b4d57600080fd5b602155565b60008060008060008060006002600089815260200190815260200160002054600014611b9457611b81886142ed565b9650965096509650965096509650611d08565b60005b601954811015611cf057600060198281548110611bb057fe5b600091825260208220015460408051630db6b0b360e21b8152600481018e905290516001600160a01b03909216935083916336dac2cc9160248082019260e092909190829003018186803b158015611c0757600080fd5b505afa158015611c1b573d6000803e3d6000fd5b505050506040513d60e0811015611c3157600080fd5b505190508015611ce657816001600160a01b03166336dac2cc8c6040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611c7f57600080fd5b505afa158015611c93573d6000803e3d6000fd5b505050506040513d60e0811015611ca957600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949f50929d50909b50995097509095509350611d0892505050565b5050600101611b97565b50600096508695508594508493508392508291508190505b919395979092949650565b611d1b613a48565b611d2457600080fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b601a544211611d8e576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b60408051635ec407d760e11b8152600481018390529051600091829182918291309163bd880fae916024808301926020929190829003018186803b158015611dd557600080fd5b505afa158015611de9573d6000803e3d6000fd5b505050506040513d6020811015611dff57600080fd5b5051604080516355a204f960e01b815260048101889052905191945030916355a204f991602480820192602092909190829003018186803b158015611e4357600080fd5b505afa158015611e57573d6000803e3d6000fd5b505050506040513d6020811015611e6d57600080fd5b505193506001600160a01b038416611ebf576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b60008611611f09576040805162461bcd60e51b815260206004820152601260248201527110d85b9b9bdd08189d5c9b880c081054951560721b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4d57600080fd5b505afa158015611f61573d6000803e3d6000fd5b505050506040513d6020811015611f7757600080fd5b50519050428110611fc3576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600f54601454604080516323b872dd60e01b81523360048201526001600160a01b039283166024820152604481018a90529051919092169182916323b872dd916064808201926020929091908290030181600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d602081101561204f57600080fd5b5050670de0b6b3a764000087049250612068848461434a565b9350612075858786614c8a565b6040805133815260208101899052815188927f31e765c7841d24537a2eb36d7e16e8a7ffec997096148894b11cc5ebc8d02ab6928290030190a250505050505050565b6000818152602460205260408120546120d357506000610d72565b506001919050565b601a544211612123576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163221fc4c960e11b815260048101839052905160009182918291309163443f899291602480820192602092909190829003018186803b15801561216957600080fd5b505afa15801561217d573d6000803e3d6000fd5b505050506040513d602081101561219357600080fd5b5051604080516355a204f960e01b815260048101879052905191925030916355a204f991602480820192602092909190829003018186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b505191506001600160a01b038216612253576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b600061225e856143dc565b9050336001600160a01b0382161461227557600080fd5b6000861180156122855750858210155b6122ce576040805162461bcd60e51b81526020600482015260156024820152743bb4ba34323930bb9030b6b7bab73a1032b93937b960591b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d602081101561233c57600080fd5b50519350428410612388576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b612398828763ffffffff614ce316565b91506123a583868461453b565b600c54601054604080516323b872dd60e01b81526001600160a01b039283166004820152336024820152604481018a90529051919092169182916323b872dd916064808201926020929091908290030181600087803b15801561240757600080fd5b505af115801561241b573d6000803e3d6000fd5b505050506040513d602081101561243157600080fd5b50506040805133815260208101899052815188927f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf928290030190a250505050505050565b600081815260026020526040812054819081908190156124ab57612499856142ed565b50919850610d72975050505050505050565b60005b601954811015610d6b576000601982815481106124c757fe5b6000918252602090912001546001600160a01b031690508361256b57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b15801561252757600080fd5b505afa15801561253b573d6000803e3d6000fd5b505050506040513d60e081101561255157600080fd5b50602081015160609091015195509250821561256b578293505b506001016124ae565b61257c613a48565b61258557600080fd5b601d91909155601e55565b42601f54600b540110156125a357600080fd5b336125ad826143dc565b6001600160a01b0316146125fb576040805162461bcd60e51b815260206004820152601060248201526f13999d1259081bdddb995c8819985a5b60821b604482015290519081900360640190fd5b600d54601554604080516305ddb96360e31b81526004810185905290516001600160a01b03909316923091632eedcb18916024808301926020929190829003018186803b15801561264b57600080fd5b505afa15801561265f573d6000803e3d6000fd5b505050506040513d602081101561267557600080fd5b50511015611a3c5760145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018590529051918316916342842e0e9160648082019260009290919082900301818387803b1580156126d857600080fd5b505af11580156126ec573d6000803e3d6000fd5b5050505060006126fc6000614cf8565b60ff169050600061270f82601754614680565b604080513381526020810187905280820183905290519192507ff278a19d2a176aed6fc826ab94a4c10959b5ae5105f9136db28ab55eb11430c5919081900360600190a150505050565b600080612765836143dc565b9050336001600160a01b0382161461277c57600080fd5b306001600160a01b03166355a204f9846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156127c057600080fd5b505afa1580156127d4573d6000803e3d6000fd5b505050506040513d60208110156127ea57600080fd5b505162127500420192509050612801818484614dd7565b604080518481526020810184905281517f3f8466e2ad20795e4cd60d27d38c966e1c15c493abd69990d484a46bf314698b929181900390910190a1505050565b3360009081526025602052604090205460ff161561285e57600080fd5b42601f54600b5401101561287157600080fd5b61287a33614e30565b156128cc576040805162461bcd60e51b815260206004820152601a60248201527f4e6f7420616c6c6f7720636f6e747261637420746f2063616c6c000000000000604482015290519081900360640190fd5b60006128d86000614cf8565b60ff1690506128e981601654614680565b5050336000908152602560205260409020805460ff19166001179055565b61290f613a48565b61291857600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120548190819081901561296e5761295d856142ed565b9950610d7298505050505050505050565b60005b601954811015610d6b5760006019828154811061298a57fe5b6000918252602090912001546001600160a01b0316905083612a2e57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156129ea57600080fd5b505afa1580156129fe573d6000803e3d6000fd5b505050506040513d60e0811015612a1457600080fd5b50602081015160c090910151955092508215612a2e578293505b50600101612971565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015612a7a57600080fd5b505afa158015612a8e573d6000803e3d6000fd5b505050506040513d6020811015612aa457600080fd5b505190506001600160a01b038116301415612acf575050600081815260096020526040902054610d72565b6000819050806001600160a01b031663578b40a2856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b505afa158015612b2c573d6000803e3d6000fd5b505050506040513d6020811015612b4257600080fd5b50519250610d72915050565b612b56613a48565b612b5f57600080fd5b601855565b600e546001600160a01b031681565b6000612b7e836143dc565b90506000612b8b836143dc565b9050336001600160a01b038316148015612bad5750336001600160a01b038216145b612bb657600080fd5b82841415612c06576040805162461bcd60e51b815260206004820152601860248201527754574f204e4654732049442063616e206e6f742073616d6560401b604482015290519081900360640190fd5b505060408051630867604360e21b8152600481018490529051600091829182918291829182918291309163219d810c91602480820192602092909190829003018186803b158015612c5657600080fd5b505afa158015612c6a573d6000803e3d6000fd5b505050506040513d6020811015612c8057600080fd5b505160408051630867604360e21b8152600481018b90529051919550309163219d810c91602480820192602092909190829003018186803b158015612cc457600080fd5b505afa158015612cd8573d6000803e3d6000fd5b505050506040513d6020811015612cee57600080fd5b5051604080516370f0242f60e11b8152600481018c90529051919450309163e1e0485e91602480820192602092909190829003018186803b158015612d3257600080fd5b505afa158015612d46573d6000803e3d6000fd5b505050506040513d6020811015612d5c57600080fd5b5051604080516370f0242f60e11b8152600481018b90529051919350309163e1e0485e91602480820192602092909190829003018186803b158015612da057600080fd5b505afa158015612db4573d6000803e3d6000fd5b505050506040513d6020811015612dca57600080fd5b5051604080516355a204f960e01b8152600481018c9052905191925030916355a204f991602480820192602092909190829003018186803b158015612e0e57600080fd5b505afa158015612e22573d6000803e3d6000fd5b505050506040513d6020811015612e3857600080fd5b5051604080516355a204f960e01b8152600481018b9052905191985030916355a204f991602480820192602092909190829003018186803b158015612e7c57600080fd5b505afa158015612e90573d6000803e3d6000fd5b505050506040513d6020811015612ea657600080fd5b505195506001600160a01b038716612ef9576040805162461bcd60e51b81526020600482015260116024820152701391950812510c481b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b6001600160a01b038616612f48576040805162461bcd60e51b81526020600482015260116024820152701391950812510c881b9bdd08199bdd5b99607a1b604482015290519081900360640190fd5b42306001600160a01b031663d68f4dd18b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612f8d57600080fd5b505afa158015612fa1573d6000803e3d6000fd5b505050506040513d6020811015612fb757600080fd5b5051108015613034575042306001600160a01b031663d68f4dd18a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561300657600080fd5b505afa15801561301a573d6000803e3d6000fd5b505050506040513d602081101561303057600080fd5b5051105b613079576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b6000841180156130895750600083115b80156130955750600082115b80156130a15750600081115b15613333578284019450601c548511156130bb57601c5494505b600d546001600160a01b0316828211156131e2576130dc878a8a8d8a614e3c565b60145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018d90529051918316916342842e0e9160648082019260009290919082900301818387803b15801561313757600080fd5b505af115801561314b573d6000803e3d6000fd5b5050604080516001600160a01b038b168152602081018d90528082018a905290517ffbab63ea2ce5640f4161925a409a0760eef7f6cd0e29da08eb58344ca308a9d69350908190036060019150a1604080516001600160a01b038a168152602081018c905281517f75545f6382d0aabef706b679ce2782000b9041109764f6774fc711d0854e11f8929181900390910190a16132f1565b6131ef888b898c8a614e3c565b60145460408051632142170760e11b81523360048201526001600160a01b039283166024820152604481018c90529051918316916342842e0e9160648082019260009290919082900301818387803b15801561324a57600080fd5b505af115801561325e573d6000803e3d6000fd5b5050604080516001600160a01b038c168152602081018e90528082018a905290517ffbab63ea2ce5640f4161925a409a0760eef7f6cd0e29da08eb58344ca308a9d69350908190036060019150a1604080516001600160a01b0389168152602081018b905281517f75545f6382d0aabef706b679ce2782000b9041109764f6774fc711d0854e11f8929181900390910190a15b604080518b8152602081018b905280820188905290517f423a297ae572a6b7ff9b0c3025e62730af91cf544e4f891af4939832f0772aae9181900360600190a1505b505050505050505050565b6000613349836143dc565b9050336001600160a01b0382161461336057600080fd5b600083815260246020526040902082905581156133b757604080518481526001602082015281517fd3a2b72064b8b716ae1d24e608ecbb0a7f318d324b711111f7083ed4104bfb34929181900390910190a16133f3565b604080518481526000602082015281517fd3a2b72064b8b716ae1d24e608ecbb0a7f318d324b711111f7083ed4104bfb34929181900390910190a15b505050565b601e5481565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b15801561344a57600080fd5b505afa15801561345e573d6000803e3d6000fd5b505050506040513d602081101561347457600080fd5b5051151560011461348457600080fd5b5060009182526005602052604090912055565b61349f613a48565b6134a857600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b601a544211613512576040805162461bcd60e51b815260206004820152600f60248201526e1cdd1bdc99481b9bdd081cdd185c9d608a1b604482015290519081900360640190fd5b6040805163221fc4c960e11b815260048101839052905160009182918291309163443f899291602480820192602092909190829003018186803b15801561355857600080fd5b505afa15801561356c573d6000803e3d6000fd5b505050506040513d602081101561358257600080fd5b5051604080516355a204f960e01b815260048101879052905191925030916355a204f991602480820192602092909190829003018186803b1580156135c657600080fd5b505afa1580156135da573d6000803e3d6000fd5b505050506040513d60208110156135f057600080fd5b505191506001600160a01b038216613642576040805162461bcd60e51b815260206004820152601060248201526f139195081251081b9bdd08199bdd5b9960821b604482015290519081900360640190fd5b60008511613688576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f742073746f726520360941b604482015290519081900360640190fd5b306001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156136cc57600080fd5b505afa1580156136e0573d6000803e3d6000fd5b505050506040513d60208110156136f657600080fd5b50519250428310613742576040805162461bcd60e51b81526020600482015260116024820152705761697420666f72206c6f636b74696d6560781b604482015290519081900360640190fd5b600c54601054604080516323b872dd60e01b81523360048201526001600160a01b039283166024820152604481018990529051919092169182916323b872dd916064808201926020929091908290030181600087803b1580156137a457600080fd5b505af11580156137b8573d6000803e3d6000fd5b505050506040513d60208110156137ce57600080fd5b50600090506137dc87614f25565b90506137ee838263ffffffff61434a16565b92506137fb84878561453b565b6000868152602360209081526040918290204290558151338152908101839052815188927ff2cac92e9503588c463adbfc93fb814bf2f75c45fb8556e600db73aa6286e974928290030190a250505050505050565b613858613a48565b61386157600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60256020526000908152604090205460ff1681565b6138c8613a48565b6138d157600080fd5b601555565b61271081565b601d5481565b6000806000806000806000600260008981526020019081526020016000205460001461391157611b8188614fa4565b60005b601954811015611cf05760006019828154811061392d57fe5b600091825260208220015460408051633e1e1b9b60e11b8152600481018e905290516001600160a01b0390921693508391637c3c37369160248082019260e092909190829003018186803b15801561398457600080fd5b505afa158015613998573d6000803e3d6000fd5b505050506040513d60e08110156139ae57600080fd5b5051905080156139fc57816001600160a01b0316637c3c37368c6040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015611c7f57600080fd5b5050600101613914565b6000546001600160a01b031690565b613a1d613a48565b613a2657600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331490565b600f546001600160a01b031681565b60198181548110613a7557fe5b6000918252602090912001546001600160a01b0316905081565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015613ad257600080fd5b505afa158015613ae6573d6000803e3d6000fd5b505050506040513d6020811015613afc57600080fd5b505190506001600160a01b038116301415613b305750506000818152600860205260409020546001600160a01b0316610d72565b6000819050806001600160a01b0316639e2b8488856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b613b81613a48565b613b8a57600080fd5b601a55565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6020811015613c0557600080fd5b50511515600114613c1557600080fd5b5060009182526001602052604090912055565b613c30613a48565b613c3957600080fd5b6133f36019838361510a565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b158015613c9157600080fd5b505afa158015613ca5573d6000803e3d6000fd5b505050506040513d6020811015613cbb57600080fd5b50511515600114613ccb57600080fd5b5060009182526004602052604090912055565b613ce6613a48565b613cef57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526002602052604081205481908190819015613d4557613d34856142ed565b509850610d72975050505050505050565b60005b601954811015610d6b57600060198281548110613d6157fe5b6000918252602090912001546001600160a01b0316905083613e0557806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b158015613dc157600080fd5b505afa158015613dd5573d6000803e3d6000fd5b505050506040513d60e0811015613deb57600080fd5b50602081015160a090910151955092508215613e05578293505b50600101613d48565b6000601554306001600160a01b0316632eedcb18846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e5757600080fd5b505afa158015613e6b573d6000803e3d6000fd5b505050506040513d6020811015613e8157600080fd5b50511092915050565b613e92613a48565b613e9b57600080fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b613ec5613a48565b613ece57600080fd5b601655565b60215481565b601a5481565b613ee7613a48565b613ef057600080fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b604080516355a204f960e01b8152600481018390529051600091829130916355a204f9916024808301926020929190829003018186803b158015613f5557600080fd5b505afa158015613f69573d6000803e3d6000fd5b505050506040513d6020811015613f7f57600080fd5b505190506001600160a01b038116301415613faa5750506000818152600a6020526040902054610d72565b6000819050806001600160a01b031663d68f4dd1856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b1857600080fd5b613ffb613a48565b61400457600080fd5b601755565b60205481565b6000818152600260205260408120548190819081901561404457614032856142ed565b50939850610d72975050505050505050565b60005b601954811015610d6b5760006019828154811061406057fe5b6000918252602090912001546001600160a01b03169050836140fb57806001600160a01b03166336dac2cc886040518263ffffffff1660e01b81526004018082815260200191505060e06040518083038186803b1580156140c057600080fd5b505afa1580156140d4573d6000803e3d6000fd5b505050506040513d60e08110156140ea57600080fd5b5060200151945082156140fb578493505b50600101614047565b61410c613a48565b61411557600080fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031681565b61414e613a48565b61415757600080fd5b61416081614ff5565b50565b3360009081526025602052604090205460ff161561418057600080fd5b42601f54600b5401101561419357600080fd5b61419c33614e30565b156141ee576040805162461bcd60e51b815260206004820152601a60248201527f4e6f7420616c6c6f7720636f6e747261637420746f2063616c6c000000000000604482015290519081900360640190fd5b60006141f982614cf8565b60ff16905061420a81601654614680565b5050336000908152602560205260409020805460ff1916600117905550565b614231613a48565b61423a57600080fd5b601f55565b60115460408051632b91fbb560e21b815233600482015290516001600160a01b0390921691829163ae47eed4916024808301926020929190829003018186803b15801561428b57600080fd5b505afa15801561429f573d6000803e3d6000fd5b505050506040513d60208110156142b557600080fd5b505115156001146142c557600080fd5b5060009182526006602052604090912055565b60155481565b600d546001600160a01b031681565b600090815260016020908152604080832054600283528184205460038452828520546004855283862054600586528487205460068752858820546007909752949096205492969195909490939290916001600160a01b0390911690565b60008282018381101561435c57600080fd5b90505b92915050565b81156133f3576000839050806001600160a01b0316636ddee2b984846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b505af11580156143d2573d6000803e3d6000fd5b5050505050505050565b600d54604080516331a9108f60e11b81526004810184905290516000926001600160a01b03169183918391636352211e91602480830192602092919082900301818787803b15801561442d57600080fd5b505af1158015614441573d6000803e3d6000fd5b505050506040513d602081101561445757600080fd5b505190506001600160a01b03811661446e57600080fd5b9392505050565b60008061271061448a601b5485870101615063565b8161449157fe5b06905061138881106144cc5760008381526024602052604080822054868352912054106144c257600191505061435f565b600091505061435f565b6000838152602460205260408082205486835291205410156144c257600191505061435f565b6000826145015750600061435f565b8282028284828161450e57fe5b041461435c57600080fd5b600080821161452757600080fd5b600082848161453257fe5b04949350505050565b81156133f3576000839050806001600160a01b031663b22bbb5f84846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b601b80546001019081905560125460408051634a3a1c0d60e11b81523360048201526024810193909352516000926001600160a01b039092169183918391639474381a91604480830192602092919082900301818787803b1580156145f857600080fd5b505af115801561460c573d6000803e3d6000fd5b505050506040513d602081101561462257600080fd5b50519050600161270b821061463957506006614679565b6126ed821061464a57506005614679565b612648821061465b57506004614679565b61251c821061466c57506003614679565b611b588210614679575060025b9250505090565b601b8054600101905560008083816146966150eb565b60408051600080825260208201928390529051929350670de0b6b3a764000092909182914291309133916146cd916022919061516d565b5060038863ffffffff16106146e157600095505b600d54604080516318160ddd60e01b815290516001600160a01b039092169182916318160ddd916004808301926020929190829003018186803b15801561472757600080fd5b505afa15801561473b573d6000803e3d6000fd5b505050506040513d602081101561475157600080fd5b81019080805190602001909291905050509950896001019950806001600160a01b0316638832e6e3338c60226040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156148335780601f1061480857610100808354040283529160200191614833565b820191906000526020600020905b81548152906001019060200180831161481657829003601f168201915b5050945050505050602060405180830381600087803b15801561485557600080fd5b505af1158015614869573d6000803e3d6000fd5b505050506040513d602081101561487f57600080fd5b50506015805460008c8152600160209081526040808320939093556002815282822063ffffffff8e1690819055600382528383208d9055600482528383208c9055600582528383208b9055600682528383208a90556007825283832080546001600160a01b03808b166001600160a01b03199283168117909355600885528686208054918b16919092168117909155600984528585208b9055600a84528585209490945594548451908152918201528083018c9052606081018b9052608081018a905260a0810189905260c081019390935260e08301526101008201869052518b917fe46c390f83539a71f55dae85e422a9cb62a46ba5d0df09eb6b180b0f5391cfd291908190036101200190a28863ffffffff16600614156149df5760408051338152426020820152438183015290517f5dede919f72174f8fb81fb46ca7537e0e728a37ff126021cc4dd8196b0e9c9a39181900360600190a1614b75565b8863ffffffff1660051415614a315760408051338152426020820152438183015290517ff34332f50503ac531311088dc24a12d09c5fbb788bdbf8736cbf9d0b08bc67189181900360600190a1614b75565b8863ffffffff1660041415614a835760408051338152426020820152438183015290517f8c82dac155cf31fda1bc96fc0281430b7a5748ecbb097424ac9f50c4f41fc7009181900360600190a1614b75565b8863ffffffff1660031415614ad55760408051338152426020820152438183015290517f69e83085a9253e750718be70083f23bf10806a38a9cd2cd9d1c2b6b77dbf86e19181900360600190a1614b75565b8863ffffffff1660021415614b275760408051338152426020820152438183015290517f8b8ad9ea0dc7ffd227d09b79ba6c80177f1a3830d194b1d20e392fff5cb6c7869181900360600190a1614b75565b8863ffffffff1660011415614b755760408051338152426020820152438183015290517fddd0d31c54ac67342ca77d74ba71891797ee3c66adef426259c762cbdeaa70c79181900360600190a15b600e54604080516340c10f1960e01b8152336004820152602481018f905290516001600160a01b039092169182916340c10f1991604480830192600092919082900301818387803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506000881115614c5f57600c54601054604080516340c10f1960e01b81526001600160a01b039283166004820152602481018c90529051919092169182916340c10f199160448082019260009290919082900301818387803b158015614c4557600080fd5b505af1158015614c59573d6000803e3d6000fd5b50505050505b602080546001019081905560215411614c78576000601f555b50989c9b505050505050505050505050565b81156133f3576000839050806001600160a01b031663f97f390a84846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b600082821115614cf257600080fd5b50900390565b60125460408051631bf3481560e11b81523360048201526024810184905290516000926001600160a01b031691839183916337e6902a916044808301926020929190829003018186803b158015614d4e57600080fd5b505afa158015614d62573d6000803e3d6000fd5b505050506040513d6020811015614d7857600080fd5b50519050600161270b8210614d8f57506006614dcf565b6126ed8210614da057506005614dcf565b6126488210614db157506004614dcf565b61251c8210614dc257506003614dcf565b611b588210614dcf575060025b949350505050565b81156133f3576000839050806001600160a01b0316630d36a17084846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156143be57600080fd5b3b63ffffffff16151590565b8315614eaf576000859050806001600160a01b03166306b5a2dd86846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015614e9557600080fd5b505af1158015614ea9573d6000803e3d6000fd5b50505050505b8115614f1e57604080516306b5a2dd60e01b815260048101849052600060248201819052915185926001600160a01b038416926306b5a2dd926044808301939282900301818387803b158015614f0457600080fd5b505af1158015614f18573d6000803e3d6000fd5b50505050505b5050505050565b6000808290506000614f4861271061187b601d54876144f290919063ffffffff16565b90508015614f6357614f60828263ffffffff614ce316565b91505b6000614f8061271061187b601e54886144f290919063ffffffff16565b90508015614f9b57614f98838263ffffffff614ce316565b92505b50909392505050565b60009081526001602090815260408083205460028352818420546003845282852054600485528386205460058652848720546006875285882054600a90975294909620549296919590949093929091565b6001600160a01b03811661500857600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60125460408051639ee0266360e01b81523360048201526024810184905290516000926001600160a01b0316918291639ee0266391604480820192602092909190829003018186803b1580156150b857600080fd5b505afa1580156150cc573d6000803e3d6000fd5b505050506040513d60208110156150e257600080fd5b50519392505050565b6000806103e86150fc601b54615063565b8161510357fe5b0691505090565b82805482825590600052602060002090810192821561515d579160200282015b8281111561515d5781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061512a565b506151699291506151e7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106151ae57805160ff19168380011785556151db565b828001600101855582156151db579182015b828111156151db5782518255916020019190600101906151c0565b5061516992915061520b565b61131c91905b808211156151695780546001600160a01b03191681556001016151ed565b61131c91905b80821115615169576000815560010161521156fe63d671c5a1d496967a359ab4ae80d0d3968cccb34e531a523c3ab619e427e0a1a265627a7a723158206222b33483123243010a176873f5148ce04d75b5eb58c008086f7acdf322374a64736f6c63430005100032

Deployed Bytecode Sourcemap

11049:35758:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11049:35758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33081:705;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33081:705:0;;:::i;:::-;;;;;;;;;;;;;;;;22847:235;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22847:235:0;;;;;;;:::i;:::-;;11534:78;;;:::i;:::-;;;;-1:-1:-1;;;;;11534:78:0;;;;;;;;;;;;;;23932:233;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23932:233:0;;;;;;;:::i;35921:821::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35921:821:0;;;;;;;:::i;12713:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12713:49:0;;:::i;12545:35::-;;;:::i;31558:741::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31558:741:0;;:::i;18241:96::-;;;:::i;11895:69::-;;;:::i;11803:75::-;;;:::i;11625:82::-;;;:::i;27209:2137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27209:2137:0;;;;;;;:::i;45081:191::-;;;:::i;30074:727::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30074:727:0;;:::i;18120:113::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18120:113:0;;:::i;18635:652::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18635:652:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18635:652:0;;;;;;;;;;;;;;17187:83;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17187:83:0;-1:-1:-1;;;;;17187:83:0;;:::i;34977:932::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34977:932:0;;;;;;;:::i;26149:172::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26149:172:0;;:::i;:::-;;;;;;;;;;;;;;;;;;38580:937;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38580:937:0;;;;;;;:::i;36756:706::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36756:706:0;;:::i;16919:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16919:157:0;;;;;;;:::i;45665:530::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45665:530:0;;:::i;25778:353::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25778:353:0;;:::i;44420:312::-;;;:::i;17278:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17278:83:0;-1:-1:-1;;;;;17278:83:0;;:::i;32311:758::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32311:758:0;;:::i;34564:401::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34564:401:0;;:::i;16811:96::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16811:96:0;;:::i;11372:74::-;;;:::i;20386:1925::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20386:1925:0;;;;;;;:::i;26333:327::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26333:327:0;;;;;;;:::i;12506:32::-;;;:::i;24469:235::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24469:235:0;;;;;;;:::i;17464:98::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17464:98:0;-1:-1:-1;;;;;17464:98:0;;:::i;37472:1098::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37472:1098:0;;;;;;;:::i;5086:140::-;;;:::i;12884:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12884:43:0;-1:-1:-1;;;;;12884:43:0;;:::i;17574:85::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17574:85:0;;:::i;12413:41::-;;;:::i;12462:30::-;;;:::i;19590:647::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19590:647:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4373:79;;;:::i;18016:96::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18016:96:0;-1:-1:-1;;;;;18016:96:0;;:::i;4708:92::-;;;:::i;11453:74::-;;;:::i;12246:32::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12246:32:0;;:::i;33794:378::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33794:378:0;;:::i;17788:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17788:109:0;;:::i;25004:227::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25004:227:0;;;;;;;:::i;20251:127::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20251:127:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20251:127:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20251:127:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;20251:127:0;;-1:-1:-1;20251:127:0;-1:-1:-1;20251:127:0;:::i;23388:237::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23388:237:0;;;;;;;:::i;17369:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17369:83:0;-1:-1:-1;;;;;17369:83:0;;:::i;29358:708::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29358:708:0;;:::i;45523:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45523:130:0;;:::i;46710:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46710:92:0;-1:-1:-1;;;;;46710:92:0;;:::i;16587:102::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16587:102:0;;:::i;12626:35::-;;;:::i;12285:48::-;;;:::i;17671:105::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17671:105:0;-1:-1:-1;;;;;17671:105:0;;:::i;34180:372::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34180:372:0;;:::i;16697:102::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16697:102:0;;:::i;12587:32::-;;;:::i;30809:741::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30809:741:0;;:::i;17092:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17092:83:0;-1:-1:-1;;;;;17092:83:0;;:::i;11208:75::-;;;:::i;5403:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5403:109:0;-1:-1:-1;;;;;5403:109:0;;:::i;44747:325::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44747:325:0;;:::i;17905:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17905:103:0;;:::i;25539:231::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25539:231:0;;;;;;;:::i;11977:26::-;;;:::i;11290:75::-;;;:::i;33081:705::-;33139:7;33263:13;;;:6;:13;;;;;;33139:7;;;;;;33263:18;33259:141;;33332:22;33348:5;33332:15;:22::i;:::-;-1:-1:-1;33309:45:0;;-1:-1:-1;33369:19:0;;-1:-1:-1;;;;;;;;33369:19:0;33259:141;33415:6;33410:339;33431:15;:22;33427:26;;33410:339;;;33474:23;33512:15;33528:1;33512:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33512:18:0;;-1:-1:-1;33549:7:0;33545:193;;33614:12;-1:-1:-1;;;;;33614:20:0;;33636:5;33614:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33614:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33614:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;33614:29:0;;;;;;;;;;-1:-1:-1;33614:29:0;-1:-1:-1;33667:7:0;;33663:61;;33703:2;33698:7;;33663:61;-1:-1:-1;33455:3:0;;33410:339;;;-1:-1:-1;33766:12:0;;-1:-1:-1;;;33081:705:0;;;;:::o;22847:235::-;22963:13;;22997:35;;;-1:-1:-1;;;22997:35:0;;23021:10;22997:35;;;;;;-1:-1:-1;;;;;22963:13:0;;;;;;22997:23;;:35;;;;;;;;;;;;;;22963:13;22997:35;;;5:2:-1;;;;30:1;27;20:12;5:2;22997:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22997:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22997:35:0;:41;;23034:4;22997:41;22988:52;;;;;;-1:-1:-1;23051:15:0;;;;:8;:15;;;;;;:23;22847:235::o;11534:78::-;;;-1:-1:-1;;;;;11534:78:0;;:::o;23932:233::-;24049:13;;24083:35;;;-1:-1:-1;;;24083:35:0;;24107:10;24083:35;;;;;;-1:-1:-1;;;;;24049:13:0;;;;;;24083:23;;:35;;;;;;;;;;;;;;24049:13;24083:35;;;5:2:-1;;;;30:1;27;20:12;5:2;24083:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24083:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24083:35:0;:41;;24120:4;24083:41;24074:52;;;;;;-1:-1:-1;24137:12:0;;;;:5;:12;;;;;;:20;23932:233::o;35921:821::-;14675:15;;14657;:33;14649:61;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;;;;36165:22;;;-1:-1:-1;;;36165:22:0;;;;;;;;;;36035:15;;;;;;36165:4;;:13;;:22;;;;;;;;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;36165:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36165:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36165:22:0;36208;;;-1:-1:-1;;;36208:22:0;;;;;;;;;;36165;;-1:-1:-1;36208:4:0;;:15;;:22;;;;;36165;;36208;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;36208:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36208:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36208:22:0;;-1:-1:-1;;;;;;36249:21:0;;36241:50;;;;;-1:-1:-1;;;36241:50:0;;;;;;;;;;;;-1:-1:-1;;;36241:50:0;;;;;;;;;;;;;;;36323:1;36310:10;:14;36302:45;;;;;-1:-1:-1;;;36302:45:0;;;;;;;;;;;;-1:-1:-1;;;36302:45:0;;;;;;;;;;;;;;;36371:4;-1:-1:-1;;;;;36371:12:0;;36384:5;36371:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36371:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36371:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36371:19:0;;-1:-1:-1;36420:3:0;36409:14;;36401:44;;;;;-1:-1:-1;;;36401:44:0;;;;;;;;;;;;-1:-1:-1;;;36401:44:0;;;;;;;;;;;;;;;36496:5;;36513:39;;;-1:-1:-1;;;36513:39:0;;36529:10;36513:39;;;;;;;;;;;;-1:-1:-1;;;;;36496:5:0;;;;;;36513:15;;:39;;;;;36466:16;;36513:39;;;;;;;36466:16;36496:5;36513:39;;;5:2:-1;;;;30:1;27;20:12;5:2;36513:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36513:39:0;;;;36588:28;36605:10;36588:12;:16;;:28;;;;:::i;:::-;36573:43;;36627:40;36638:7;36647:5;36654:12;36627:10;:40::i;:::-;36693:41;;;36711:10;36693:41;;;;;;;;;;36704:5;;36693:41;;;;;;;;14721:1;;;;35921:821;;:::o;12713:49::-;;;;;;;;;;;;;:::o;12545:35::-;;;;:::o;31558:741::-;31618:7;31727:13;;;:6;:13;;;;;;31618:7;;;;;;31727:18;31723:131;;31791:22;31807:5;31791:15;:22::i;:::-;-1:-1:-1;31773:40:0;;-1:-1:-1;31828:14:0;;-1:-1:-1;;;;;;;;31828:14:0;31723:131;31869:6;31864:398;31885:15;:22;31881:26;;31864:398;;;31936:23;31974:15;31990:1;31974:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31974:18:0;;-1:-1:-1;32019:7:0;32015:236;;32095:12;-1:-1:-1;;;;;32095:20:0;;32117:5;32095:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32095:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32095:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;32095:29:0;;;;;;;;;;-1:-1:-1;32095:29:0;-1:-1:-1;32156:7:0;;32152:77;;32200:2;32195:7;;32152:77;-1:-1:-1;31909:3:0;;31864:398;;18241:96;18316:13;;18241:96;;:::o;11895:69::-;;;-1:-1:-1;;;;;11895:69:0;;:::o;11803:75::-;;;-1:-1:-1;;;;;11803:75:0;;:::o;11625:82::-;;;-1:-1:-1;;;;;11625:82:0;;:::o;27209:2137::-;27287:14;27304:19;27315:7;27304:10;:19::i;:::-;27287:36;-1:-1:-1;27342:10:0;-1:-1:-1;;;;;27342:20:0;;;27334:29;;;;;;27374:14;27391:20;27402:8;27391:10;:20::i;:::-;27374:37;;27450:6;-1:-1:-1;;;;;27440:16:0;:6;-1:-1:-1;;;;;27440:16:0;;;27432:53;;;;;-1:-1:-1;;;27432:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27515:8;27504:7;:19;;27496:56;;;;;-1:-1:-1;;;27496:56:0;;;;;;;;;;;;-1:-1:-1;;;27496:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27571:20:0;;;;;;:44;;-1:-1:-1;;;;;;27595:20:0;;;;27571:44;27563:53;;;;;;27635:25;;;;:15;:25;;;;;;27627:71;;;;;-1:-1:-1;;;27627:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27719:15;27737:4;-1:-1:-1;;;;;27737:17:0;;27755:7;27737:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27737:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27737:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27737:26:0;27796:27;;;-1:-1:-1;;;27796:27:0;;;;;;;;;;27737:26;;-1:-1:-1;27774:19:0;;27796:4;;:17;;:27;;;;;27737:26;;27796:27;;;;;;;:4;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;27796:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27796:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27796:27:0;28020:24;;;-1:-1:-1;;;28020:24:0;;;;;;;;;;27796:27;;-1:-1:-1;27834:12:0;;;;;;;;;;28020:4;;:15;;:24;;;;;27796:27;;28020:24;;;;;;;:4;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;28020:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28020:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28020:24:0;28064:25;;;-1:-1:-1;;;28064:25:0;;;;;;;;;;28020:24;;-1:-1:-1;28064:4:0;;:15;;:25;;;;;28020:24;;28064:25;;;;;;;;:4;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;28064:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28064:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28064:25:0;;-1:-1:-1;;;;;;28108:20:0;;28100:50;;;;;-1:-1:-1;;;28100:50:0;;;;;;;;;;;;-1:-1:-1;;;28100:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28169:20:0;;28161:51;;;;;-1:-1:-1;;;28161:51:0;;;;;;;;;;;;-1:-1:-1;;;28161:51:0;;;;;;;;;;;;;;;28241:4;-1:-1:-1;;;;;28241:12:0;;28254:7;28241:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28241:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28241:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28241:21:0;28285:22;;;-1:-1:-1;;;28285:22:0;;;;;;;;;;28241:21;;-1:-1:-1;28285:4:0;;:12;;:22;;;;;28241:21;;28285:22;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;28285:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28285:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28285:22:0;;-1:-1:-1;28338:3:0;28326:15;;:34;;;;;28357:3;28345:9;:15;28326:34;28318:64;;;;;-1:-1:-1;;;28318:64:0;;;;;;;;;;;;-1:-1:-1;;;28318:64:0;;;;;;;;;;;;;;;28399:36;28416:7;28425:8;28399:15;:36::i;:::-;28395:916;;28477:24;28497:3;28477:15;:7;28489:2;28477:15;:11;:15;:::i;:::-;:19;:24;:19;:24;:::i;:::-;28470:31;;28540:4;28530:7;:14;28516:28;;28588:11;28574;:25;28559:40;;28625:35;28638:6;28646:7;28655:4;28625:12;:35::i;:::-;28675:44;28688:6;28696:8;28706:12;28675;:44::i;:::-;28739;;;;;;28758:5;28739:44;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28739:44:0;;;;;;;;28803:52;;;;;;28823:4;28803:52;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28803:52:0;;;;;;;;28395:916;;;28913:28;28937:3;28913:19;:11;28929:2;28913:19;:15;:19;:::i;:28::-;28906:35;;28984:4;28970:11;:18;28956:32;;29032:7;29018:11;:21;29003:36;;29069:43;29082:6;29090:7;29099:12;29069;:43::i;:::-;29127:36;29140:6;29148:8;29158:4;29127:12;:36::i;:::-;29183:51;;;;;;29202:4;29183:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29183:51:0;;;;;;;;29254:45;;;;;;29274:5;29254:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29254:45:0;;;;;;;;28395:916;-1:-1:-1;;29329:5:0;;;29337:1;29329:9;29321:17;;-1:-1:-1;;;;;;;;;27209:2137:0:o;45081:191::-;45152:6;;-1:-1:-1;;;;;45152:6:0;45138:10;:20;45129:48;;;;;-1:-1:-1;;;45129:48:0;;;;;;;;;;;;-1:-1:-1;;;45129:48:0;;;;;;;;;;;;;;;45188:13;45205:15;:13;:15::i;:::-;45188:32;;;;45231:33;45246:6;45254:8;;45231:13;:33::i;:::-;;45081:191;:::o;30074:727::-;30130:7;30245:13;;;:6;:13;;;;;;30130:7;;;;;;30245:18;30241:123;;30305:22;30321:5;30305:15;:22::i;:::-;-1:-1:-1;30291:36:0;;-1:-1:-1;30342:10:0;;-1:-1:-1;;;;;;;;30342:10:0;30241:123;30379:6;30374:394;30395:15;:22;30391:26;;30374:394;;;30446:23;30484:15;30500:1;30484:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30484:18:0;;-1:-1:-1;30529:7:0;30525:232;;30601:12;-1:-1:-1;;;;;30601:20:0;;30623:5;30601:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30601:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30601:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;30601:29:0;;;;;;;;;-1:-1:-1;30601:29:0;-1:-1:-1;30662:7:0;;30658:77;;30706:2;30701:7;;30658:77;-1:-1:-1;30419:3:0;;30374:394;;18120:113;4585:9;:7;:9::i;:::-;4577:18;;;;;;18198:13;:27;18120:113::o;18635:652::-;18690:7;18699;18708;18717;18726;18735;18744;18778:6;:13;18785:5;18778:13;;;;;;;;;;;;18795:1;18778:18;18774:505;;18831:22;18847:5;18831:15;:22::i;:::-;18824:29;;;;;;;;;;;;;;;;18774:505;18899:6;18894:321;18915:15;:22;18911:26;;18894:321;;;18962:23;19000:15;19016:1;19000:18;;;;;;;;;;;;;;;;;19058:29;;;-1:-1:-1;;;19058:29:0;;;;;;;;;;-1:-1:-1;;;;;19000:18:0;;;;-1:-1:-1;19000:18:0;;19058:20;;:29;;;;;;;;;;;;;;;19000:18;19058:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19058:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19058:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;19058:29:0;;-1:-1:-1;19111:7:0;;19107:93;;19149:12;-1:-1:-1;;;;;19149:20:0;;19171:5;19149:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19149:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19149:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;19149:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19149:29:0;;-1:-1:-1;19149:29:0;;-1:-1:-1;19149:29:0;-1:-1:-1;19149:29:0;-1:-1:-1;19149:29:0;;-1:-1:-1;19149:29:0;-1:-1:-1;19142:36:0;;-1:-1:-1;;;19142:36:0;19107:93;-1:-1:-1;;18939:3:0;;18894:321;;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;19237:1:0;;-1:-1:-1;18774:505:0;18635:652;;;;;;;;;:::o;17187:83::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17250:5;:12;;-1:-1:-1;;;;;;17250:12:0;-1:-1:-1;;;;;17250:12:0;;;;;;;;;;17187:83::o;34977:932::-;14675:15;;14657;:33;14649:61;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;;;;35249:22;;;-1:-1:-1;;;35249:22:0;;;;;;;;;;35089:15;;;;;;;;35249:4;;:13;;:22;;;;;;;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;35249:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35249:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35249:22:0;35292;;;-1:-1:-1;;;35292:22:0;;;;;;;;;;35249;;-1:-1:-1;35292:4:0;;:15;;:22;;;;;35249;;35292;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;35292:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35292:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35292:22:0;;-1:-1:-1;;;;;;35333:21:0;;35325:50;;;;;-1:-1:-1;;;35325:50:0;;;;;;;;;;;;-1:-1:-1;;;35325:50:0;;;;;;;;;;;;;;;35407:1;35394:10;:14;35386:45;;;;;-1:-1:-1;;;35386:45:0;;;;;;;;;;;;-1:-1:-1;;;35386:45:0;;;;;;;;;;;;;;;35463:4;-1:-1:-1;;;;;35463:12:0;;35476:5;35463:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35463:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35463:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35463:19:0;;-1:-1:-1;35512:3:0;35501:14;;35493:44;;;;;-1:-1:-1;;;35493:44:0;;;;;;;;;;;;-1:-1:-1;;;35493:44:0;;;;;;;;;;;;;;;35588:5;;35645:9;;35605:63;;;-1:-1:-1;;;35605:63:0;;35625:10;35605:63;;;;-1:-1:-1;;;;;35645:9:0;;;35605:63;;;;;;;;;;;;35588:5;;;;;;;35605:19;;:63;;;;;;;;;;;;;;;35558:16;35588:5;35605:63;;;5:2:-1;;;;30:1;27;20:12;5:2;35605:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35605:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;35718:4:0;35699:24;;;-1:-1:-1;35749:25:0;:12;35699:24;35749:16;:25::i;:::-;35734:40;;35795:41;35807:7;35816:5;35823:12;35795:11;:41::i;:::-;35862:39;;;35878:10;35862:39;;;;;;;;;;35871:5;;35862:39;;;;;;;;14721:1;;;;;34977:932;;:::o;26149:172::-;26213:4;26239:22;;;:15;:22;;;;;;26235:56;;-1:-1:-1;26286:5:0;26279:12;;26235:56;-1:-1:-1;26309:4:0;26149:172;;;:::o;38580:937::-;14675:15;;14657;:33;14649:61;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;;;;38810:26;;;-1:-1:-1;;;38810:26:0;;;;;;;;;;38688:16;;;;;;38810:4;;:17;;:26;;;;;;;;;;;;;;;:4;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;38810:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38810:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38810:26:0;38867:22;;;-1:-1:-1;;;38867:22:0;;;;;;;;;;38810:26;;-1:-1:-1;38867:4:0;;:15;;:22;;;;;38810:26;;38867:22;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;38867:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38867:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38867:22:0;;-1:-1:-1;;;;;;38908:21:0;;38900:50;;;;;-1:-1:-1;;;38900:50:0;;;;;;;;;;;;-1:-1:-1;;;38900:50:0;;;;;;;;;;;;;;;38961:13;38977:17;38988:5;38977:10;:17::i;:::-;38961:33;-1:-1:-1;39013:10:0;-1:-1:-1;;;;;39013:19:0;;;39005:28;;;;;;39061:1;39052:6;:10;:37;;;;;39083:6;39066:13;:23;;39052:37;39044:71;;;;;-1:-1:-1;;;39044:71:0;;;;;;;;;;;;-1:-1:-1;;;39044:71:0;;;;;;;;;;;;;;;39139:4;-1:-1:-1;;;;;39139:12:0;;39152:5;39139:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39139:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39139:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39139:19:0;;-1:-1:-1;39188:3:0;39177:14;;39169:44;;;;;-1:-1:-1;;;39169:44:0;;;;;;;;;;;;-1:-1:-1;;;39169:44:0;;;;;;;;;;;;;;;39250:25;:13;39268:6;39250:25;:17;:25;:::i;:::-;39234:41;;39286:43;39299:7;39308:5;39315:13;39286:12;:43::i;:::-;39380:5;;39425:9;;39397:59;;;-1:-1:-1;;;39397:59:0;;-1:-1:-1;;;;;39425:9:0;;;39397:59;;;;39437:10;39397:59;;;;;;;;;;;;39380:5;;;;;;;39397:19;;:59;;;;;;;;;;;;;;;39350:16;39380:5;39397:59;;;5:2:-1;;;;30:1;27;20:12;5:2;39397:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39397:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;39474:35:0;;;39490:10;39474:35;;39397:59;39474:35;;;;;;;39483:5;;39474:35;;;;;;;;14721:1;;;;;38580:937;;:::o;36756:706::-;36818:7;36933:13;;;:6;:13;;;;;;36818:7;;;;;;36933:18;36929:143;;37003:22;37019:5;37003:15;:22::i;:::-;-1:-1:-1;36979:46:0;;-1:-1:-1;37040:20:0;;-1:-1:-1;;;;;;;;37040:20:0;36929:143;37087:6;37082:340;37103:15;:22;37099:26;;37082:340;;;37146:23;37184:15;37200:1;37184:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37184:18:0;;-1:-1:-1;37221:7:0;37217:194;;37287:12;-1:-1:-1;;;;;37287:20:0;;37309:5;37287:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37287:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37287:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;37287:29:0;;;;;;;;;;-1:-1:-1;37287:29:0;-1:-1:-1;37340:7:0;;37336:61;;37376:2;37371:7;;37336:61;-1:-1:-1;37127:3:0;;37082:340;;16919:157;4585:9;:7;:9::i;:::-;4577:18;;;;;;17011:9;:21;;;;17043:11;:25;16919:157::o;45665:530::-;14579:3;14565:10;;14551:11;;:24;:31;;14543:40;;;;;;45767:10;45744:19;45756:5;45744:10;:19::i;:::-;-1:-1:-1;;;;;45744:33:0;;45735:63;;;;;-1:-1:-1;;;45735:63:0;;;;;;;;;;;;-1:-1:-1;;;45735:63:0;;;;;;;;;;;;;;;45849:5;;45893:7;;45870:20;;;-1:-1:-1;;;45870:20:0;;;;;;;;;;-1:-1:-1;;;;;45849:5:0;;;;45870:4;;:11;;:20;;;;;;;;;;;;;;:4;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;45870:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45870:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45870:20:0;:30;45866:320;;;45964:9;;45927:55;;;-1:-1:-1;;;45927:55:0;;45952:10;45927:55;;;;-1:-1:-1;;;;;45964:9:0;;;45927:55;;;;;;;;;;;;:23;;;;;;:55;;;;;45964:9;;45927:55;;;;;;;;45964:9;45927:23;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;45927:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45927:55:0;;;;46011:13;46028:15;46041:1;46028:12;:15::i;:::-;46011:32;;;;46058:13;46074:31;46089:6;46097;;46074:13;:31::i;:::-;46139:35;;;46149:10;46139:35;;;;;;;;;;;;;;;;46058:47;;-1:-1:-1;46139:35:0;;;;;;;;;;45866:320;;14594:1;45665:530;:::o;25778:353::-;25838:16;;25887:17;25898:5;25887:10;:17::i;:::-;25869:35;-1:-1:-1;25923:10:0;-1:-1:-1;;;;;25923:21:0;;;25915:30;;;;;;25968:4;-1:-1:-1;;;;;25968:15:0;;25984:5;25968:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25968:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25968:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25968:22:0;26018:7;26012:3;:13;;-1:-1:-1;25968:22:0;-1:-1:-1;26036:42:0;25968:22;26061:5;26012:13;26036:14;:42::i;:::-;26096:27;;;;;;;;;;;;;;;;;;;;;;;;;25778:353;;;:::o;44420:312::-;14401:10;14390:22;;;;:10;:22;;;;;;;;:31;14382:40;;;;;;14579:3;14565:10;;14551:11;;:24;:31;;14543:40;;;;;;44487:22;44498:10;44487;:22::i;:::-;:31;44478:71;;;;;-1:-1:-1;;;44478:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44560:13;44577:15;44590:1;44577:12;:15::i;:::-;44560:32;;;;44603;44618:6;44626:7;;44603:13;:32::i;:::-;-1:-1:-1;;44706:10:0;44695:22;;;;:10;:22;;;;;:29;;-1:-1:-1;;44695:29:0;44720:4;44695:29;;;44420:312::o;17278:83::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17341:5;:12;;-1:-1:-1;;;;;;17341:12:0;-1:-1:-1;;;;;17341:12:0;;;;;;;;;;17278:83::o;32311:758::-;32371:7;32489:13;;;:6;:13;;;;;;32371:7;;;;;;32489:18;32485:131;;32553:22;32569:5;32553:15;:22::i;:::-;32535:40;-1:-1:-1;32590:14:0;;-1:-1:-1;;;;;;;;;32590:14:0;32485:131;32631:6;32626:398;32647:15;:22;32643:26;;32626:398;;;32698:23;32736:15;32752:1;32736:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32736:18:0;;-1:-1:-1;32781:7:0;32777:236;;32857:12;-1:-1:-1;;;;;32857:20:0;;32879:5;32857:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32857:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32857:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;32857:29:0;;;;;;;;;;-1:-1:-1;32857:29:0;-1:-1:-1;32918:7:0;;32914:77;;32962:2;32957:7;;32914:77;-1:-1:-1;32671:3:0;;32626:398;;34564:401;34702:22;;;-1:-1:-1;;;34702:22:0;;;;;;;;;;34628:7;;;;34702:4;;:15;;:22;;;;;;;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;34702:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34702:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34702:22:0;;-1:-1:-1;;;;;;34739:24:0;;34758:4;34739:24;34735:215;;;-1:-1:-1;;34798:19:0;;;;:12;:19;;;;;;34791:26;;34735:215;34858:12;34885:7;34858:35;;34915:1;-1:-1:-1;;;;;34915:16:0;;34932:5;34915:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34915:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34915:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34915:23:0;;-1:-1:-1;34908:30:0;;-1:-1:-1;;34908:30:0;16811:96;4585:9;:7;:9::i;:::-;4577:18;;;;;;16882:8;:17;16811:96::o;11372:74::-;;;-1:-1:-1;;;;;11372:74:0;;:::o;20386:1925::-;20461:14;20478:18;20489:6;20478:10;:18::i;:::-;20461:35;;20507:14;20524:18;20535:6;20524:10;:18::i;:::-;20507:35;-1:-1:-1;20561:10:0;-1:-1:-1;;;;;20561:20:0;;;:44;;;;-1:-1:-1;20585:10:0;-1:-1:-1;;;;;20585:20:0;;;20561:44;20553:53;;;;;;20635:6;20625;:16;;20617:53;;;;;-1:-1:-1;;;20617:53:0;;;;;;;;;;;;-1:-1:-1;;;20617:53:0;;;;;;;;;;;;;;;-1:-1:-1;;20887:25:0;;;-1:-1:-1;;;20887:25:0;;;;;;;;;;20681:11;;;;;;;;;;;;;;20887:4;;:15;;:25;;;;;;;;;;;;;;;:4;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;20887:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20887:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20887:25:0;20929;;;-1:-1:-1;;;20929:25:0;;;;;;;;;;20887;;-1:-1:-1;20929:4:0;;:15;;:25;;;;;20887;;20929;;;;;;;;:4;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;20929:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20929:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20929:25:0;20974:23;;;-1:-1:-1;;;20974:23:0;;;;;;;;;;20929:25;;-1:-1:-1;20974:4:0;;:13;;:23;;;;;20929:25;;20974:23;;;;;;;;:4;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;20974:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20974:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20974:23:0;21017;;;-1:-1:-1;;;21017:23:0;;;;;;;;;;20974;;-1:-1:-1;21017:4:0;;:13;;:23;;;;;20974;;21017;;;;;;;;:4;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;21017:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21017:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21017:23:0;21070;;;-1:-1:-1;;;21070:23:0;;;;;;;;;;21017;;-1:-1:-1;21070:4:0;;:15;;:23;;;;;21017;;21070;;;;;;;;:4;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;21070:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21070:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21070:23:0;21113;;;-1:-1:-1;;;21113:23:0;;;;;;;;;;21070;;-1:-1:-1;21113:4:0;;:15;;:23;;;;;21070;;21113;;;;;;;;:4;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;21113:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21113:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21113:23:0;;-1:-1:-1;;;;;;21155:20:0;;21147:50;;;;;-1:-1:-1;;;21147:50:0;;;;;;;;;;;;-1:-1:-1;;;21147:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21216:20:0;;21208:50;;;;;-1:-1:-1;;;21208:50:0;;;;;;;;;;;;-1:-1:-1;;;21208:50:0;;;;;;;;;;;;;;;21302:3;21279:4;-1:-1:-1;;;;;21279:12:0;;21292:6;21279:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21279:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21279:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21279:20:0;:26;:56;;;;;21332:3;21309:4;-1:-1:-1;;;;;21309:12:0;;21322:6;21309:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21309:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21309:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21309:20:0;:26;21279:56;21271:86;;;;;-1:-1:-1;;;21271:86:0;;;;;;;;;;;;-1:-1:-1;;;21271:86:0;;;;;;;;;;;;;;;21388:1;21382:3;:7;:18;;;;;21399:1;21393:3;:7;21382:18;:31;;;;;21412:1;21404:6;:9;21382:31;:44;;;;;21425:1;21417:6;:9;21382:44;21378:926;;;21466:3;21460;:9;21454:15;;21495:11;;21489:3;:17;21485:63;;;21537:11;;21531:17;;21485:63;21617:5;;-1:-1:-1;;;;;21617:5:0;21652:15;;;21648:596;;;21704:46;21718:6;21725;21732;21739;21746:3;21704:13;:46::i;:::-;21807:9;;21770:56;;;-1:-1:-1;;;21770:56:0;;21795:10;21770:56;;;;-1:-1:-1;;;;;21807:9:0;;;21770:56;;;;;;;;;;;;:23;;;;;;:56;;;;;21807:9;;21770:56;;;;;;;;21807:9;21770:23;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;21770:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21865:30:0;;;-1:-1:-1;;;;;21865:30:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21865:30:0;;;;;;;-1:-1:-1;21865:30:0;21920:22;;;-1:-1:-1;;;;;21920:22:0;;;;;;;;;;;;;;;;;;;;;;;21648:596;;;21998:46;22012:6;22019;22026;22033;22040:3;21998:13;:46::i;:::-;22106:9;;22069:56;;;-1:-1:-1;;;22069:56:0;;22094:10;22069:56;;;;-1:-1:-1;;;;;22106:9:0;;;22069:56;;;;;;;;;;;;:23;;;;;;:56;;;;;22106:9;;22069:56;;;;;;;;22106:9;22069:23;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;22069:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22150:30:0;;;-1:-1:-1;;;;;22150:30:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22150:30:0;;;;;;;-1:-1:-1;22150:30:0;22205:22;;;-1:-1:-1;;;;;22205:22:0;;;;;;;;;;;;;;;;;;;;;;;21648:596;22264:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21378:926;;20386:1925;;;;;;;;;:::o;26333:327::-;26410:13;26426:17;26437:5;26426:10;:17::i;:::-;26410:33;-1:-1:-1;26462:10:0;-1:-1:-1;;;;;26462:19:0;;;26454:28;;;;;;26493:22;;;;:15;:22;;;;;:28;;;26536:8;;26532:120;;26565:26;;;;;;26585:4;26565:26;;;;;;;;;;;;;;;;;26532:120;;;26625:27;;;;;;26645:5;26625:27;;;;;;;;;;;;;;;;;26532:120;26333:327;;;:::o;12506:32::-;;;;:::o;24469:235::-;24582:13;;24616:35;;;-1:-1:-1;;;24616:35:0;;24640:10;24616:35;;;;;;-1:-1:-1;;;;;24582:13:0;;;;;;24616:23;;:35;;;;;;;;;;;;;;24582:13;24616:35;;;5:2:-1;;;;30:1;27;20:12;5:2;24616:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24616:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24616:35:0;:41;;24653:4;24616:41;24607:52;;;;;;-1:-1:-1;24670:18:0;;;;:11;:18;;;;;;:26;24469:235::o;17464:98::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17534:9;:20;;-1:-1:-1;;;;;;17534:20:0;-1:-1:-1;;;;;17534:20:0;;;;;;;;;;17464:98::o;37472:1098::-;14675:15;;14657;:33;14649:61;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;-1:-1:-1;;;14649:61:0;;;;;;;;;;;;;;;37699:26;;;-1:-1:-1;;;37699:26:0;;;;;;;;;;37577:16;;;;;;37699:4;;:17;;:26;;;;;;;;;;;;;;;:4;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;37699:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37699:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37699:26:0;37746:22;;;-1:-1:-1;;;37746:22:0;;;;;;;;;;37699:26;;-1:-1:-1;37746:4:0;;:15;;:22;;;;;37699:26;;37746:22;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;37746:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37746:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37746:22:0;;-1:-1:-1;;;;;;37787:21:0;;37779:50;;;;;-1:-1:-1;;;37779:50:0;;;;;;;;;;;;-1:-1:-1;;;37779:50:0;;;;;;;;;;;;;;;37857:1;37848:6;:10;37840:37;;;;;-1:-1:-1;;;37840:37:0;;;;;;;;;;;;-1:-1:-1;;;37840:37:0;;;;;;;;;;;;;;;37909:4;-1:-1:-1;;;;;37909:12:0;;37922:5;37909:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37909:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37909:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37909:19:0;;-1:-1:-1;37958:3:0;37947:14;;37939:44;;;;;-1:-1:-1;;;37939:44:0;;;;;;;;;;;;-1:-1:-1;;;37939:44:0;;;;;;;;;;;;;;;38198:5;;38255:9;;38215:59;;;-1:-1:-1;;;38215:59:0;;38235:10;38215:59;;;;-1:-1:-1;;;;;38255:9:0;;;38215:59;;;;;;;;;;;;38198:5;;;;;;;38215:19;;:59;;;;;;;;;;;;;;;38168:16;38198:5;38215:59;;;5:2:-1;;;;30:1;27;20:12;5:2;38215:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38215:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38295:19:0;;-1:-1:-1;38317:22:0;38332:6;38317:14;:22::i;:::-;38295:44;-1:-1:-1;38366:30:0;:13;38295:44;38366:30;:17;:30;:::i;:::-;38350:46;;38417:43;38430:7;38439:5;38446:13;38417:12;:43::i;:::-;38471:21;;;;:14;:21;;;;;;;;;38495:3;38471:27;;38525:37;;38538:10;38525:37;;;;;;;;;;38486:5;;38525:37;;;;;;;;14721:1;;;;;37472:1098;;:::o;5086:140::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;5185:1;5169:6;;5148:40;;-1:-1:-1;;;;;5169:6:0;;;;5148:40;;5185:1;;5148:40;5216:1;5199:19;;-1:-1:-1;;;;;;5199:19:0;;;5086:140::o;12884:43::-;;;;;;;;;;;;;;;:::o;17574:85::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17638:7;:13;17574:85::o;12413:41::-;12449:5;12413:41;:::o;12462:30::-;;;;:::o;19590:647::-;19646:7;19655;19664;19673;19682;19691;19700;19734:6;:13;19741:5;19734:13;;;;;;;;;;;;19751:1;19734:18;19730:499;;19787:23;19804:5;19787:16;:23::i;19730:499::-;19856:6;19851:323;19872:15;:22;19868:26;;19851:323;;;19919:23;19957:15;19973:1;19957:18;;;;;;;;;;;;;;;;;20015:30;;;-1:-1:-1;;;20015:30:0;;;;;;;;;;-1:-1:-1;;;;;19957:18:0;;;;-1:-1:-1;19957:18:0;;20015:21;;:30;;;;;;;;;;;;;;;19957:18;20015:30;;;5:2:-1;;;;30:1;27;20:12;5:2;20015:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20015:30:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;20015:30:0;;-1:-1:-1;20069:7:0;;20065:94;;20107:12;-1:-1:-1;;;;;20107:21:0;;20130:5;20107:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;20065:94:0;-1:-1:-1;;19896:3:0;;19851:323;;4373:79;4411:7;4438:6;-1:-1:-1;;;;;4438:6:0;4373:79;:::o;18016:96::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;18085:9;:19;;-1:-1:-1;;;;;;18085:19:0;-1:-1:-1;;;;;18085:19:0;;;;;;;;;;18016:96::o;4708:92::-;4748:4;4786:6;-1:-1:-1;;;;;4786:6:0;4772:10;:20;;4708:92::o;11453:74::-;;;-1:-1:-1;;;;;11453:74:0;;:::o;12246:32::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12246:32:0;;-1:-1:-1;12246:32:0;:::o;33794:378::-;33927:22;;;-1:-1:-1;;;33927:22:0;;;;;;;;;;33853:7;;;;33927:4;;:15;;:22;;;;;;;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;33927:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33927:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33927:22:0;;-1:-1:-1;;;;;;33964:24:0;;33983:4;33964:24;33960:205;;;-1:-1:-1;;34023:14:0;;;;:7;:14;;;;;;-1:-1:-1;;;;;34023:14:0;34016:21;;33960:205;34078:12;34105:7;34078:35;;34135:1;-1:-1:-1;;;;;34135:11:0;;34147:5;34135:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;17788:109:0;4585:9;:7;:9::i;:::-;4577:18;;;;;;17862:15;:27;17788:109::o;25004:227::-;25116:13;;25150:35;;;-1:-1:-1;;;25150:35:0;;25174:10;25150:35;;;;;;-1:-1:-1;;;;;25116:13:0;;;;;;25150:23;;:35;;;;;;;;;;;;;;25116:13;25150:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25150:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25150:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25150:35:0;:41;;25187:4;25150:41;25141:52;;;;;;-1:-1:-1;25204:11:0;;;;:4;:11;;;;;;:19;25004:227::o;20251:127::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;20340:30;:15;20358:12;;20340:30;:::i;23388:237::-;23503:13;;23537:35;;;-1:-1:-1;;;23537:35:0;;23561:10;23537:35;;;;;;-1:-1:-1;;;;;23503:13:0;;;;;;23537:23;;:35;;;;;;;;;;;;;;23503:13;23537:35;;;5:2:-1;;;;30:1;27;20:12;5:2;23537:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23537:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23537:35:0;:41;;23574:4;23537:41;23528:52;;;;;;-1:-1:-1;23591:18:0;;;;:11;:18;;;;;;:26;23388:237::o;17369:83::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17432:5;:12;;-1:-1:-1;;;;;;17432:12:0;-1:-1:-1;;;;;17432:12:0;;;;;;;;;;17369:83::o;29358:708::-;29416:7;29540:13;;;:6;:13;;;;;;29416:7;;;;;;29540:18;29536:141;;29609:22;29625:5;29609:15;:22::i;:::-;-1:-1:-1;29586:45:0;-1:-1:-1;29646:19:0;;-1:-1:-1;;;;;;;;29646:19:0;29536:141;29692:6;29687:339;29708:15;:22;29704:26;;29687:339;;;29751:23;29789:15;29805:1;29789:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29789:18:0;;-1:-1:-1;29826:7:0;29822:193;;29891:12;-1:-1:-1;;;;;29891:20:0;;29913:5;29891:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29891:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29891:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;29891:29:0;;;;;;;;;;-1:-1:-1;29891:29:0;-1:-1:-1;29944:7:0;;29940:61;;29980:2;29975:7;;29940:61;-1:-1:-1;29732:3:0;;29687:339;;45523:130;45582:4;45636:7;;45613:4;-1:-1:-1;;;;;45613:11:0;;45626:5;45613:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45613:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45613:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45613:20:0;:30;;45523:130;-1:-1:-1;;45523:130:0:o;46710:92::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;46780:6;:14;;-1:-1:-1;;;;;;46780:14:0;-1:-1:-1;;;;;46780:14:0;;;;;;;;;;46710:92::o;16587:102::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;16661:7;:20;16587:102::o;12626:35::-;;;;:::o;12285:48::-;;;;:::o;17671:105::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17745:13;:23;;-1:-1:-1;;;;;;17745:23:0;-1:-1:-1;;;;;17745:23:0;;;;;;;;;;17671:105::o;34180:372::-;34311:22;;;-1:-1:-1;;;34311:22:0;;;;;;;;;;34237:7;;;;34311:4;;:15;;:22;;;;;;;;;;;;;;:4;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;34311:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34311:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34311:22:0;;-1:-1:-1;;;;;;34348:24:0;;34367:4;34348:24;34344:201;;;-1:-1:-1;;34407:12:0;;;;:5;:12;;;;;;34400:19;;34344:201;34460:12;34487:7;34460:35;;34517:1;-1:-1:-1;;;;;34517:9:0;;34527:5;34517:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;16697:102:0;4585:9;:7;:9::i;:::-;4577:18;;;;;;16773:6;:18;16697:102::o;12587:32::-;;;;:::o;30809:741::-;30867:7;30974:13;;;:6;:13;;;;;;30867:7;;;;;;30974:18;30970:127;;31036:22;31052:5;31036:15;:22::i;:::-;-1:-1:-1;31020:38:0;;-1:-1:-1;31073:12:0;;-1:-1:-1;;;;;;;;31073:12:0;30970:127;31112:6;31107:397;31128:15;:22;31124:26;;31107:397;;;31179:23;31217:15;31233:1;31217:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31217:18:0;;-1:-1:-1;31262:7:0;31258:235;;31334:12;-1:-1:-1;;;;;31334:20:0;;31356:5;31334:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31334:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31334:29:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;31334:29:0;;;;-1:-1:-1;31395:7:0;;31391:80;;31439:5;31434:10;;31391:80;-1:-1:-1;31152:3:0;;31107:397;;17092:83;4585:9;:7;:9::i;:::-;4577:18;;;;;;17155:5;:12;;-1:-1:-1;;;;;;17155:12:0;-1:-1:-1;;;;;17155:12:0;;;;;;;;;;17092:83::o;11208:75::-;;;-1:-1:-1;;;;;11208:75:0;;:::o;5403:109::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;5476:28;5495:8;5476:18;:28::i;:::-;5403:109;:::o;44747:325::-;14401:10;14390:22;;;;:10;:22;;;;;;;;:31;14382:40;;;;;;14579:3;14565:10;;14551:11;;:24;:31;;14543:40;;;;;;44832:22;44843:10;44832;:22::i;:::-;:31;44823:71;;;;;-1:-1:-1;;;44823:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44905:13;44922:20;44935:6;44922:12;:20::i;:::-;44905:37;;;;44953:32;44968:6;44976:7;;44953:13;:32::i;:::-;-1:-1:-1;;45046:10:0;45035:22;;;;:10;:22;;;;;:29;;-1:-1:-1;;45035:29:0;45060:4;45035:29;;;-1:-1:-1;44747:325:0:o;17905:103::-;4585:9;:7;:9::i;:::-;4577:18;;;;;;17978:10;:22;17905:103::o;25539:231::-;25653:13;;25687:35;;;-1:-1:-1;;;25687:35:0;;25711:10;25687:35;;;;;;-1:-1:-1;;;;;25653:13:0;;;;;;25687:23;;:35;;;;;;;;;;;;;;25653:13;25687:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25687:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25687:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25687:35:0;:41;;25724:4;25687:41;25678:52;;;;;;-1:-1:-1;25741:13:0;;;;:6;:13;;;;;;:21;25539:231::o;11977:26::-;;;;:::o;11290:75::-;;;-1:-1:-1;;;;;11290:75:0;;:::o;18349:278::-;18414:7;18502:11;;;:4;:11;;;;;;;;;18515:6;:13;;;;;;18530:8;:15;;;;;;18547:11;:18;;;;;;18567:11;:18;;;;;;18587:6;:13;;;;;;18602:8;:15;;;;;;;;18502:11;;18515:13;;18530:15;;18547:18;;18567;18587:13;;-1:-1:-1;;;;;18602:15:0;;;;18349:278::o;8684:150::-;8742:7;8774:5;;;8798:6;;;;8790:15;;;;;;8825:1;-1:-1:-1;8684:150:0;;;;;:::o;24175:282::-;24288:10;;24284:166;;24341:13;24369:8;24341:37;;24401:2;-1:-1:-1;;;;;24401:12:0;;24415:6;24423:5;24401:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24401:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24401:29:0;;;;24284:166;24175:282;;;:::o;39732:226::-;39834:5;;39867:21;;;-1:-1:-1;;;39867:21:0;;;;;;;;;;39784:7;;-1:-1:-1;;;;;39834:5:0;;39784:7;;39834:5;;39867:14;;:21;;;;;;;;;;;;;;39784:7;39834:5;39867:21;;;5:2:-1;;;;30:1;27;20:12;5:2;39867:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39867:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39867:21:0;;-1:-1:-1;;;;;;39907:19:0;;39899:28;;;;;;39945:5;39732:226;-1:-1:-1;;;39732:226:0:o;26668:533::-;26753:4;26776:11;26840:5;26790:47;26830:5;;26819:8;26808:7;:19;:27;26790:16;:47::i;:::-;:55;;;;;;26776:69;;26868:4;26861:3;:11;26856:338;;26932:25;;;;:15;:25;;;;;;;26904:24;;;;;;:53;26900:87;;26983:4;26976:11;;;;;26900:87;27011:5;27004:12;;;;;26856:338;27098:25;;;;:15;:25;;;;;;;27071:24;;;;;;:52;27067:86;;;27149:4;27142:11;;;;;6114:433;6172:7;6416:6;6412:47;;-1:-1:-1;6446:1:0;6439:8;;6412:47;6483:5;;;6487:1;6483;:5;:1;6507:5;;;;;:10;6499:19;;;;;7319:303;7377:7;7476:1;7472;:5;7464:14;;;;;;7489:9;7505:1;7501;:5;;;;;;;7319:303;-1:-1:-1;;;;7319:303:0:o;23090:286::-;23205:10;;23201:168;;23258:13;23286:8;23258:37;;23318:2;-1:-1:-1;;;;;23318:14:0;;23334:6;23342:5;23318:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;15761:650:0;15836:5;;;15844:1;15836:9;15828:17;;;;15884:9;;15919:37;;;-1:-1:-1;;;15919:37:0;;15939:10;15919:37;;;;;;;;;;;;15804:5;;-1:-1:-1;;;;;15884:9:0;;;;15804:5;;15884:9;;15919:19;;:37;;;;;;;;;;;;;;15804:5;15884:9;15919:37;;;5:2:-1;;;;30:1;27;20:12;5:2;15919:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15919:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15919:37:0;;-1:-1:-1;15994:1:0;16020:4;16013:11;;16008:363;;-1:-1:-1;16053:1:0;16008:363;;;16098:4;16091:3;:11;16086:285;;-1:-1:-1;16129:1:0;16086:285;;;16173:4;16166:3;:11;16161:210;;-1:-1:-1;16205:1:0;16161:210;;;16249:4;16242:3;:11;16237:134;;-1:-1:-1;16281:1:0;16237:134;;;16325:4;16318:3;:11;16313:58;;-1:-1:-1;16356:1:0;16313:58;16390:5;-1:-1:-1;;;15761:650:0;:::o;41710:2490::-;41825:5;;;41833:1;41825:9;41817:17;;41787:7;;41896:12;41787:7;41938:16;:14;:16::i;:::-;42203:12;;;41965:18;42203:12;;;;;;;;;;42195:20;;41919:35;;-1:-1:-1;41986:19:0;;41965:18;;;;42099:3;;42139:4;;42172:10;;42195:20;;:5;;42203:12;42195:20;:::i;:::-;;42239:1;42230:5;:10;;;42226:67;;42280:1;42267:14;;42226:67;42335:5;;42357:20;;;-1:-1:-1;;;42357:20:0;;;;-1:-1:-1;;;;;42335:5:0;;;;;;42357:18;;:20;;;;;;;;;;;;;;42335:5;42357:20;;;5:2:-1;;;;30:1;27;20:12;5:2;42357:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42357:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42357:20:0;;;;;;;;;;;;;;;;42352:25;;42393:2;42398:1;42393:6;42388:11;;42410:6;-1:-1:-1;;;;;42410:15:0;;42426:10;42438:2;42442:5;42410:38;;;;;;;;;;;;;-1:-1:-1;;;;;42410:38:0;-1:-1:-1;;;;;42410:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42410:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42410:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;42480:7:0;;;42469:8;;;;:4;42410:38;42469:8;;;;;;;:18;;;;42498:6;:10;;;;;:18;;;;;;;42527:8;:12;;;;;:22;;;42560:11;:15;;;;;:28;;;42599:11;:15;;;;;:28;;;42638:6;:10;;;;;:18;;;42675:8;:12;;;;;:22;;-1:-1:-1;;;;;42675:22:0;;;-1:-1:-1;;;;;;42675:22:0;;;;;;;;42708:7;:11;;;;;:20;;;;;;;;;;;;;;42739:12;:16;;;;;:30;;;42780:5;:9;;;;;:13;;;;42835:7;;42816:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42675:22;42816:105;;;;;;42474:2;;42816:105;;;;;;;;;;42937:5;:10;;42946:1;42937:10;42932:759;;;42980:50;;;42988:10;42980:50;;43000:15;42980:50;;;;43017:12;42980:50;;;;;;;;;;;;;;;42932:759;;;43063:5;:10;;43072:1;43063:10;43058:633;;;43106:50;;;43114:10;43106:50;;43126:15;43106:50;;;;43143:12;43106:50;;;;;;;;;;;;;;;43058:633;;;43192:5;:10;;43201:1;43192:10;43187:504;;;43235:50;;;43243:10;43235:50;;43255:15;43235:50;;;;43272:12;43235:50;;;;;;;;;;;;;;;43187:504;;;43320:5;:10;;43329:1;43320:10;43315:376;;;43363:50;;;43371:10;43363:50;;43383:15;43363:50;;;;43400:12;43363:50;;;;;;;;;;;;;;;43315:376;;;43456:5;:10;;43465:1;43456:10;43451:240;;;43499:50;;;43507:10;43499:50;;43519:15;43499:50;;;;43536:12;43499:50;;;;;;;;;;;;;;;43451:240;;;43585:5;:10;;43594:1;43585:10;43580:111;;;43628:50;;;43636:10;43628:50;;43648:15;43628:50;;;;43665:12;43628:50;;;;;;;;;;;;;;;43580:111;43753:5;;43770:30;;;-1:-1:-1;;;43770:30:0;;43783:10;43770:30;;;;;;;;;;;;-1:-1:-1;;;;;43753:5:0;;;;;;43770:11;;:30;;;;;43724:16;;43770:30;;;;;;;43724:16;43753:5;43770:30;;;5:2:-1;;;;30:1;27;20:12;5:2;43770:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43770:30:0;;;;43838:1;43825:10;:14;43821:155;;;43896:5;;43938:9;;43917:46;;;-1:-1:-1;;;43917:46:0;;-1:-1:-1;;;;;43938:9:0;;;43917:46;;;;;;;;;;;;43896:5;;;;;;;43917:11;;:46;;;;;43866:16;;43917:46;;;;;;;;43866:16;43896:5;43917:46;;;5:2:-1;;;;30:1;27;20:12;5:2;43917:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43917:46:0;;;;43821:155;;44017:13;;;44033:1;44017:17;44001:33;;;;44066:13;;-1:-1:-1;44045:118:0;;44120:1;44107:10;:14;44045:118;-1:-1:-1;44190:2:0;;41710:2490;-1:-1:-1;;;;;;;;;;;;41710:2490:0:o;25243:284::-;25357:10;;25353:167;;25410:13;25438:8;25410:37;;25470:2;-1:-1:-1;;;;;25470:13:0;;25485:6;25493:5;25470:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;8181:150:0;8239:7;8272:1;8267;:6;;8259:15;;;;;;-1:-1:-1;8297:5:0;;;8181:150::o;15071:682::-;15179:9;;15214:37;;;-1:-1:-1;;;15214:37:0;;15233:10;15214:37;;;;;;;;;;;;15131:5;;-1:-1:-1;;;;;15179:9:0;;15131:5;;15179:9;;15214:18;;:37;;;;;;;;;;;;;;15179:9;15214:37;;;5:2:-1;;;;30:1;27;20:12;5:2;15214:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15214:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15214:37:0;;-1:-1:-1;15289:1:0;15315:4;15308:11;;15303:404;;-1:-1:-1;15357:1:0;15303:404;;;15402:4;15395:3;:11;15390:317;;-1:-1:-1;15443:1:0;15390:317;;;15487:4;15480:3;:11;15475:232;;-1:-1:-1;15528:1:0;15475:232;;;15572:4;15565:3;:11;15560:147;;-1:-1:-1;15610:1:0;15560:147;;;15654:4;15647:3;:11;15642:65;;-1:-1:-1;15692:1:0;15642:65;15726:5;15071:682;-1:-1:-1;;;;15071:682:0:o;23635:285::-;23750:9;;23746:167;;23802:13;23830:7;23802:36;;23861:2;-1:-1:-1;;;;;23861:16:0;;23879:5;23886;23861:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;44208:204:0;44344:18;44395:8;;;;;44208:204::o;22329:506::-;22479:10;;22475:169;;22532:13;22560:8;22532:37;;22592:2;-1:-1:-1;;;;;22592:15:0;;22609:6;22617:5;22592:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22592:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22592:32:0;;;;22475:169;;22666:10;;22662:166;;22779:29;;;-1:-1:-1;;;22779:29:0;;;;;;;;22719:13;22779:29;;;;;;;;22747:8;;-1:-1:-1;;;;;22779:15:0;;;;;:29;;;;;22719:13;22779:29;;;;;22719:13;22779:15;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;22779:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22779:29:0;;;;22662:166;;22329:506;;;;;:::o;46207:477::-;46269:7;46296:18;46317:5;46296:26;;46333:15;46351:37;12449:5;46352:20;46362:9;;46352:5;:9;;:20;;;;:::i;46351:37::-;46333:55;-1:-1:-1;46403:11:0;;46399:83;;46443:23;:10;46458:7;46443:23;:14;:23;:::i;:::-;46430:36;;46399:83;46492:17;46512:39;12449:5;46513:22;46523:11;;46513:5;:9;;:22;;;;:::i;46512:39::-;46492:59;-1:-1:-1;46566:13:0;;46562:87;;46608:25;:10;46623:9;46608:25;:14;:25;:::i;:::-;46595:38;;46562:87;-1:-1:-1;46666:10:0;;46207:477;-1:-1:-1;;;46207:477:0:o;19299:279::-;19365:7;19456:11;;;:4;:11;;;;;;;;;19469:6;:13;;;;;;19484:8;:15;;;;;;19501:11;:18;;;;;;19521:11;:18;;;;;;19541:6;:13;;;;;;19556:5;:12;;;;;;;;19456:11;;19469:13;;19484:15;;19501:18;;19521;19541:13;;19299:279::o;5662:187::-;-1:-1:-1;;;;;5736:22:0;;5728:31;;;;;;5796:6;;;5775:38;;-1:-1:-1;;;;;5775:38:0;;;;5796:6;;;5775:38;;;5824:6;:17;;-1:-1:-1;;;;;;5824:17:0;-1:-1:-1;;;;;5824:17:0;;;;;;;;;;5662:187::o;14879:184::-;14993:9;;15021:34;;;-1:-1:-1;;;15021:34:0;;15040:10;15021:34;;;;;;;;;;;;14943:7;;-1:-1:-1;;;;;14993:9:0;;;;15021:18;;:34;;;;;;;;;;;;;;;14993:9;15021:34;;;5:2:-1;;;;30:1;27;20:12;5:2;15021:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15021:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15021:34:0;;14879:184;-1:-1:-1;;;14879:184:0:o;16423:156::-;16472:7;16494:11;16536:4;16508:25;16526:5;;16508:16;:25::i;:::-;:32;;;;;;;-1:-1:-1;;16423:156:0;:::o;11049:35758::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11049:35758:0;-1:-1:-1;;;;;11049:35758:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;11049:35758:0;;;-1:-1:-1;11049:35758:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11049:35758:0;;;-1:-1:-1;11049:35758:0;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;11049:35758:0;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://6222b33483123243010a176873f5148ce04d75b5eb58c008086f7acdf322374a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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