ETH Price: $3,328.45 (+1.83%)
Gas: 6 Gwei

Token

Lulz (LULZ)
 

Overview

Max Total Supply

123,904 LULZ

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
$Lulz

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-11
*/

// SPDX-License-Identifier: MIT
//I WENT TO MIT

pragma solidity ^0.8.18;

interface Callable {
    function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface ERC20Interface {
    function balanceOf(address) external view returns (uint256);
    function allowance(address, address) external view returns (uint256);
    function transfer(address, uint256) external returns (bool);
    function transferFrom(address, address, uint256) external returns (bool);
}


library Math {
    
    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }


    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }
}

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404 is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) private _owned;
    function getLastOwnedTokenId(address owner) internal view returns (uint256) {
        require(_owned[owner].length > 0, "Owner has no tokens");
        return _owned[owner][_owned[owner].length - 1];
    }
    function getOwnedTokens(address owner) public view returns(uint[] memory){
        return _owned[owner];
    }

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
        setWhitelist(_owner,true);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    /// Primarily for backwards compatibility with legacy contracts
    function setWhitelist(address target, bool state) public onlyOwner {
        if(balanceOf[target]==0)
            whitelist[target] = state;
    }
    
    function systemSetWhitelist(address target) internal {
        if(balanceOf[target]==0)
            whitelist[target] = true;
    }

    /// @notice Allows a user to control if they want to receive NFTs or not
    function setWhitelist(bool state) public {
        address sender = msg.sender;
        if(balanceOf[sender]==0)
            whitelist[sender] = state;
    }
    function setWhitelist() public {
        address sender = msg.sender;
        if(balanceOf[sender]==0)
            whitelist[sender] = !whitelist[sender];
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted && !whitelist[to]){
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ){
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ){
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

contract $Lulz is ERC404 {
    string public baseTokenURI;
    address ANON = 0x1f0eFA15e9cB7ea9596257DA63fECc36ba469b30;
    ERC404 $ANON = ERC404(ANON);
    uint256 deckSize = 352**2;
    address THIS = address(this);
    Renderer renderer = Renderer(THIS);
    bool active;

    constructor() ERC404("Lulz", "LULZ", 18, deckSize, msg.sender){
        balanceOf[THIS] = deckSize * 10 ** 18;
        $ANON.setWhitelist();
        whitelist[THIS] = true;
    }

    function ensureWhitelist() public onlyOwner {
        $ANON.setWhitelist();
    }

    function activate() public onlyOwner {
        active = true;
    }

    function setBranding(string memory _name,string memory _symbol,string memory _brand) public onlyOwner {
        _setNameSymbol(_name, _symbol);
        brand = _brand;
    }

    function setRenderer(address addr) public onlyOwner {
        renderer = Renderer(addr);
    }

    function setTokenURI(string memory _tokenURI) public onlyOwner {
        baseTokenURI = _tokenURI;
    }

    function sacrifice(uint256 amount) external {
        address sender = msg.sender;
        systemSetWhitelist(sender);
        require( (active || sender == owner) && amount>=1000000000 && _transfer(THIS, sender,352*amount) );
        $ANON.transferFrom(sender,THIS,amount);
    }

    function rebirth() external {
        address sender = msg.sender;
        uint unit = _getUnit();
        require( _transfer(sender, THIS, 352*unit) && $ANON.transfer(sender,unit) );
    }

    uint slots = deckSize;
    mapping(uint=>uint) public slot;
    mapping(uint=>bool) usedSlot;
    mapping(uint=>uint) public card_used_by_ID;

    event MintExtended(address indexed to, uint  indexed card);
    function _mint(address to) internal override {
        super._mint(to);
        uint id = this.minted();

        uint slotID = uint(keccak256(abi.encodePacked(id,blockhash(block.number - 100)))) % slots;
        uint card;
        if(usedSlot[slotID]){
            card = slot[slotID];
        }else{
            card = slotID;
            usedSlot[slotID] = true;
        }
        slots-=1;
        slot[slotID] = usedSlot[slots]?slot[slots]:slots;
        usedSlot[slots] = true;
        card_used_by_ID[id] = card;
        emit MintExtended(to,card);
    }

    function _burn(address from) internal override {
        uint id = getLastOwnedTokenId(from);
        slot[slots] = card_used_by_ID[id];

        slots+=1;
        super._burn(from);
    }
    
    function tokenURI(uint256 id) public view override returns (string memory) {
        if (bytes(baseTokenURI).length > 0) {
            return string.concat(baseTokenURI, Strings.toString(card_used_by_ID[id]) );
        } else {
            return
                string.concat(
                    "data:application/json;utf8,",
                    renderer.json(id)
                );
        }
    }

    string public baseURI = 'https://ipfs.io/ipfs/bafybeifizps3lxiqyxjbxzumw6jrpiiu5h622zf7ntg7ggfaa4jnznjfde/';
    uint public imageCount = 450;
    string public website;
    string public brand = "Lulz";
    string public description = "A legion of 123904 $Lulz ratio locked with $ANON 352:1";

    function setCardData(uint _imageCount, string memory _baseURI) public onlyOwner{
        imageCount = _imageCount;
        baseURI = _baseURI;
    }

    function setWebsite(string memory _website) public onlyOwner{
        website = _website;
    }
    

    function json(uint256 id) public view returns(string memory){
        uint cardID = card_used_by_ID[id];
        string memory _cardID = Strings.toString( cardID );

        string memory jsonPreImage = string.concat(
            string.concat(
                string.concat(string3('{"name": "',brand,' #'), string.concat( _cardID, string.concat('", "id":',  Strings.toString(id) ) ) ),
                    string.concat( string3(',"description":"',description,'","external_url":"'),
                        string.concat(website,'","image":"data:image/svg+xml;utf8,')
                        )
            ),
            constructSVG(cardID,id)
        );

        return string.concat(jsonPreImage, ',"attributes":[]}');
    }
    
    function coords(uint P) public pure returns(uint[] memory){
        uint[] memory xy;
        uint p = P/2;
        if(P<4){
            if(P==0){
                //250,0 500,250 250,500 0,250
                xy = new uint[](8);xy[0]=250;xy[2]=500;xy[3]=250;xy[4]=250;xy[5]=500;xy[7]=250;
            }else if(P==1){
                //0,0 125,0 250,150 375,0 500,0 500,125 350,250 500,375 500,500 375,500 250,350 125,500 0,500 0,375 150,250 0,125
                xy = new uint[](32);
                xy[2]=125;xy[4]=250;xy[5]=150;xy[6]=375;xy[8]=500;xy[10]=500;xy[11]=125;xy[12]=350;xy[13]=250;xy[14]=500;xy[15]=375;
                xy[16]=500;xy[17]=500;xy[18]=375;xy[19]=500;xy[20]=250;xy[21]=350;xy[22]=125;xy[23]=500;xy[25]=500;xy[27]=375;xy[28]=150;xy[29]=250;xy[31]=125;
            }else if(P==2){
                //60,60 440,60 440,440 60,440
                xy = new uint[](8);xy[0]=60;xy[1]=60;xy[2]=440;xy[3]=60;xy[4]=440;xy[5]=440;xy[6]=60;xy[7]=440;
            }else if(P==3){
                //50,250 125,75 375,75 450,250 375,425 125,425
                xy = new uint[](12);xy[0]=50;xy[1]=250;xy[2]=125;xy[3]=75;xy[4]=375;xy[5]=75;xy[6]=450;xy[7]=250;xy[8]=375;xy[9]=425;xy[10]=125;xy[11]=425;
            }
        }else if(P>3 && P<12){
            if(p==2){
                //0,350 350,0 500,0 500,150 150,500 0,500
                xy = new uint[](12);xy[1]=350;xy[2]=350;xy[4]=500;xy[6]=500;xy[7]=150;xy[8]=150;xy[9]=500;xy[10]=0;xy[11]=500;
            }else if(p==3){
                //0,0 500,0 0,500
                xy = new uint[](6);xy[2]=500;xy[5]=500;
            }else if(p==4){
                //0,0 400,0 400,400 0,400
                xy = new uint[](8);xy[2]=400;xy[4]=400;xy[5]=400;xy[7]=400;
            }else if(p==5){
                //0,75 75,75 75,0 150,0 150,75 500,75 500,150 150,150 150,500 75,500 75,150 0,150
                xy = new uint[](24);xy[1]=75;xy[2]=75;xy[3]=75;xy[4]=75;xy[6]=150;xy[8]=150;xy[9]=75;xy[10]=500;xy[11]=75;
                xy[12]=500;xy[13]=150;xy[14]=150;xy[15]=150;xy[16]=150;xy[17]=500;xy[18]=75;xy[19]=500;xy[20]=75;xy[21]=150;xy[23]=150;
            }
            if(P%2==1){//flip on y axis
                for(uint i;i<xy.length;i+=2){
                    xy[i] = 500 - xy[i];
                }
            }
        }else if(P>11 && P<18){
            if(p==6){
                //100,0 375,0 375,500 100,500
                xy = new uint[](8);xy[0]=100;xy[2]=375;xy[4]=375;xy[5]=500;xy[6]=100;xy[7]=500;
                //
            }else if(p==7){
                //0,0 0,250 500,250 500,0
                xy = new uint[](8);xy[3]=250;xy[4]=500;xy[5]=250;xy[6]=500;
                //
            }else if(p==8){
                //75,0 425,0 325,250 425,500 75,500 175,250
                xy = new uint[](12);xy[0]=75;xy[2]=425;xy[4]=325;xy[5]=250;xy[6]=425;xy[7]=500;xy[8]=75;xy[9]=500;xy[10]=175;xy[11]=250;
                //
            }
            if(P%2==1){//rotate
                uint t;
                for(uint i;i<xy.length;i+=2){
                    t = xy[i];
                    xy[i] = xy[i+1];
                    xy[i+1] = t;
                }
            }
        }else{
            //250,0 500,500 0,500
            xy = new uint[](6);xy[0]=250;xy[2]=500;xy[3]=500;xy[5]=500;
            if(P%2==1){//flip on x axis
                for(uint i;i<xy.length;i+=2){
                    xy[i+1] = 500 - xy[i+1];
                }
            }
        }
        return xy;
    }

    function polygonPath(uint patternID) public pure returns(string memory){
        uint[] memory xy = coords(patternID);
        string memory str = '';

        string[] memory parts = new string[](5);

        for(uint i;i<xy.length;i+=2){
            parts[0] = ' ';
            parts[1] = Strings.toString( xy[i] );
            parts[2] = ',';
            parts[3] = Strings.toString( xy[i+1] );
            parts[4] = ' ';
            str = string.concat(str, rope(parts) );
        }
        return str;
    }

    function string3 (string memory str1, string memory str2, string memory str3) public pure returns(string memory){
        string[] memory parts = new string[](3);
        parts[0] = str1;
        parts[1] = str2;
        parts[2] = str3;
        return rope(parts);
    }

    function rope(string[] memory stringsArray) public pure returns (string memory) {
        string memory concatenatedString;
        
        for (uint256 i = 0; i < stringsArray.length; i++) {
            concatenatedString = string.concat(concatenatedString, stringsArray[i]);
        }
        
        return concatenatedString;
    }

    function constructSVG(uint cardID,uint id) public view returns (string memory){
        uint image1 = uint(keccak256(abi.encodePacked("Phase 1.) Use the protocol as a dirty oracle for a predictions market to achieve critical mass.",cardID)))%imageCount;
        uint image2 = uint(keccak256(abi.encodePacked("Phase 2.) Use the governance protocol to secure the surveillance of real-world computational infrastructure.",cardID)))%imageCount;
        uint pattern = uint(keccak256(abi.encodePacked("Phase 3.) ???",cardID)))%20;
        while(image1 == image2){
            image2 = uint(keccak256(abi.encodePacked("Phase 4.) Profit",++cardID)))%imageCount;
        }
        string memory clippath = Strings.toString( id );
        string[] memory parts = new string[](14);
        parts[0] = '<svg width=\\"500\\" height=\\"500\\" xmlns=\\"http://www.w3.org/2000/svg\\"><image href=\\"';
        parts[1] = baseURI;
        parts[2] = Strings.toString(image1);
        parts[3] = '.png\\" width=\\"500\\" height=\\"500\\" />';
        parts[4] = '<clipPath id=\\"anonlulz';
        parts[5] = clippath;
        parts[6] = '\\"><polygon points=\\"';
        parts[7] = polygonPath(pattern);
        parts[8] = '\\" /></clipPath><image href=\\"';
        parts[9] = baseURI;
        parts[10] = Strings.toString(image2);
        parts[11] = '.png\\" width=\\"500\\" height=\\"500\\" clip-path=\\"url(#anonlulz';
        parts[12] = clippath;
        parts[13] = ')\\" /></svg>"';
        
        return rope(parts);
    }

    function gallery(address addr, uint offset, uint length) public view returns(string memory galleryJson ){
        galleryJson = '[';
        uint[] memory IDs = getOwnedTokens(addr);
        if (offset==0 && length==0){
            length = IDs.length;
        }
        for(uint i=offset;i<length;i++){
            galleryJson = string.concat(galleryJson,renderer.json(IDs[i]) );
            if(i!=IDs.length-1){
                galleryJson = string.concat(galleryJson,',');
            }
        }
        galleryJson = string.concat(galleryJson,']');
    }
}

abstract contract Renderer{
    function json(uint id) public view virtual returns(string memory);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"card","type":"uint256"}],"name":"MintExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"brand","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"card_used_by_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"cardID","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"constructSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"P","type":"uint256"}],"name":"coords","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ensureWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"gallery","outputs":[{"internalType":"string","name":"galleryJson","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imageCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"json","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"patternID","type":"uint256"}],"name":"polygonPath","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"rebirth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"stringsArray","type":"string[]"}],"name":"rope","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sacrifice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_brand","type":"string"}],"name":"setBranding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_imageCount","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setCardData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setRenderer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_website","type":"string"}],"name":"setWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"slot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"str1","type":"string"},{"internalType":"string","name":"str2","type":"string"},{"internalType":"string","name":"str3","type":"string"}],"name":"string3","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"website","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

600d8054731f0efa15e9cb7ea9596257da63fecc36ba469b306001600160a01b03199182168117909255600e805482169092179091556201e400600f819055601080543090841681179091556011805490931617909155601255610140604052605160c08181529062004f5d60e0396016906200007d9082620003b8565b506101c2601755604080518082019091526004815263263ab63d60e11b6020820152601990620000ae9082620003b8565b5060405180606001604052806036815260200162004fae60369139601a90620000d89082620003b8565b50348015620000e5575f80fd5b5060405180604001604052806004815260200163263ab63d60e11b81525060405180604001604052806004815260200163262aa62d60e11b8152506012600f5433805f6001600160a01b0316816001600160a01b0316036200015a576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620001b08682620003b8565b506002620001bf8582620003b8565b5060ff83166080819052620001d690600a62000593565b620001e29083620005aa565b60a052620001f2816001620002a9565b5050505050600f54670de0b6b3a76400006200020f9190620005aa565b6010546001600160a01b039081165f90815260046020819052604080832094909455600e54845163b923b20560e01b8152945193169363b923b205938183019392909182900301818387803b15801562000267575f80fd5b505af11580156200027a573d5f803e3d5ffd5b50506010546001600160a01b03165f908152600b60205260409020805460ff1916600117905550620005c49050565b5f546001600160a01b03163314620002d3576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f90815260046020526040812054900362000316576001600160a01b0382165f908152600b60205260409020805460ff19168215151790555b5050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200034357607f821691505b6020821081036200036257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003b357805f5260205f20601f840160051c810160208510156200038f5750805b601f840160051c820191505b81811015620003b0575f81556001016200039b565b50505b505050565b81516001600160401b03811115620003d457620003d46200031a565b620003ec81620003e584546200032e565b8462000368565b602080601f83116001811462000422575f84156200040a5750858301515b5f19600386901b1c1916600185901b1785556200047c565b5f85815260208120601f198616915b82811015620004525788860151825594840194600190910190840162000431565b50858210156200047057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004d857815f1904821115620004bc57620004bc62000484565b80851615620004ca57918102915b93841c93908002906200049d565b509250929050565b5f82620004f0575060016200058d565b81620004fe57505f6200058d565b8160018114620005175760028114620005225762000542565b60019150506200058d565b60ff84111562000536576200053662000484565b50506001821b6200058d565b5060208310610133831016604e8410600b841016171562000567575081810a6200058d565b62000573838362000498565b805f190482111562000589576200058962000484565b0290505b92915050565b5f620005a360ff841683620004e0565b9392505050565b80820281158282048414176200058d576200058d62000484565b60805160a051614970620005ed5f395f61035801525f81816103b001526134fc01526149705ff3fe608060405234801561000f575f80fd5b50600436106102b1575f3560e01c80638da5cb5b1161017b578063c87b56dd116100e4578063e0df5b6f1161009e578063f0dacb6f11610079578063f0dacb6f14610681578063f2fde38b14610694578063f87f44b9146106a7578063f958a657146106ba575f80fd5b8063e0df5b6f1461062e578063e178e05114610641578063e985e9c514610654575f80fd5b8063c87b56dd146105b0578063d547cfb7146105c3578063d86f7f96146105cb578063d9d61655146105de578063dd62ed3e146105f1578063dfc6edb31461061b575f80fd5b8063a9059cbb11610135578063a9059cbb14610548578063accb1e2d1461055b578063b2025e4f1461056e578063b88d4fde1461058d578063b923b205146105a0578063beb0a416146105a8575f80fd5b80638da5cb5b146104d15780638ed8d032146104e357806392053b631461050257806395d89b411461050b5780639b19251a14610513578063a22cb46514610535575f80fd5b80634f02c4201161021d5780636c0360eb116101d75780636c0360eb146104675780636ebd3f6c1461046f57806370a08231146104775780637284e4161461049657806374e18e961461049e5780638cfa9cb9146104b1575f80fd5b80634f02c420146103ff57806352cee6ff1461040857806353d6fd591461041b57806356d3163d1461042e5780636352211e1461044157806369a29d0114610454575f80fd5b806323b872dd1161026e57806323b872dd146103885780632b9689581461039b5780632d9fff01146103a3578063313ce567146103ab5780633e0530e3146103e457806342842e0e146103ec575f80fd5b806301109fdd146102b557806306fdde03146102de578063081812fc146102e6578063095ea7b3146103265780630f15f4c01461034957806318160ddd14610353575b5f80fd5b6102c86102c3366004613e26565b6106cd565b6040516102d59190613f04565b60405180910390f35b6102c8610728565b61030e6102f4366004613f36565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b610339610334366004613f63565b6107b4565b60405190151581526020016102d5565b6103516108ff565b005b61037a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016102d5565b610351610396366004613f8b565b61093d565b610351610cdf565b6102c8610d43565b6103d27f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102d5565b610351610d50565b6103516103fa366004613f8b565b610ddd565b61037a60035481565b6102c8610416366004613f36565b610eae565b610351610429366004613fd1565b611071565b61035161043c366004614006565b6110e0565b61030e61044f366004613f36565b61112b565b6102c861046236600461401f565b611165565b6102c8611205565b610351611212565b61037a610485366004614006565b60046020525f908152604090205481565b6102c86112c5565b6102c86104ac366004613f36565b6112d2565b6104c46104bf366004613f36565b6115bb565b6040516102d591906140a1565b5f5461030e906001600160a01b031681565b61037a6104f1366004613f36565b60156020525f908152604090205481565b61037a60175481565b6102c86127c5565b610339610521366004614006565b600b6020525f908152604090205460ff1681565b610351610543366004613fd1565b6127d2565b610339610556366004613f63565b61283d565b61035161056936600461401f565b612850565b61037a61057c366004613f36565b60136020525f908152604090205481565b61035161059b3660046140e4565b61288f565b61035161294f565b6102c861298f565b6102c86105be366004613f36565b61299c565b6102c8612a72565b6102c86105d9366004614177565b612a7f565b6104c46105ec366004614006565b6130da565b61037a6105ff366004614197565b600560209081525f928352604080842090915290825290205481565b6102c86106293660046141c8565b613143565b61035161063c3660046141f8565b6132a3565b61035161064f366004613f36565b6132d8565b610339610662366004614197565b600760209081525f928352604080842090915290825290205460ff1681565b61035161068f366004614232565b6133b1565b6103516106a2366004614006565b6133eb565b6103516106b53660046141f8565b613485565b6103516106c8366004614276565b6134ba565b6060805f5b835181101561072157818482815181106106ee576106ee614291565b60200260200101516040516020016107079291906142a5565b60408051601f1981840301815291905291506001016106d2565b5092915050565b60018054610735906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610761906142d3565b80156107ac5780601f10610783576101008083540402835291602001916107ac565b820191905f5260205f20905b81548152906001019060200180831161078f57829003601f168201915b505050505081565b5f60035482111580156107c657505f82115b1561089a575f828152600860205260409020546001600160a01b031633811480159061081557506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b15610832576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3506108f5565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b03163314610928576040516282b42960e81b815260040160405180910390fd5b6011805460ff60a01b1916600160a01b179055565b600354811115801561096757506001600160a01b0382165f908152600b602052604090205460ff16155b15610c73575f818152600860205260409020546001600160a01b038481169116146109a557604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166109cc57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610a0857506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b8015610a2a57505f818152600660205260409020546001600160a01b03163314155b15610a47576040516282b42960e81b815260040160405180910390fd5b610a4f6134f6565b6001600160a01b0384165f9081526004602052604081208054909190610a7690849061431f565b90915550610a8490506134f6565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610aed9060019061431f565b81548110610afd57610afd614291565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610b4057610b40614291565b5f9182526020808320909101929092556001600160a01b0386168152600990915260409020805480610b7457610b74614332565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610bd6919061431f565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610c5c6134f6565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f198114610ccc57610ca8828261431f565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b610cd7848484613527565b50505b505050565b5f546001600160a01b03163314610d08576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60198054610735906142d3565b5f546001600160a01b03163314610d79576040516282b42960e81b815260040160405180910390fd5b600e5f9054906101000a90046001600160a01b03166001600160a01b031663b923b2056040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610dc5575f80fd5b505af1158015610dd7573d5f803e3d5ffd5b50505050565b610de883838361093d565b6001600160a01b0382163b15801590610e905750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610e5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e839190614346565b6001600160e01b03191614155b15610cda57604051633da6393160e01b815260040160405180910390fd5b60605f610eba836115bb565b604080516020810182525f8082528251600580825260c0820190945293945090929091816020015b6060815260200190600190039081610ee25790505090505f5b835181101561106757604051806040016040528060018152602001600160fd1b815250825f81518110610f3057610f30614291565b6020026020010181905250610f5d848281518110610f5057610f50614291565b60200260200101516136cc565b82600181518110610f7057610f70614291565b6020026020010181905250604051806040016040528060018152602001600b60fa1b81525082600281518110610fa857610fa8614291565b6020908102919091010152610fd284610fc283600161436d565b81518110610f5057610f50614291565b82600381518110610fe557610fe5614291565b6020026020010181905250604051806040016040528060018152602001600160fd1b8152508260048151811061101d5761101d614291565b602002602001018190525082611032836106cd565b6040516020016110439291906142a5565b60408051601f19818403018152919052925061106060028261436d565b9050610efb565b5090949350505050565b5f546001600160a01b0316331461109a576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f9081526004602052604081205490036110dc576001600160a01b0382165f908152600b60205260409020805460ff19168215151790555b5050565b5f546001600160a01b03163314611109576040516282b42960e81b815260040160405180910390fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600860205260409020546001600160a01b0316806111605760405163c5723b5160e01b815260040160405180910390fd5b919050565b604080516003808252608082019092526060915f9190816020015b606081526020019060019003908161118057905050905084815f815181106111aa576111aa614291565b602002602001018190525083816001815181106111c9576111c9614291565b602002602001018190525082816002815181106111e8576111e8614291565b60200260200101819052506111fc816106cd565b95945050505050565b60168054610735906142d3565b335f61121c6134f6565b6010549091506112429083906001600160a01b031661123d84610160614380565b613527565b80156112bd5750600e5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190614397565b6110dc575f80fd5b601a8054610735906142d3565b5f818152601560205260408120546060916112ec826136cc565b90505f6113be6040518060400160405280600a8152602001693d913730b6b2911d101160b11b81525060198054611322906142d3565b80601f016020809104026020016040519081016040528092919081815260200182805461134e906142d3565b80156113995780601f1061137057610100808354040283529160200191611399565b820191905f5260205f20905b81548152906001019060200180831161137c57829003601f168201915b505050505060405180604001604052806002815260200161202360f01b815250611165565b826113c8876136cc565b6040516020016113d891906143b2565b60408051601f19818403018152908290526113f692916020016142a5565b60408051601f198184030181529082905261141492916020016142a5565b6040516020818303038152906040526115086040518060400160405280601081526020016f16113232b9b1b934b83a34b7b7111d1160811b815250601a805461145c906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611488906142d3565b80156114d35780601f106114aa576101008083540402835291602001916114d3565b820191905f5260205f20905b8154815290600101906020018083116114b657829003601f168201915b50505050506040518060400160405280601281526020017111161132bc3a32b93730b62fbab936111d1160711b815250611165565b601860405160200161151a9190614451565b60408051601f198184030181529082905261153892916020016142a5565b60408051601f198184030181529082905261155692916020016142a5565b60405160208183030381529060405261156f8487612a7f565b6040516020016115809291906142a5565b6040516020818303038152906040529050806040516020016115a29190614495565b6040516020818303038152906040529350505050919050565b6060805f6115ca6002856144dd565b90506004841015611ced57835f036116cb57604080516008808252610120820190925290602082016101008036833701905050915060fa825f8151811061161357611613614291565b6020026020010181815250506101f48260028151811061163557611635614291565b60200260200101818152505060fa8260038151811061165657611656614291565b60200260200101818152505060fa8260048151811061167757611677614291565b6020026020010181815250506101f48260058151811061169957611699614291565b60200260200101818152505060fa826007815181106116ba576116ba614291565b602002602001018181525050610721565b83600103611a0f5760408051602080825261042082019092529080820161040080368337019050509150607d8260028151811061170a5761170a614291565b60200260200101818152505060fa8260048151811061172b5761172b614291565b60200260200101818152505060968260058151811061174c5761174c614291565b6020026020010181815250506101778260068151811061176e5761176e614291565b6020026020010181815250506101f48260088151811061179057611790614291565b6020026020010181815250506101f482600a815181106117b2576117b2614291565b602002602001018181525050607d82600b815181106117d3576117d3614291565b60200260200101818152505061015e82600c815181106117f5576117f5614291565b60200260200101818152505060fa82600d8151811061181657611816614291565b6020026020010181815250506101f482600e8151811061183857611838614291565b60200260200101818152505061017782600f8151811061185a5761185a614291565b6020026020010181815250506101f48260108151811061187c5761187c614291565b6020026020010181815250506101f48260118151811061189e5761189e614291565b602002602001018181525050610177826012815181106118c0576118c0614291565b6020026020010181815250506101f4826013815181106118e2576118e2614291565b60200260200101818152505060fa8260148151811061190357611903614291565b60200260200101818152505061015e8260158151811061192557611925614291565b602002602001018181525050607d8260168151811061194657611946614291565b6020026020010181815250506101f48260178151811061196857611968614291565b6020026020010181815250506101f48260198151811061198a5761198a614291565b60200260200101818152505061017782601b815181106119ac576119ac614291565b602002602001018181525050609682601c815181106119cd576119cd614291565b60200260200101818152505060fa82601d815181106119ee576119ee614291565b602002602001018181525050607d82601f815181106116ba576116ba614291565b83600203611b39576040805160088082526101208201909252906020820161010080368337019050509150603c825f81518110611a4e57611a4e614291565b602002602001018181525050603c82600181518110611a6f57611a6f614291565b6020026020010181815250506101b882600281518110611a9157611a91614291565b602002602001018181525050603c82600381518110611ab257611ab2614291565b6020026020010181815250506101b882600481518110611ad457611ad4614291565b6020026020010181815250506101b882600581518110611af657611af6614291565b602002602001018181525050603c82600681518110611b1757611b17614291565b6020026020010181815250506101b8826007815181106116ba576116ba614291565b83600303611ce85760408051600c8082526101a082019092529060208201610180803683370190505091506032825f81518110611b7857611b78614291565b60200260200101818152505060fa82600181518110611b9957611b99614291565b602002602001018181525050607d82600281518110611bba57611bba614291565b602002602001018181525050604b82600381518110611bdb57611bdb614291565b60200260200101818152505061017782600481518110611bfd57611bfd614291565b602002602001018181525050604b82600581518110611c1e57611c1e614291565b6020026020010181815250506101c282600681518110611c4057611c40614291565b60200260200101818152505060fa82600781518110611c6157611c61614291565b60200260200101818152505061017782600881518110611c8357611c83614291565b6020026020010181815250506101a982600981518110611ca557611ca5614291565b602002602001018181525050607d82600a81518110611cc657611cc6614291565b6020026020010181815250506101a982600b815181106116ba576116ba614291565b610721565b600384118015611cfd5750600c84105b156122a55780600203611e605760408051600c8082526101a0820190925290602082016101808036833701905050915061015e82600181518110611d4357611d43614291565b60200260200101818152505061015e82600281518110611d6557611d65614291565b6020026020010181815250506101f482600481518110611d8757611d87614291565b6020026020010181815250506101f482600681518110611da957611da9614291565b602002602001018181525050609682600781518110611dca57611dca614291565b602002602001018181525050609682600881518110611deb57611deb614291565b6020026020010181815250506101f482600981518110611e0d57611e0d614291565b6020026020010181815250505f82600a81518110611e2d57611e2d614291565b6020026020010181815250506101f482600b81518110611e4f57611e4f614291565b60200260200101818152505061222c565b80600303611ec15760408051600680825260e08201909252906020820160c0803683370190505091506101f482600281518110611e9f57611e9f614291565b6020026020010181815250506101f482600581518110611e4f57611e4f614291565b80600403611f6857604080516008808252610120820190925290602082016101008036833701905050915061019082600281518110611f0257611f02614291565b60200260200101818152505061019082600481518110611f2457611f24614291565b60200260200101818152505061019082600581518110611f4657611f46614291565b60200260200101818152505061019082600781518110611e4f57611e4f614291565b8060050361222c576040805160188082526103208201909252906020820161030080368337019050509150604b82600181518110611fa857611fa8614291565b602002602001018181525050604b82600281518110611fc957611fc9614291565b602002602001018181525050604b82600381518110611fea57611fea614291565b602002602001018181525050604b8260048151811061200b5761200b614291565b60200260200101818152505060968260068151811061202c5761202c614291565b60200260200101818152505060968260088151811061204d5761204d614291565b602002602001018181525050604b8260098151811061206e5761206e614291565b6020026020010181815250506101f482600a8151811061209057612090614291565b602002602001018181525050604b82600b815181106120b1576120b1614291565b6020026020010181815250506101f482600c815181106120d3576120d3614291565b602002602001018181525050609682600d815181106120f4576120f4614291565b602002602001018181525050609682600e8151811061211557612115614291565b602002602001018181525050609682600f8151811061213657612136614291565b60200260200101818152505060968260108151811061215757612157614291565b6020026020010181815250506101f48260118151811061217957612179614291565b602002602001018181525050604b8260128151811061219a5761219a614291565b6020026020010181815250506101f4826013815181106121bc576121bc614291565b602002602001018181525050604b826014815181106121dd576121dd614291565b6020026020010181815250506096826015815181106121fe576121fe614291565b60200260200101818152505060968260178151811061221f5761221f614291565b6020026020010181815250505b6122376002856144f0565b600103611ce8575f5b825181101561229f5782818151811061225b5761225b614291565b60200260200101516101f4612270919061431f565b83828151811061228257612282614291565b602090810291909101015261229860028261436d565b9050612240565b50610721565b600b841180156122b55750601284105b1561269057806006036123b35760408051600880825261012082019092529060208201610100803683370190505091506064825f815181106122f9576122f9614291565b6020026020010181815250506101778260028151811061231b5761231b614291565b6020026020010181815250506101778260048151811061233d5761233d614291565b6020026020010181815250506101f48260058151811061235f5761235f614291565b60200260200101818152505060648260068151811061238057612380614291565b6020026020010181815250506101f4826007815181106123a2576123a2614291565b6020026020010181815250506125d2565b8060070361245857604080516008808252610120820190925290602082016101008036833701905050915060fa826003815181106123f3576123f3614291565b6020026020010181815250506101f48260048151811061241557612415614291565b60200260200101818152505060fa8260058151811061243657612436614291565b6020026020010181815250506101f4826006815181106123a2576123a2614291565b806008036125d25760408051600c8082526101a08201909252906020820161018080368337019050509150604b825f8151811061249757612497614291565b6020026020010181815250506101a9826002815181106124b9576124b9614291565b602002602001018181525050610145826004815181106124db576124db614291565b60200260200101818152505060fa826005815181106124fc576124fc614291565b6020026020010181815250506101a98260068151811061251e5761251e614291565b6020026020010181815250506101f48260078151811061254057612540614291565b602002602001018181525050604b8260088151811061256157612561614291565b6020026020010181815250506101f48260098151811061258357612583614291565b60200260200101818152505060af82600a815181106125a4576125a4614291565b60200260200101818152505060fa82600b815181106125c5576125c5614291565b6020026020010181815250505b6125dd6002856144f0565b600103611ce8575f805b83518110156126895783818151811061260257612602614291565b602002602001015191508381600161261a919061436d565b8151811061262a5761262a614291565b602002602001015184828151811061264457612644614291565b6020908102919091010152818461265c83600161436d565b8151811061266c5761266c614291565b602090810291909101015261268260028261436d565b90506125e7565b5050610721565b60408051600680825260e08201909252906020820160c08036833701905050915060fa825f815181106126c5576126c5614291565b6020026020010181815250506101f4826002815181106126e7576126e7614291565b6020026020010181815250506101f48260038151811061270957612709614291565b6020026020010181815250506101f48260058151811061272b5761272b614291565b60209081029190910101526127416002856144f0565b600103610721575f5b82518110156127bd578261275f82600161436d565b8151811061276f5761276f614291565b60200260200101516101f4612784919061431f565b8361279083600161436d565b815181106127a0576127a0614291565b60209081029190910101526127b660028261436d565b905061274a565b505092915050565b60028054610735906142d3565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f612849338484613527565b9392505050565b5f546001600160a01b03163314612879576040516282b42960e81b815260040160405180910390fd5b612883838361375c565b6019610dd78282614547565b61289a85858561093d565b6001600160a01b0384163b158015906129315750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906128e49033908a90899089908990600401614603565b6020604051808303815f875af1158015612900573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129249190614346565b6001600160e01b03191614155b15610cd757604051633da6393160e01b815260040160405180910390fd5b335f81815260046020526040812054900361298c576001600160a01b0381165f908152600b60205260409020805460ff19811660ff909116151790555b50565b60188054610735906142d3565b60605f600c80546129ac906142d3565b905011156129f5575f82815260156020526040902054600c906129ce906136cc565b6040516020016129df929190614655565b6040516020818303038152906040529050919050565b601154604051633a70c74b60e11b8152600481018490526001600160a01b03909116906374e18e96906024015f60405180830381865afa158015612a3b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a629190810190614670565b6040516020016129df91906146d9565b600c8054610735906142d3565b60605f60175484604051602001612b0e91907f506861736520312e2920557365207468652070726f746f636f6c20617320612081527f6469727479206f7261636c6520666f7220612070726564696374696f6e73206d60208201527f61726b657420746f206163686965766520637269746963616c206d6173732e006040820152605f810191909152607f0190565b604051602081830303815290604052805190602001205f1c612b3091906144f0565b90505f60175485604051602001612bd491907f506861736520322e29205573652074686520676f7665726e616e63652070726f81527f746f636f6c20746f2073656375726520746865207375727665696c6c616e636560208201527f206f66207265616c2d776f726c6420636f6d7075746174696f6e616c20696e6660408201526b3930b9ba393ab1ba3ab9329760a11b6060820152606c810191909152608c0190565b604051602081830303815290604052805190602001205f1c612bf691906144f0565b6040516c506861736520332e29203f3f3f60981b6020820152602d81018790529091505f90601490604d01604051602081830303815290604052805190602001205f1c612c4391906144f0565b90505b818303612cab57601754612c598761471d565b6040516f141a185cd9480d0b8a48141c9bd99a5d60821b602082015260308101829052909750605001604051602081830303815290604052805190602001205f1c612ca491906144f0565b9150612c46565b5f612cb5866136cc565b60408051600e8082526101e082019092529192505f9190816020015b6060815260200190600190039081612cd15790505090506040518060800160405280605581526020016148a960559139815f81518110612d1357612d13614291565b602002602001018190525060168054612d2b906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d57906142d3565b8015612da25780601f10612d7957610100808354040283529160200191612da2565b820191905f5260205f20905b815481529060010190602001808311612d8557829003601f168201915b505050505081600181518110612dba57612dba614291565b6020026020010181905250612dce856136cc565b81600281518110612de157612de1614291565b60200260200101819052506040518060600160405280602681526020016148836026913981600381518110612e1857612e18614291565b60200260200101819052506040518060400160405280601781526020017f3c636c6970506174682069643d5c22616e6f6e6c756c7a00000000000000000081525081600481518110612e6c57612e6c614291565b60200260200101819052508181600581518110612e8b57612e8b614291565b6020026020010181905250604051806040016040528060158152602001742e111f1e3837b63cb3b7b7103837b4b73a399eae1160591b81525081600681518110612ed757612ed7614291565b6020026020010181905250612eeb83610eae565b81600781518110612efe57612efe614291565b60200260200101819052506040518060400160405280601e81526020017f5c22202f3e3c2f636c6970506174683e3c696d61676520687265663d5c22000081525081600881518110612f5257612f52614291565b602002602001018190525060168054612f6a906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612f96906142d3565b8015612fe15780601f10612fb857610100808354040283529160200191612fe1565b820191905f5260205f20905b815481529060010190602001808311612fc457829003601f168201915b505050505081600981518110612ff957612ff9614291565b602002602001018190525061300d846136cc565b81600a8151811061302057613020614291565b60200260200101819052506040518060600160405280603d81526020016148fe603d913981600b8151811061305757613057614291565b60200260200101819052508181600c8151811061307657613076614291565b60200260200101819052506040518060400160405280600d81526020016c14ae1110179f1e17b9bb339f1160991b81525081600d815181106130ba576130ba614291565b60200260200101819052506130ce816106cd565b98975050505050505050565b6001600160a01b0381165f9081526009602090815260409182902080548351818402810184019094528084526060939283018282801561313757602002820191905f5260205f20905b815481526020019060010190808311613123575b50505050509050919050565b6040805180820190915260018152605b60f81b60208201525f613165856130da565b905083158015613173575082155b1561317d57805192505b835b8381101561327857601154825184916001600160a01b0316906374e18e96908590859081106131b0576131b0614291565b60200260200101516040518263ffffffff1660e01b81526004016131d691815260200190565b5f60405180830381865afa1580156131f0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132179190810190614670565b6040516020016132289291906142a5565b604051602081830303815290604052925060018251613247919061431f565b8114613270578260405160200161325e9190614735565b60405160208183030381529060405292505b60010161317f565b508160405160200161328a9190614759565b6040516020818303038152906040529150509392505050565b5f546001600160a01b031633146132cc576040516282b42960e81b815260040160405180910390fd5b600c6110dc8282614547565b336132e281613775565b601154600160a01b900460ff168061330657505f546001600160a01b038281169116145b80156133165750633b9aca008210155b801561333a575060105461333a906001600160a01b03168261123d85610160614380565b613342575f80fd5b600e546010546040516323b872dd60e01b81526001600160a01b0384811660048301529182166024820152604481018590529116906323b872dd906064015f604051808303815f87803b158015613397575f80fd5b505af11580156133a9573d5f803e3d5ffd5b505050505050565b5f546001600160a01b031633146133da576040516282b42960e81b815260040160405180910390fd5b60178290556016610cda8282614547565b5f546001600160a01b03163314613414576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03811661343b576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b031633146134ae576040516282b42960e81b815260040160405180910390fd5b60186110dc8282614547565b335f8181526004602052604081205490036110dc576001600160a01b03165f908152600b60205260409020805460ff1916911515919091179055565b5f6135227f0000000000000000000000000000000000000000000000000000000000000000600a61485d565b905090565b5f806135316134f6565b6001600160a01b038087165f818152600460205260408082208054948a168352908220549282529394509192909186919061356c838661431f565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff166135fb576001600160a01b0387165f908152600460205260408120546135c79085906144dd565b6135d185856144dd565b6135db919061431f565b90505f5b818110156135f8576135f0896137b8565b6001016135df565b50505b6001600160a01b0386165f908152600b602052604090205460ff16613672575f61362584836144dd565b6001600160a01b0388165f908152600460205260409020546136489086906144dd565b613652919061431f565b90505f5b8181101561366f5761366788613807565b600101613656565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516136b791815260200190565b60405180910390a35060019695505050505050565b60605f6136d8836139c5565b60010190505f8167ffffffffffffffff8111156136f7576136f7613d68565b6040519080825280601f01601f191660200182016040528015613721576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461372b57509392505050565b60016137688382614547565b506002610cda8282614547565b6001600160a01b0381165f90815260046020526040812054900361298c576001600160a01b0381165f908152600b60205260409020805460ff1916600117905550565b5f6137c282613a9c565b5f8181526015602090815260408083205460128054855260139093529083205580549293506001929091906137f890849061436d565b909155506110dc905082613b3f565b61381081613c60565b5f306001600160a01b0316634f02c4206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613871919061486b565b90505f60125482606443613885919061431f565b406040516020016138a0929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6138c291906144f0565b5f818152601460205260408120549192509060ff16156138f057505f8181526013602052604090205461390b565b505f818152601460205260409020805460ff19166001179055805b600160125f82825461391d919061431f565b90915550506012545f9081526014602052604090205460ff1661394257601254613954565b6012545f908152601360205260409020545b5f83815260136020908152604080832093909355601254825260148152828220805460ff1916600117905585825260159052818120839055905182916001600160a01b038716917f792daa4b2623ba70e38af40290b50417d8a1620a7deee03ad74ed721bf9c897f9190a350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613a035772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613a2f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613a4d57662386f26fc10000830492506010015b6305f5e1008310613a65576305f5e100830492506008015b6127108310613a7957612710830492506004015b60648310613a8b576064830492506002015b600a83106108f95760010192915050565b6001600160a01b0381165f90815260096020526040812054613afa5760405162461bcd60e51b81526020600482015260136024820152724f776e657220686173206e6f20746f6b656e7360681b604482015260640160405180910390fd5b6001600160a01b0382165f9081526009602052604090208054613b1f9060019061431f565b81548110613b2f57613b2f614291565b905f5260205f2001549050919050565b6001600160a01b038116613b6657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604081208054613b8b9060019061431f565b81548110613b9b57613b9b614291565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f20805480613bd857613bd8614332565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116613c8757604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b031615613cc75760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600983529083208054600181810183558286529385200185905592529054613d1e919061431f565b5f828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613da557613da5613d68565b604052919050565b5f67ffffffffffffffff821115613dc657613dc6613d68565b50601f01601f191660200190565b5f82601f830112613de3575f80fd5b8135613df6613df182613dad565b613d7c565b818152846020838601011115613e0a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6020808385031215613e37575f80fd5b823567ffffffffffffffff80821115613e4e575f80fd5b818501915085601f830112613e61575f80fd5b813581811115613e7357613e73613d68565b8060051b613e82858201613d7c565b9182528381018501918581019089841115613e9b575f80fd5b86860192505b83831015613ed557823585811115613eb7575f80fd5b613ec58b89838a0101613dd4565b8352509186019190860190613ea1565b9998505050505050505050565b5f5b83811015613efc578181015183820152602001613ee4565b50505f910152565b602081525f8251806020840152613f22816040850160208701613ee2565b601f01601f19169190910160400192915050565b5f60208284031215613f46575f80fd5b5035919050565b80356001600160a01b0381168114611160575f80fd5b5f8060408385031215613f74575f80fd5b613f7d83613f4d565b946020939093013593505050565b5f805f60608486031215613f9d575f80fd5b613fa684613f4d565b9250613fb460208501613f4d565b9150604084013590509250925092565b801515811461298c575f80fd5b5f8060408385031215613fe2575f80fd5b613feb83613f4d565b91506020830135613ffb81613fc4565b809150509250929050565b5f60208284031215614016575f80fd5b61284982613f4d565b5f805f60608486031215614031575f80fd5b833567ffffffffffffffff80821115614048575f80fd5b61405487838801613dd4565b94506020860135915080821115614069575f80fd5b61407587838801613dd4565b9350604086013591508082111561408a575f80fd5b5061409786828701613dd4565b9150509250925092565b602080825282518282018190525f9190848201906040850190845b818110156140d8578351835292840192918401916001016140bc565b50909695505050505050565b5f805f805f608086880312156140f8575f80fd5b61410186613f4d565b945061410f60208701613f4d565b935060408601359250606086013567ffffffffffffffff80821115614132575f80fd5b818801915088601f830112614145575f80fd5b813581811115614153575f80fd5b896020828501011115614164575f80fd5b9699959850939650602001949392505050565b5f8060408385031215614188575f80fd5b50508035926020909101359150565b5f80604083850312156141a8575f80fd5b6141b183613f4d565b91506141bf60208401613f4d565b90509250929050565b5f805f606084860312156141da575f80fd5b6141e384613f4d565b95602085013595506040909401359392505050565b5f60208284031215614208575f80fd5b813567ffffffffffffffff81111561421e575f80fd5b61422a84828501613dd4565b949350505050565b5f8060408385031215614243575f80fd5b82359150602083013567ffffffffffffffff811115614260575f80fd5b61426c85828601613dd4565b9150509250929050565b5f60208284031215614286575f80fd5b813561284981613fc4565b634e487b7160e01b5f52603260045260245ffd5b5f83516142b6818460208801613ee2565b8351908301906142ca818360208801613ee2565b01949350505050565b600181811c908216806142e757607f821691505b60208210810361430557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f9576108f961430b565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215614356575f80fd5b81516001600160e01b031981168114612849575f80fd5b808201808211156108f9576108f961430b565b80820281158282048414176108f9576108f961430b565b5f602082840312156143a7575f80fd5b815161284981613fc4565b671116101134b2111d60c11b815281515f906143d5816008850160208701613ee2565b9190910160080192915050565b5f81546143ee816142d3565b60018281168015614406576001811461441b57614447565b60ff1984168752821515830287019450614447565b855f526020805f205f5b8581101561443e5781548a820152908401908201614425565b50505082870194505b5050505092915050565b5f61445c82846143e2565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b7574815262198e0b60ea1b60208201526023019392505050565b5f82516144a6818460208701613ee2565b702c2261747472696275746573223a5b5d7d60781b920191825250601101919050565b634e487b7160e01b5f52601260045260245ffd5b5f826144eb576144eb6144c9565b500490565b5f826144fe576144fe6144c9565b500690565b601f821115610cda57805f5260205f20601f840160051c810160208510156145285750805b601f840160051c820191505b81811015610cd7575f8155600101614534565b815167ffffffffffffffff81111561456157614561613d68565b6145758161456f84546142d3565b84614503565b602080601f8311600181146145a8575f84156145915750858301515b5f19600386901b1c1916600185901b1785556133a9565b5f85815260208120601f198616915b828110156145d6578886015182559484019460019091019084016145b7565b50858210156145f357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f61466082856143e2565b83516142ca818360208801613ee2565b5f60208284031215614680575f80fd5b815167ffffffffffffffff811115614696575f80fd5b8201601f810184136146a6575f80fd5b80516146b4613df182613dad565b8181528560208385010111156146c8575f80fd5b6111fc826020830160208601613ee2565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161471081601b850160208701613ee2565b91909101601b0192915050565b5f6001820161472e5761472e61430b565b5060010190565b5f8251614746818460208701613ee2565b600b60fa1b920191825250600101919050565b5f825161476a818460208701613ee2565b605d60f81b920191825250600101919050565b600181815b808511156147b757815f190482111561479d5761479d61430b565b808516156147aa57918102915b93841c9390800290614782565b509250929050565b5f826147cd575060016108f9565b816147d957505f6108f9565b81600181146147ef57600281146147f957614815565b60019150506108f9565b60ff84111561480a5761480a61430b565b50506001821b6108f9565b5060208310610133831016604e8410600b8410161715614838575081810a6108f9565b614842838361477d565b805f19048211156148555761485561430b565b029392505050565b5f61284960ff8416836147bf565b5f6020828403121561487b575f80fd5b505191905056fe2e706e675c222077696474683d5c223530305c22206865696768743d5c223530305c22202f3e3c7376672077696474683d5c223530305c22206865696768743d5c223530305c2220786d6c6e733d5c22687474703a2f2f7777772e77332e6f72672f323030302f7376675c223e3c696d61676520687265663d5c222e706e675c222077696474683d5c223530305c22206865696768743d5c223530305c2220636c69702d706174683d5c2275726c2823616e6f6e6c756c7aa2646970667358221220ab634747af8f7e425d5acc3b2caf3a956d7644c461f3f2cfdcccf1d300763fce64736f6c6343000818003368747470733a2f2f697066732e696f2f697066732f6261667962656966697a7073336c78697179786a62787a756d77366a727069697535683632327a66376e7467376767666161346a6e7a6e6a6664652f41206c6567696f6e206f662031323339303420244c756c7a20726174696f206c6f636b656420776974682024414e4f4e203335323a31

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106102b1575f3560e01c80638da5cb5b1161017b578063c87b56dd116100e4578063e0df5b6f1161009e578063f0dacb6f11610079578063f0dacb6f14610681578063f2fde38b14610694578063f87f44b9146106a7578063f958a657146106ba575f80fd5b8063e0df5b6f1461062e578063e178e05114610641578063e985e9c514610654575f80fd5b8063c87b56dd146105b0578063d547cfb7146105c3578063d86f7f96146105cb578063d9d61655146105de578063dd62ed3e146105f1578063dfc6edb31461061b575f80fd5b8063a9059cbb11610135578063a9059cbb14610548578063accb1e2d1461055b578063b2025e4f1461056e578063b88d4fde1461058d578063b923b205146105a0578063beb0a416146105a8575f80fd5b80638da5cb5b146104d15780638ed8d032146104e357806392053b631461050257806395d89b411461050b5780639b19251a14610513578063a22cb46514610535575f80fd5b80634f02c4201161021d5780636c0360eb116101d75780636c0360eb146104675780636ebd3f6c1461046f57806370a08231146104775780637284e4161461049657806374e18e961461049e5780638cfa9cb9146104b1575f80fd5b80634f02c420146103ff57806352cee6ff1461040857806353d6fd591461041b57806356d3163d1461042e5780636352211e1461044157806369a29d0114610454575f80fd5b806323b872dd1161026e57806323b872dd146103885780632b9689581461039b5780632d9fff01146103a3578063313ce567146103ab5780633e0530e3146103e457806342842e0e146103ec575f80fd5b806301109fdd146102b557806306fdde03146102de578063081812fc146102e6578063095ea7b3146103265780630f15f4c01461034957806318160ddd14610353575b5f80fd5b6102c86102c3366004613e26565b6106cd565b6040516102d59190613f04565b60405180910390f35b6102c8610728565b61030e6102f4366004613f36565b60066020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b610339610334366004613f63565b6107b4565b60405190151581526020016102d5565b6103516108ff565b005b61037a7f000000000000000000000000000000000000000000001a3cd96ba8791000000081565b6040519081526020016102d5565b610351610396366004613f8b565b61093d565b610351610cdf565b6102c8610d43565b6103d27f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016102d5565b610351610d50565b6103516103fa366004613f8b565b610ddd565b61037a60035481565b6102c8610416366004613f36565b610eae565b610351610429366004613fd1565b611071565b61035161043c366004614006565b6110e0565b61030e61044f366004613f36565b61112b565b6102c861046236600461401f565b611165565b6102c8611205565b610351611212565b61037a610485366004614006565b60046020525f908152604090205481565b6102c86112c5565b6102c86104ac366004613f36565b6112d2565b6104c46104bf366004613f36565b6115bb565b6040516102d591906140a1565b5f5461030e906001600160a01b031681565b61037a6104f1366004613f36565b60156020525f908152604090205481565b61037a60175481565b6102c86127c5565b610339610521366004614006565b600b6020525f908152604090205460ff1681565b610351610543366004613fd1565b6127d2565b610339610556366004613f63565b61283d565b61035161056936600461401f565b612850565b61037a61057c366004613f36565b60136020525f908152604090205481565b61035161059b3660046140e4565b61288f565b61035161294f565b6102c861298f565b6102c86105be366004613f36565b61299c565b6102c8612a72565b6102c86105d9366004614177565b612a7f565b6104c46105ec366004614006565b6130da565b61037a6105ff366004614197565b600560209081525f928352604080842090915290825290205481565b6102c86106293660046141c8565b613143565b61035161063c3660046141f8565b6132a3565b61035161064f366004613f36565b6132d8565b610339610662366004614197565b600760209081525f928352604080842090915290825290205460ff1681565b61035161068f366004614232565b6133b1565b6103516106a2366004614006565b6133eb565b6103516106b53660046141f8565b613485565b6103516106c8366004614276565b6134ba565b6060805f5b835181101561072157818482815181106106ee576106ee614291565b60200260200101516040516020016107079291906142a5565b60408051601f1981840301815291905291506001016106d2565b5092915050565b60018054610735906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610761906142d3565b80156107ac5780601f10610783576101008083540402835291602001916107ac565b820191905f5260205f20905b81548152906001019060200180831161078f57829003601f168201915b505050505081565b5f60035482111580156107c657505f82115b1561089a575f828152600860205260409020546001600160a01b031633811480159061081557506001600160a01b0381165f90815260076020908152604080832033845290915290205460ff16155b15610832576040516282b42960e81b815260040160405180910390fd5b5f8381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3506108f5565b335f8181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b03163314610928576040516282b42960e81b815260040160405180910390fd5b6011805460ff60a01b1916600160a01b179055565b600354811115801561096757506001600160a01b0382165f908152600b602052604090205460ff16155b15610c73575f818152600860205260409020546001600160a01b038481169116146109a557604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166109cc57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610a0857506001600160a01b0383165f90815260076020908152604080832033845290915290205460ff16155b8015610a2a57505f818152600660205260409020546001600160a01b03163314155b15610a47576040516282b42960e81b815260040160405180910390fd5b610a4f6134f6565b6001600160a01b0384165f9081526004602052604081208054909190610a7690849061431f565b90915550610a8490506134f6565b6001600160a01b038084165f81815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610aed9060019061431f565b81548110610afd57610afd614291565b5f9182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610b4057610b40614291565b5f9182526020808320909101929092556001600160a01b0386168152600990915260409020805480610b7457610b74614332565b5f828152602080822083015f19908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610bd6919061431f565b5f838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610c5c6134f6565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526005602090815260408083203384529091529020545f198114610ccc57610ca8828261431f565b6001600160a01b0385165f9081526005602090815260408083203384529091529020555b610cd7848484613527565b50505b505050565b5f546001600160a01b03163314610d08576040516282b42960e81b815260040160405180910390fd5b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60198054610735906142d3565b5f546001600160a01b03163314610d79576040516282b42960e81b815260040160405180910390fd5b600e5f9054906101000a90046001600160a01b03166001600160a01b031663b923b2056040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610dc5575f80fd5b505af1158015610dd7573d5f803e3d5ffd5b50505050565b610de883838361093d565b6001600160a01b0382163b15801590610e905750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610e5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e839190614346565b6001600160e01b03191614155b15610cda57604051633da6393160e01b815260040160405180910390fd5b60605f610eba836115bb565b604080516020810182525f8082528251600580825260c0820190945293945090929091816020015b6060815260200190600190039081610ee25790505090505f5b835181101561106757604051806040016040528060018152602001600160fd1b815250825f81518110610f3057610f30614291565b6020026020010181905250610f5d848281518110610f5057610f50614291565b60200260200101516136cc565b82600181518110610f7057610f70614291565b6020026020010181905250604051806040016040528060018152602001600b60fa1b81525082600281518110610fa857610fa8614291565b6020908102919091010152610fd284610fc283600161436d565b81518110610f5057610f50614291565b82600381518110610fe557610fe5614291565b6020026020010181905250604051806040016040528060018152602001600160fd1b8152508260048151811061101d5761101d614291565b602002602001018190525082611032836106cd565b6040516020016110439291906142a5565b60408051601f19818403018152919052925061106060028261436d565b9050610efb565b5090949350505050565b5f546001600160a01b0316331461109a576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f9081526004602052604081205490036110dc576001600160a01b0382165f908152600b60205260409020805460ff19168215151790555b5050565b5f546001600160a01b03163314611109576040516282b42960e81b815260040160405180910390fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600860205260409020546001600160a01b0316806111605760405163c5723b5160e01b815260040160405180910390fd5b919050565b604080516003808252608082019092526060915f9190816020015b606081526020019060019003908161118057905050905084815f815181106111aa576111aa614291565b602002602001018190525083816001815181106111c9576111c9614291565b602002602001018190525082816002815181106111e8576111e8614291565b60200260200101819052506111fc816106cd565b95945050505050565b60168054610735906142d3565b335f61121c6134f6565b6010549091506112429083906001600160a01b031661123d84610160614380565b613527565b80156112bd5750600e5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190614397565b6110dc575f80fd5b601a8054610735906142d3565b5f818152601560205260408120546060916112ec826136cc565b90505f6113be6040518060400160405280600a8152602001693d913730b6b2911d101160b11b81525060198054611322906142d3565b80601f016020809104026020016040519081016040528092919081815260200182805461134e906142d3565b80156113995780601f1061137057610100808354040283529160200191611399565b820191905f5260205f20905b81548152906001019060200180831161137c57829003601f168201915b505050505060405180604001604052806002815260200161202360f01b815250611165565b826113c8876136cc565b6040516020016113d891906143b2565b60408051601f19818403018152908290526113f692916020016142a5565b60408051601f198184030181529082905261141492916020016142a5565b6040516020818303038152906040526115086040518060400160405280601081526020016f16113232b9b1b934b83a34b7b7111d1160811b815250601a805461145c906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611488906142d3565b80156114d35780601f106114aa576101008083540402835291602001916114d3565b820191905f5260205f20905b8154815290600101906020018083116114b657829003601f168201915b50505050506040518060400160405280601281526020017111161132bc3a32b93730b62fbab936111d1160711b815250611165565b601860405160200161151a9190614451565b60408051601f198184030181529082905261153892916020016142a5565b60408051601f198184030181529082905261155692916020016142a5565b60405160208183030381529060405261156f8487612a7f565b6040516020016115809291906142a5565b6040516020818303038152906040529050806040516020016115a29190614495565b6040516020818303038152906040529350505050919050565b6060805f6115ca6002856144dd565b90506004841015611ced57835f036116cb57604080516008808252610120820190925290602082016101008036833701905050915060fa825f8151811061161357611613614291565b6020026020010181815250506101f48260028151811061163557611635614291565b60200260200101818152505060fa8260038151811061165657611656614291565b60200260200101818152505060fa8260048151811061167757611677614291565b6020026020010181815250506101f48260058151811061169957611699614291565b60200260200101818152505060fa826007815181106116ba576116ba614291565b602002602001018181525050610721565b83600103611a0f5760408051602080825261042082019092529080820161040080368337019050509150607d8260028151811061170a5761170a614291565b60200260200101818152505060fa8260048151811061172b5761172b614291565b60200260200101818152505060968260058151811061174c5761174c614291565b6020026020010181815250506101778260068151811061176e5761176e614291565b6020026020010181815250506101f48260088151811061179057611790614291565b6020026020010181815250506101f482600a815181106117b2576117b2614291565b602002602001018181525050607d82600b815181106117d3576117d3614291565b60200260200101818152505061015e82600c815181106117f5576117f5614291565b60200260200101818152505060fa82600d8151811061181657611816614291565b6020026020010181815250506101f482600e8151811061183857611838614291565b60200260200101818152505061017782600f8151811061185a5761185a614291565b6020026020010181815250506101f48260108151811061187c5761187c614291565b6020026020010181815250506101f48260118151811061189e5761189e614291565b602002602001018181525050610177826012815181106118c0576118c0614291565b6020026020010181815250506101f4826013815181106118e2576118e2614291565b60200260200101818152505060fa8260148151811061190357611903614291565b60200260200101818152505061015e8260158151811061192557611925614291565b602002602001018181525050607d8260168151811061194657611946614291565b6020026020010181815250506101f48260178151811061196857611968614291565b6020026020010181815250506101f48260198151811061198a5761198a614291565b60200260200101818152505061017782601b815181106119ac576119ac614291565b602002602001018181525050609682601c815181106119cd576119cd614291565b60200260200101818152505060fa82601d815181106119ee576119ee614291565b602002602001018181525050607d82601f815181106116ba576116ba614291565b83600203611b39576040805160088082526101208201909252906020820161010080368337019050509150603c825f81518110611a4e57611a4e614291565b602002602001018181525050603c82600181518110611a6f57611a6f614291565b6020026020010181815250506101b882600281518110611a9157611a91614291565b602002602001018181525050603c82600381518110611ab257611ab2614291565b6020026020010181815250506101b882600481518110611ad457611ad4614291565b6020026020010181815250506101b882600581518110611af657611af6614291565b602002602001018181525050603c82600681518110611b1757611b17614291565b6020026020010181815250506101b8826007815181106116ba576116ba614291565b83600303611ce85760408051600c8082526101a082019092529060208201610180803683370190505091506032825f81518110611b7857611b78614291565b60200260200101818152505060fa82600181518110611b9957611b99614291565b602002602001018181525050607d82600281518110611bba57611bba614291565b602002602001018181525050604b82600381518110611bdb57611bdb614291565b60200260200101818152505061017782600481518110611bfd57611bfd614291565b602002602001018181525050604b82600581518110611c1e57611c1e614291565b6020026020010181815250506101c282600681518110611c4057611c40614291565b60200260200101818152505060fa82600781518110611c6157611c61614291565b60200260200101818152505061017782600881518110611c8357611c83614291565b6020026020010181815250506101a982600981518110611ca557611ca5614291565b602002602001018181525050607d82600a81518110611cc657611cc6614291565b6020026020010181815250506101a982600b815181106116ba576116ba614291565b610721565b600384118015611cfd5750600c84105b156122a55780600203611e605760408051600c8082526101a0820190925290602082016101808036833701905050915061015e82600181518110611d4357611d43614291565b60200260200101818152505061015e82600281518110611d6557611d65614291565b6020026020010181815250506101f482600481518110611d8757611d87614291565b6020026020010181815250506101f482600681518110611da957611da9614291565b602002602001018181525050609682600781518110611dca57611dca614291565b602002602001018181525050609682600881518110611deb57611deb614291565b6020026020010181815250506101f482600981518110611e0d57611e0d614291565b6020026020010181815250505f82600a81518110611e2d57611e2d614291565b6020026020010181815250506101f482600b81518110611e4f57611e4f614291565b60200260200101818152505061222c565b80600303611ec15760408051600680825260e08201909252906020820160c0803683370190505091506101f482600281518110611e9f57611e9f614291565b6020026020010181815250506101f482600581518110611e4f57611e4f614291565b80600403611f6857604080516008808252610120820190925290602082016101008036833701905050915061019082600281518110611f0257611f02614291565b60200260200101818152505061019082600481518110611f2457611f24614291565b60200260200101818152505061019082600581518110611f4657611f46614291565b60200260200101818152505061019082600781518110611e4f57611e4f614291565b8060050361222c576040805160188082526103208201909252906020820161030080368337019050509150604b82600181518110611fa857611fa8614291565b602002602001018181525050604b82600281518110611fc957611fc9614291565b602002602001018181525050604b82600381518110611fea57611fea614291565b602002602001018181525050604b8260048151811061200b5761200b614291565b60200260200101818152505060968260068151811061202c5761202c614291565b60200260200101818152505060968260088151811061204d5761204d614291565b602002602001018181525050604b8260098151811061206e5761206e614291565b6020026020010181815250506101f482600a8151811061209057612090614291565b602002602001018181525050604b82600b815181106120b1576120b1614291565b6020026020010181815250506101f482600c815181106120d3576120d3614291565b602002602001018181525050609682600d815181106120f4576120f4614291565b602002602001018181525050609682600e8151811061211557612115614291565b602002602001018181525050609682600f8151811061213657612136614291565b60200260200101818152505060968260108151811061215757612157614291565b6020026020010181815250506101f48260118151811061217957612179614291565b602002602001018181525050604b8260128151811061219a5761219a614291565b6020026020010181815250506101f4826013815181106121bc576121bc614291565b602002602001018181525050604b826014815181106121dd576121dd614291565b6020026020010181815250506096826015815181106121fe576121fe614291565b60200260200101818152505060968260178151811061221f5761221f614291565b6020026020010181815250505b6122376002856144f0565b600103611ce8575f5b825181101561229f5782818151811061225b5761225b614291565b60200260200101516101f4612270919061431f565b83828151811061228257612282614291565b602090810291909101015261229860028261436d565b9050612240565b50610721565b600b841180156122b55750601284105b1561269057806006036123b35760408051600880825261012082019092529060208201610100803683370190505091506064825f815181106122f9576122f9614291565b6020026020010181815250506101778260028151811061231b5761231b614291565b6020026020010181815250506101778260048151811061233d5761233d614291565b6020026020010181815250506101f48260058151811061235f5761235f614291565b60200260200101818152505060648260068151811061238057612380614291565b6020026020010181815250506101f4826007815181106123a2576123a2614291565b6020026020010181815250506125d2565b8060070361245857604080516008808252610120820190925290602082016101008036833701905050915060fa826003815181106123f3576123f3614291565b6020026020010181815250506101f48260048151811061241557612415614291565b60200260200101818152505060fa8260058151811061243657612436614291565b6020026020010181815250506101f4826006815181106123a2576123a2614291565b806008036125d25760408051600c8082526101a08201909252906020820161018080368337019050509150604b825f8151811061249757612497614291565b6020026020010181815250506101a9826002815181106124b9576124b9614291565b602002602001018181525050610145826004815181106124db576124db614291565b60200260200101818152505060fa826005815181106124fc576124fc614291565b6020026020010181815250506101a98260068151811061251e5761251e614291565b6020026020010181815250506101f48260078151811061254057612540614291565b602002602001018181525050604b8260088151811061256157612561614291565b6020026020010181815250506101f48260098151811061258357612583614291565b60200260200101818152505060af82600a815181106125a4576125a4614291565b60200260200101818152505060fa82600b815181106125c5576125c5614291565b6020026020010181815250505b6125dd6002856144f0565b600103611ce8575f805b83518110156126895783818151811061260257612602614291565b602002602001015191508381600161261a919061436d565b8151811061262a5761262a614291565b602002602001015184828151811061264457612644614291565b6020908102919091010152818461265c83600161436d565b8151811061266c5761266c614291565b602090810291909101015261268260028261436d565b90506125e7565b5050610721565b60408051600680825260e08201909252906020820160c08036833701905050915060fa825f815181106126c5576126c5614291565b6020026020010181815250506101f4826002815181106126e7576126e7614291565b6020026020010181815250506101f48260038151811061270957612709614291565b6020026020010181815250506101f48260058151811061272b5761272b614291565b60209081029190910101526127416002856144f0565b600103610721575f5b82518110156127bd578261275f82600161436d565b8151811061276f5761276f614291565b60200260200101516101f4612784919061431f565b8361279083600161436d565b815181106127a0576127a0614291565b60209081029190910101526127b660028261436d565b905061274a565b505092915050565b60028054610735906142d3565b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f612849338484613527565b9392505050565b5f546001600160a01b03163314612879576040516282b42960e81b815260040160405180910390fd5b612883838361375c565b6019610dd78282614547565b61289a85858561093d565b6001600160a01b0384163b158015906129315750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906128e49033908a90899089908990600401614603565b6020604051808303815f875af1158015612900573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129249190614346565b6001600160e01b03191614155b15610cd757604051633da6393160e01b815260040160405180910390fd5b335f81815260046020526040812054900361298c576001600160a01b0381165f908152600b60205260409020805460ff19811660ff909116151790555b50565b60188054610735906142d3565b60605f600c80546129ac906142d3565b905011156129f5575f82815260156020526040902054600c906129ce906136cc565b6040516020016129df929190614655565b6040516020818303038152906040529050919050565b601154604051633a70c74b60e11b8152600481018490526001600160a01b03909116906374e18e96906024015f60405180830381865afa158015612a3b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a629190810190614670565b6040516020016129df91906146d9565b600c8054610735906142d3565b60605f60175484604051602001612b0e91907f506861736520312e2920557365207468652070726f746f636f6c20617320612081527f6469727479206f7261636c6520666f7220612070726564696374696f6e73206d60208201527f61726b657420746f206163686965766520637269746963616c206d6173732e006040820152605f810191909152607f0190565b604051602081830303815290604052805190602001205f1c612b3091906144f0565b90505f60175485604051602001612bd491907f506861736520322e29205573652074686520676f7665726e616e63652070726f81527f746f636f6c20746f2073656375726520746865207375727665696c6c616e636560208201527f206f66207265616c2d776f726c6420636f6d7075746174696f6e616c20696e6660408201526b3930b9ba393ab1ba3ab9329760a11b6060820152606c810191909152608c0190565b604051602081830303815290604052805190602001205f1c612bf691906144f0565b6040516c506861736520332e29203f3f3f60981b6020820152602d81018790529091505f90601490604d01604051602081830303815290604052805190602001205f1c612c4391906144f0565b90505b818303612cab57601754612c598761471d565b6040516f141a185cd9480d0b8a48141c9bd99a5d60821b602082015260308101829052909750605001604051602081830303815290604052805190602001205f1c612ca491906144f0565b9150612c46565b5f612cb5866136cc565b60408051600e8082526101e082019092529192505f9190816020015b6060815260200190600190039081612cd15790505090506040518060800160405280605581526020016148a960559139815f81518110612d1357612d13614291565b602002602001018190525060168054612d2b906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d57906142d3565b8015612da25780601f10612d7957610100808354040283529160200191612da2565b820191905f5260205f20905b815481529060010190602001808311612d8557829003601f168201915b505050505081600181518110612dba57612dba614291565b6020026020010181905250612dce856136cc565b81600281518110612de157612de1614291565b60200260200101819052506040518060600160405280602681526020016148836026913981600381518110612e1857612e18614291565b60200260200101819052506040518060400160405280601781526020017f3c636c6970506174682069643d5c22616e6f6e6c756c7a00000000000000000081525081600481518110612e6c57612e6c614291565b60200260200101819052508181600581518110612e8b57612e8b614291565b6020026020010181905250604051806040016040528060158152602001742e111f1e3837b63cb3b7b7103837b4b73a399eae1160591b81525081600681518110612ed757612ed7614291565b6020026020010181905250612eeb83610eae565b81600781518110612efe57612efe614291565b60200260200101819052506040518060400160405280601e81526020017f5c22202f3e3c2f636c6970506174683e3c696d61676520687265663d5c22000081525081600881518110612f5257612f52614291565b602002602001018190525060168054612f6a906142d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612f96906142d3565b8015612fe15780601f10612fb857610100808354040283529160200191612fe1565b820191905f5260205f20905b815481529060010190602001808311612fc457829003601f168201915b505050505081600981518110612ff957612ff9614291565b602002602001018190525061300d846136cc565b81600a8151811061302057613020614291565b60200260200101819052506040518060600160405280603d81526020016148fe603d913981600b8151811061305757613057614291565b60200260200101819052508181600c8151811061307657613076614291565b60200260200101819052506040518060400160405280600d81526020016c14ae1110179f1e17b9bb339f1160991b81525081600d815181106130ba576130ba614291565b60200260200101819052506130ce816106cd565b98975050505050505050565b6001600160a01b0381165f9081526009602090815260409182902080548351818402810184019094528084526060939283018282801561313757602002820191905f5260205f20905b815481526020019060010190808311613123575b50505050509050919050565b6040805180820190915260018152605b60f81b60208201525f613165856130da565b905083158015613173575082155b1561317d57805192505b835b8381101561327857601154825184916001600160a01b0316906374e18e96908590859081106131b0576131b0614291565b60200260200101516040518263ffffffff1660e01b81526004016131d691815260200190565b5f60405180830381865afa1580156131f0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132179190810190614670565b6040516020016132289291906142a5565b604051602081830303815290604052925060018251613247919061431f565b8114613270578260405160200161325e9190614735565b60405160208183030381529060405292505b60010161317f565b508160405160200161328a9190614759565b6040516020818303038152906040529150509392505050565b5f546001600160a01b031633146132cc576040516282b42960e81b815260040160405180910390fd5b600c6110dc8282614547565b336132e281613775565b601154600160a01b900460ff168061330657505f546001600160a01b038281169116145b80156133165750633b9aca008210155b801561333a575060105461333a906001600160a01b03168261123d85610160614380565b613342575f80fd5b600e546010546040516323b872dd60e01b81526001600160a01b0384811660048301529182166024820152604481018590529116906323b872dd906064015f604051808303815f87803b158015613397575f80fd5b505af11580156133a9573d5f803e3d5ffd5b505050505050565b5f546001600160a01b031633146133da576040516282b42960e81b815260040160405180910390fd5b60178290556016610cda8282614547565b5f546001600160a01b03163314613414576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03811661343b576040516349e27cff60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f546001600160a01b031633146134ae576040516282b42960e81b815260040160405180910390fd5b60186110dc8282614547565b335f8181526004602052604081205490036110dc576001600160a01b03165f908152600b60205260409020805460ff1916911515919091179055565b5f6135227f0000000000000000000000000000000000000000000000000000000000000012600a61485d565b905090565b5f806135316134f6565b6001600160a01b038087165f818152600460205260408082208054948a168352908220549282529394509192909186919061356c838661431f565b90915550506001600160a01b038087165f90815260046020908152604080832080548a019055928a168252600b9052205460ff166135fb576001600160a01b0387165f908152600460205260408120546135c79085906144dd565b6135d185856144dd565b6135db919061431f565b90505f5b818110156135f8576135f0896137b8565b6001016135df565b50505b6001600160a01b0386165f908152600b602052604090205460ff16613672575f61362584836144dd565b6001600160a01b0388165f908152600460205260409020546136489086906144dd565b613652919061431f565b90505f5b8181101561366f5761366788613807565b600101613656565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516136b791815260200190565b60405180910390a35060019695505050505050565b60605f6136d8836139c5565b60010190505f8167ffffffffffffffff8111156136f7576136f7613d68565b6040519080825280601f01601f191660200182016040528015613721576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461372b57509392505050565b60016137688382614547565b506002610cda8282614547565b6001600160a01b0381165f90815260046020526040812054900361298c576001600160a01b0381165f908152600b60205260409020805460ff1916600117905550565b5f6137c282613a9c565b5f8181526015602090815260408083205460128054855260139093529083205580549293506001929091906137f890849061436d565b909155506110dc905082613b3f565b61381081613c60565b5f306001600160a01b0316634f02c4206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561384d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613871919061486b565b90505f60125482606443613885919061431f565b406040516020016138a0929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6138c291906144f0565b5f818152601460205260408120549192509060ff16156138f057505f8181526013602052604090205461390b565b505f818152601460205260409020805460ff19166001179055805b600160125f82825461391d919061431f565b90915550506012545f9081526014602052604090205460ff1661394257601254613954565b6012545f908152601360205260409020545b5f83815260136020908152604080832093909355601254825260148152828220805460ff1916600117905585825260159052818120839055905182916001600160a01b038716917f792daa4b2623ba70e38af40290b50417d8a1620a7deee03ad74ed721bf9c897f9190a350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613a035772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613a2f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613a4d57662386f26fc10000830492506010015b6305f5e1008310613a65576305f5e100830492506008015b6127108310613a7957612710830492506004015b60648310613a8b576064830492506002015b600a83106108f95760010192915050565b6001600160a01b0381165f90815260096020526040812054613afa5760405162461bcd60e51b81526020600482015260136024820152724f776e657220686173206e6f20746f6b656e7360681b604482015260640160405180910390fd5b6001600160a01b0382165f9081526009602052604090208054613b1f9060019061431f565b81548110613b2f57613b2f614291565b905f5260205f2001549050919050565b6001600160a01b038116613b6657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526009602052604081208054613b8b9060019061431f565b81548110613b9b57613b9b614291565b905f5260205f200154905060095f836001600160a01b03166001600160a01b031681526020019081526020015f20805480613bd857613bd8614332565b5f828152602080822083015f19908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116613c8757604051634e46966960e11b815260040160405180910390fd5b60038054600101908190555f818152600860205260409020546001600160a01b031615613cc75760405163119b4fd360e11b815260040160405180910390fd5b5f81815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600983529083208054600181810183558286529385200185905592529054613d1e919061431f565b5f828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613da557613da5613d68565b604052919050565b5f67ffffffffffffffff821115613dc657613dc6613d68565b50601f01601f191660200190565b5f82601f830112613de3575f80fd5b8135613df6613df182613dad565b613d7c565b818152846020838601011115613e0a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6020808385031215613e37575f80fd5b823567ffffffffffffffff80821115613e4e575f80fd5b818501915085601f830112613e61575f80fd5b813581811115613e7357613e73613d68565b8060051b613e82858201613d7c565b9182528381018501918581019089841115613e9b575f80fd5b86860192505b83831015613ed557823585811115613eb7575f80fd5b613ec58b89838a0101613dd4565b8352509186019190860190613ea1565b9998505050505050505050565b5f5b83811015613efc578181015183820152602001613ee4565b50505f910152565b602081525f8251806020840152613f22816040850160208701613ee2565b601f01601f19169190910160400192915050565b5f60208284031215613f46575f80fd5b5035919050565b80356001600160a01b0381168114611160575f80fd5b5f8060408385031215613f74575f80fd5b613f7d83613f4d565b946020939093013593505050565b5f805f60608486031215613f9d575f80fd5b613fa684613f4d565b9250613fb460208501613f4d565b9150604084013590509250925092565b801515811461298c575f80fd5b5f8060408385031215613fe2575f80fd5b613feb83613f4d565b91506020830135613ffb81613fc4565b809150509250929050565b5f60208284031215614016575f80fd5b61284982613f4d565b5f805f60608486031215614031575f80fd5b833567ffffffffffffffff80821115614048575f80fd5b61405487838801613dd4565b94506020860135915080821115614069575f80fd5b61407587838801613dd4565b9350604086013591508082111561408a575f80fd5b5061409786828701613dd4565b9150509250925092565b602080825282518282018190525f9190848201906040850190845b818110156140d8578351835292840192918401916001016140bc565b50909695505050505050565b5f805f805f608086880312156140f8575f80fd5b61410186613f4d565b945061410f60208701613f4d565b935060408601359250606086013567ffffffffffffffff80821115614132575f80fd5b818801915088601f830112614145575f80fd5b813581811115614153575f80fd5b896020828501011115614164575f80fd5b9699959850939650602001949392505050565b5f8060408385031215614188575f80fd5b50508035926020909101359150565b5f80604083850312156141a8575f80fd5b6141b183613f4d565b91506141bf60208401613f4d565b90509250929050565b5f805f606084860312156141da575f80fd5b6141e384613f4d565b95602085013595506040909401359392505050565b5f60208284031215614208575f80fd5b813567ffffffffffffffff81111561421e575f80fd5b61422a84828501613dd4565b949350505050565b5f8060408385031215614243575f80fd5b82359150602083013567ffffffffffffffff811115614260575f80fd5b61426c85828601613dd4565b9150509250929050565b5f60208284031215614286575f80fd5b813561284981613fc4565b634e487b7160e01b5f52603260045260245ffd5b5f83516142b6818460208801613ee2565b8351908301906142ca818360208801613ee2565b01949350505050565b600181811c908216806142e757607f821691505b60208210810361430557634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108f9576108f961430b565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215614356575f80fd5b81516001600160e01b031981168114612849575f80fd5b808201808211156108f9576108f961430b565b80820281158282048414176108f9576108f961430b565b5f602082840312156143a7575f80fd5b815161284981613fc4565b671116101134b2111d60c11b815281515f906143d5816008850160208701613ee2565b9190910160080192915050565b5f81546143ee816142d3565b60018281168015614406576001811461441b57614447565b60ff1984168752821515830287019450614447565b855f526020805f205f5b8581101561443e5781548a820152908401908201614425565b50505082870194505b5050505092915050565b5f61445c82846143e2565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b7574815262198e0b60ea1b60208201526023019392505050565b5f82516144a6818460208701613ee2565b702c2261747472696275746573223a5b5d7d60781b920191825250601101919050565b634e487b7160e01b5f52601260045260245ffd5b5f826144eb576144eb6144c9565b500490565b5f826144fe576144fe6144c9565b500690565b601f821115610cda57805f5260205f20601f840160051c810160208510156145285750805b601f840160051c820191505b81811015610cd7575f8155600101614534565b815167ffffffffffffffff81111561456157614561613d68565b6145758161456f84546142d3565b84614503565b602080601f8311600181146145a8575f84156145915750858301515b5f19600386901b1c1916600185901b1785556133a9565b5f85815260208120601f198616915b828110156145d6578886015182559484019460019091019084016145b7565b50858210156145f357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f61466082856143e2565b83516142ca818360208801613ee2565b5f60208284031215614680575f80fd5b815167ffffffffffffffff811115614696575f80fd5b8201601f810184136146a6575f80fd5b80516146b4613df182613dad565b8181528560208385010111156146c8575f80fd5b6111fc826020830160208601613ee2565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161471081601b850160208701613ee2565b91909101601b0192915050565b5f6001820161472e5761472e61430b565b5060010190565b5f8251614746818460208701613ee2565b600b60fa1b920191825250600101919050565b5f825161476a818460208701613ee2565b605d60f81b920191825250600101919050565b600181815b808511156147b757815f190482111561479d5761479d61430b565b808516156147aa57918102915b93841c9390800290614782565b509250929050565b5f826147cd575060016108f9565b816147d957505f6108f9565b81600181146147ef57600281146147f957614815565b60019150506108f9565b60ff84111561480a5761480a61430b565b50506001821b6108f9565b5060208310610133831016604e8410600b8410161715614838575081810a6108f9565b614842838361477d565b805f19048211156148555761485561430b565b029392505050565b5f61284960ff8416836147bf565b5f6020828403121561487b575f80fd5b505191905056fe2e706e675c222077696474683d5c223530305c22206865696768743d5c223530305c22202f3e3c7376672077696474683d5c223530305c22206865696768743d5c223530305c2220786d6c6e733d5c22687474703a2f2f7777772e77332e6f72672f323030302f7376675c223e3c696d61676520687265663d5c222e706e675c222077696474683d5c223530305c22206865696768743d5c223530305c2220636c69702d706174683d5c2275726c2823616e6f6e6c756c7aa2646970667358221220ab634747af8f7e425d5acc3b2caf3a956d7644c461f3f2cfdcccf1d300763fce64736f6c63430008180033

Deployed Bytecode Sourcemap

18682:11159:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27361:345;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8794:18;;;:::i;9505:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;9505:46:0;;;;;;-1:-1:-1;;;;;3194:32:1;;;3176:51;;3164:2;3149:18;9505:46:0;3030:203:1;12373:642:0;;;;;;:::i;:::-;;:::i;:::-;;;3840:14:1;;3833:22;3815:41;;3803:2;3788:18;12373:642:0;3675:187:1;19254:69:0;;;:::i;:::-;;9030:36;;;;;;;;4013:25:1;;;4001:2;3986:18;9030:36:0;3867:177:1;13422:1732:0;;;;;;:::i;:::-;;:::i;6791:151::-;;;:::i;21832:28::-;;;:::i;8930:31::-;;;;;;;;4554:4:1;4542:17;;;4524:36;;4512:2;4497:18;8930:31:0;4382:184:1;19163:83:0;;;:::i;15450:405::-;;;;;;:::i;:::-;;:::i;9165:21::-;;;;;;26540:528;;;;;;:::i;:::-;;:::i;11101:149::-;;;;;;:::i;:::-;;:::i;19515:96::-;;;;;;:::i;:::-;;:::i;11885:193::-;;;;;;:::i;:::-;;:::i;27076:277::-;;;;;;:::i;:::-;;:::i;21655:107::-;;;:::i;20026:193::-;;;:::i;9271:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;21867:84;;;:::i;22230:744::-;;;;;;:::i;:::-;;:::i;22986:3546::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6232:20::-;;;;;-1:-1:-1;;;;;6232:20:0;;;20328:42;;;;;;:::i;:::-;;;;;;;;;;;;;;21769:28;;;;;;8848:20;;;:::i;10447:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13066:207;;;;;;:::i;:::-;;:::i;15213:160::-;;;;;;:::i;:::-;;:::i;19331:176::-;;;;;;:::i;:::-;;:::i;20255:31::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15950:436;;;;;;:::i;:::-;;:::i;11649:164::-;;;:::i;21804:21::-;;;:::i;21236:411::-;;;;;;:::i;:::-;;:::i;18714:26::-;;;:::i;27714:1544::-;;;;;;:::i;:::-;;:::i;10121:112::-;;;;;;:::i;:::-;;:::i;9385:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29266:572;;;;;;:::i;:::-;;:::i;19619:106::-;;;;;;:::i;:::-;;:::i;19733:285::-;;;;;;:::i;:::-;;:::i;9616:68::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21960:151;;;;;;:::i;:::-;;:::i;6564:219::-;;;;;;:::i;:::-;;:::i;22119:97::-;;;;;;:::i;:::-;;:::i;11482:161::-;;;;;;:::i;:::-;;:::i;27361:345::-;27426:13;27452:32;27510:9;27505:148;27529:12;:19;27525:1;:23;27505:148;;;27605:18;27625:12;27638:1;27625:15;;;;;;;;:::i;:::-;;;;;;;27591:50;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27591:50:0;;;;;;;;;;-1:-1:-1;27550:3:0;;27505:148;;;-1:-1:-1;27680:18:0;27361:345;-1:-1:-1;;27361:345:0:o;8794:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12373:642::-;12476:4;12511:6;;12497:10;:20;;:38;;;;;12534:1;12521:10;:14;12497:38;12493:491;;;12552:13;12568:20;;;:8;:20;;;;;;-1:-1:-1;;;;;12568:20:0;12609:10;:19;;;;;:59;;-1:-1:-1;;;;;;12633:23:0;;;;;;:16;:23;;;;;;;;12657:10;12633:35;;;;;;;;;;12632:36;12609:59;12605:121;;;12696:14;;-1:-1:-1;;;12696:14:0;;;;;;;;;;;12605:121;12742:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;12742:33:0;-1:-1:-1;;;;;12742:33:0;;;;;;;;;12797:36;;4013:25:1;;;12797:36:0;;;;;;3986:18:1;12797:36:0;;;;;;;12537:308;12493:491;;;12876:10;12866:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;12866:30:0;;;;;;;;;;;;:43;;;12931:41;4013:25:1;;;12866:30:0;;12876:10;12931:41;;3986:18:1;12931:41:0;;;;;;;12493:491;-1:-1:-1;13003:4:0;12373:642;;;;;:::o;19254:69::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;19302:6:::1;:13:::0;;-1:-1:-1;;;;19302:13:0::1;-1:-1:-1::0;;;19302:13:0::1;::::0;;19254:69::o;13422:1732::-;13568:6;;13554:10;:20;;:38;;;;-1:-1:-1;;;;;;13579:13:0;;;;;;:9;:13;;;;;;;;13578:14;13554:38;13550:1597;;;13620:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;13612:28:0;;;13620:20;;13612:28;13608:91;;13668:15;;-1:-1:-1;;;13668:15:0;;;;;;;;;;;13608:91;-1:-1:-1;;;;;13719:16:0;;13715:82;;13763:18;;-1:-1:-1;;;13763:18:0;;;;;;;;;;;13715:82;13835:10;-1:-1:-1;;;;;13835:18:0;;;;;;:74;;-1:-1:-1;;;;;;13875:22:0;;;;;;:16;:22;;;;;;;;13898:10;13875:34;;;;;;;;;;13874:35;13835:74;:132;;;;-1:-1:-1;13944:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;13944:23:0;13930:10;:37;;13835:132;13813:225;;;14008:14;;-1:-1:-1;;;14008:14:0;;;;;;;;;;;13813:225;14073:10;:8;:10::i;:::-;-1:-1:-1;;;;;14054:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;14146:10:0;;-1:-1:-1;14146:8:0;:10::i;:::-;-1:-1:-1;;;;;14129:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;14188:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;14188:25:0;;;;;;;;14235:11;:23;;;;;14228:30;;;;;;;;14336:12;;;;;:6;:12;;;;;14349:19;;:23;;-1:-1:-1;;14349:23:0;:::i;:::-;14336:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;14388:12:0;;;;:6;:12;;;;;;14401:23;;;:11;:23;;;;;;;14388:37;;14336;;-1:-1:-1;14336:37:0;;14388;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;14472:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;14472:18:0;;;;;;;;;;;;14576:23;;;:11;:23;;;;;;;14551:22;;;;;;:48;-1:-1:-1;;;;;14653:10:0;;;;;:6;:10;;;;;:27;;14472:18;14653:27;;;;;;;;;;;;;;;14763:10;;:17;;:21;;14472:18;14763:21;:::i;:::-;14737:23;;;;:11;:23;;;;;;:47;;;;14806:30;;14749:10;;-1:-1:-1;;;;;14806:30:0;;;;;;;;;;;14876:2;-1:-1:-1;;;;;14856:35:0;14870:4;-1:-1:-1;;;;;14856:35:0;;14880:10;:8;:10::i;:::-;14856:35;;4013:25:1;;;4001:2;3986:18;14856:35:0;;;;;;;13593:1310;13422:1732;;;:::o;13550:1597::-;-1:-1:-1;;;;;14942:15:0;;14924;14942;;;:9;:15;;;;;;;;14958:10;14942:27;;;;;;;;-1:-1:-1;;14990:28:0;;14986:101;;15067:20;15077:10;15067:7;:20;:::i;:::-;-1:-1:-1;;;;;15037:15:0;;;;;;:9;:15;;;;;;;;15053:10;15037:27;;;;;;;:50;14986:101;15104:31;15114:4;15120:2;15124:10;15104:9;:31::i;:::-;;14909:238;13550:1597;13422:1732;;;:::o;6791:151::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;6870:1:::1;6854:18:::0;;-1:-1:-1;;;;;;6854:18:0::1;::::0;;6890:44:::1;::::0;6911:10:::1;::::0;6890:44:::1;::::0;6870:1;;6890:44:::1;6791:151::o:0;21832:28::-;;;;;;;:::i;19163:83::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;19218:5:::1;;;;;;;;;-1:-1:-1::0;;;;;19218:5:0::1;-1:-1:-1::0;;;;;19218:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19163:83::o:0;15450:405::-;15574:26;15587:4;15593:2;15597;15574:12;:26::i;:::-;-1:-1:-1;;;;;15631:14:0;;;:19;;;;:154;;-1:-1:-1;15667:61:0;;-1:-1:-1;;;15667:61:0;;;15703:10;15667:61;;;10936:34:1;-1:-1:-1;;;;;11006:15:1;;;10986:18;;;10979:43;11038:18;;;11031:34;;;11101:3;11081:18;;;11074:31;-1:-1:-1;11121:19:1;;;11114:30;15745:40:0;;15667:35;;;;15745:40;;11161:19:1;;15667:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;15667:118:0;;;15631:154;15613:235;;;15819:17;;-1:-1:-1;;;15819:17:0;;;;;;;;;;;26540:528;26597:13;26622:16;26641:17;26648:9;26641:6;:17::i;:::-;26669:22;;;;;;;;-1:-1:-1;26669:22:0;;;26728:15;;26741:1;26728:15;;;;;;;;;26622:36;;-1:-1:-1;26669:22:0;;-1:-1:-1;;26728:15:0;;;;;;;;;;;;;;;;;;;;26704:39;;26760:6;26756:284;26769:2;:9;26767:1;:11;26756:284;;;26799:14;;;;;;;;;;;;;-1:-1:-1;;;26799:14:0;;;:5;26805:1;26799:8;;;;;;;;:::i;:::-;;;;;;:14;;;;26839:25;26857:2;26860:1;26857:5;;;;;;;;:::i;:::-;;;;;;;26839:16;:25::i;:::-;26828:5;26834:1;26828:8;;;;;;;;:::i;:::-;;;;;;:36;;;;26879:14;;;;;;;;;;;;;-1:-1:-1;;;26879:14:0;;;:5;26885:1;26879:8;;;;;;;;:::i;:::-;;;;;;;;;;:14;26919:27;26937:2;26940:3;:1;26942;26940:3;:::i;:::-;26937:7;;;;;;;;:::i;26919:27::-;26908:5;26914:1;26908:8;;;;;;;;:::i;:::-;;;;;;:38;;;;26961:14;;;;;;;;;;;;;-1:-1:-1;;;26961:14:0;;;:5;26967:1;26961:8;;;;;;;;:::i;:::-;;;;;;:14;;;;27010:3;27015:11;27020:5;27015:4;:11::i;:::-;26996:32;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26996:32:0;;;;;;;;;;-1:-1:-1;26779:4:0;26782:1;26779:4;;:::i;:::-;;;26756:284;;;-1:-1:-1;27057:3:0;;26540:528;-1:-1:-1;;;;26540:528:0:o;11101:149::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;-1:-1:-1;;;;;11182:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;:20;;11179:63:::1;;-1:-1:-1::0;;;;;11217:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;11217:25:0::1;::::0;::::1;;;::::0;;11179:63:::1;11101:149:::0;;:::o;19515:96::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;19578:8:::1;:25:::0;;-1:-1:-1;;;;;;19578:25:0::1;-1:-1:-1::0;;;;;19578:25:0;;;::::1;::::0;;;::::1;::::0;;19515:96::o;11885:193::-;11943:13;11977:12;;;:8;:12;;;;;;-1:-1:-1;;;;;11977:12:0;;12002:69;;12049:10;;-1:-1:-1;;;12049:10:0;;;;;;;;;;;12002:69;11885:193;;;:::o;27076:277::-;27223:15;;;27236:1;27223:15;;;;;;;;;27174:13;;27199:21;;27223:15;;;;;;;;;;;;;;;;;;;;;27199:39;;27260:4;27249:5;27255:1;27249:8;;;;;;;;:::i;:::-;;;;;;:15;;;;27286:4;27275:5;27281:1;27275:8;;;;;;;;:::i;:::-;;;;;;:15;;;;27312:4;27301:5;27307:1;27301:8;;;;;;;;:::i;:::-;;;;;;:15;;;;27334:11;27339:5;27334:4;:11::i;:::-;27327:18;27076:277;-1:-1:-1;;;;;27076:277:0:o;21655:107::-;;;;;;;:::i;20026:193::-;20082:10;20065:14;20115:10;:8;:10::i;:::-;20163:4;;20103:22;;-1:-1:-1;20145:33:0;;20155:6;;-1:-1:-1;;;;;20163:4:0;20169:8;20103:22;20169:3;:8;:::i;:::-;20145:9;:33::i;:::-;:64;;;;-1:-1:-1;20182:5:0;;:27;;-1:-1:-1;;;20182:27:0;;-1:-1:-1;;;;;11981:32:1;;;20182:27:0;;;11963:51:1;12030:18;;;12023:34;;;20182:5:0;;;;:14;;11936:18:1;;20182:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20136:75;;;;;21867:84;;;;;;;:::i;22230:744::-;22301:11;22315:19;;;:15;:19;;;;;;22276:13;;22369:26;22315:19;22369:16;:26::i;:::-;22345:50;;22408:26;22511:32;;;;;;;;;;;;;;-1:-1:-1;;;22511:32:0;;;22532:5;22511:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22511:32:0;;;:7;:32::i;:::-;22560:7;22596:20;22613:2;22596:16;:20::i;:::-;22569:49;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22569:49:0;;;;;;;;;;22545:75;;;22569:49;22545:75;;:::i;:::-;;;;-1:-1:-1;;22545:75:0;;;;;;;;;;22497:125;;;22545:75;22497:125;;:::i;:::-;;;;;;;;;;;;;22660:60;;;;;;;;;;;;;;-1:-1:-1;;;22660:60:0;;;22687:11;22660:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22660:60:0;;;:7;:60::i;:::-;22761:7;22747:60;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22747:60:0;;;;;;;;;;22645:189;;;22747:60;22645:189;;:::i;:::-;;;;-1:-1:-1;;22645:189:0;;;;;;;;;;22465:384;;;22645:189;22465:384;;:::i;:::-;;;;;;;;;;;;;22864:23;22877:6;22884:2;22864:12;:23::i;:::-;22437:461;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22408:490;;22932:12;22918:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;22911:55;;;;;22230:744;;;:::o;22986:3546::-;23030:13;;23082:6;23091:3;23093:1;23091;:3;:::i;:::-;23082:12;;23110:1;23108;:3;23105:3400;;;23130:1;23133;23130:4;23127:1100;;23206:13;;;23217:1;23206:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23206:13:0;23201:18;;23226:3;23220:2;23223:1;23220:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23236:3;23230:2;23233:1;23230:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23246:3;23240:2;23243:1;23240:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23256:3;23250:2;23253:1;23250:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23266:3;23260:2;23263:1;23260:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23276:3;23270:2;23273:1;23270:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23105:3400;;23127:1100;23303:1;23306;23303:4;23300:927;;23463:14;;;23474:2;23463:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23463:14:0;23458:19;;23502:3;23496:2;23499:1;23496:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23512:3;23506:2;23509:1;23506:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23522:3;23516:2;23519:1;23516:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23532:3;23526:2;23529:1;23526:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23542:3;23536:2;23539:1;23536:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23553:3;23546:2;23549;23546:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23564:3;23557:2;23560;23557:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23575:3;23568:2;23571;23568:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23586:3;23579:2;23582;23579:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23597:3;23590:2;23593;23590:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23608:3;23601:2;23604;23601:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23637:3;23630:2;23633;23630:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23648:3;23641:2;23644;23641:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23659:3;23652:2;23655;23652:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23670:3;23663:2;23666;23663:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23681:3;23674:2;23677;23674:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23692:3;23685:2;23688;23685:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23703:3;23696:2;23699;23696:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23714:3;23707:2;23710;23707:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23725:3;23718:2;23721;23718:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23736:3;23729:2;23732;23729:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23747:3;23740:2;23743;23740:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23758:3;23751:2;23754;23751:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;23769:3;23762:2;23765;23762:6;;;;;;;;:::i;23300:927::-;23796:1;23799;23796:4;23793:434;;23872:13;;;23883:1;23872:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23872:13:0;23867:18;;23892:2;23886;23889:1;23886:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;23901:2;23895;23898:1;23895:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;23910:3;23904:2;23907:1;23904:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23920:2;23914;23917:1;23914:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;23929:3;23923:2;23926:1;23923:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23939:3;23933:2;23936:1;23933:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;23949:2;23943;23946:1;23943:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;23958:3;23952:2;23955:1;23952:5;;;;;;;;:::i;23793:434::-;23985:1;23988;23985:4;23982:245;;24078:14;;;24089:2;24078:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24078:14:0;24073:19;;24099:2;24093;24096:1;24093:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24108:3;24102:2;24105:1;24102:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24118:3;24112:2;24115:1;24112:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24128:2;24122;24125:1;24122:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24137:3;24131:2;24134:1;24131:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24147:2;24141;24144:1;24141:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24156:3;24150:2;24153:1;24150:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24166:3;24160:2;24163:1;24160:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24176:3;24170:2;24173:1;24170:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24186:3;24180:2;24183:1;24180:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24197:3;24190:2;24193;24190:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;24208:3;24201:2;24204;24201:6;;;;;;;;:::i;23982:245::-;23105:3400;;;24248:1;24246;:3;:11;;;;;24255:2;24253:1;:4;24246:11;24243:2262;;;24276:1;24279;24276:4;24273:870;;24364:14;;;24375:2;24364:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24364:14:0;24359:19;;24385:3;24379:2;24382:1;24379:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24395:3;24389:2;24392:1;24389:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24405:3;24399:2;24402:1;24399:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24415:3;24409:2;24412:1;24409:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24425:3;24419:2;24422:1;24419:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24435:3;24429:2;24432:1;24429:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24445:3;24439:2;24442:1;24439:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24456:1;24449:2;24452;24449:6;;;;;;;;:::i;:::-;;;;;;:8;;;;;24465:3;24458:2;24461;24458:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;24273:870;;;24492:1;24495;24492:4;24489:654;;24556:13;;;24567:1;24556:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24556:13:0;24551:18;;24576:3;24570:2;24573:1;24570:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24586:3;24580:2;24583:1;24580:5;;;;;;;;:::i;24489:654::-;24613:1;24616;24613:4;24610:533;;24685:13;;;24696:1;24685:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24685:13:0;24680:18;;24705:3;24699:2;24702:1;24699:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24715:3;24709:2;24712:1;24709:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24725:3;24719:2;24722:1;24719:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24735:3;24729:2;24732:1;24729:5;;;;;;;;:::i;24610:533::-;24762:1;24765;24762:4;24759:384;;24890:14;;;24901:2;24890:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24890:14:0;24885:19;;24911:2;24905;24908:1;24905:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24920:2;24914;24917:1;24914:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24929:2;24923;24926:1;24923:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24938:2;24932;24935:1;24932:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24947:3;24941:2;24944:1;24941:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24957:3;24951:2;24954:1;24951:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;24967:2;24961;24964:1;24961:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;24977:3;24970:2;24973;24970:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;24988:2;24981;24984;24981:6;;;;;;;;:::i;:::-;;;;;;:9;;;;;25016:3;25009:2;25012;25009:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25027:3;25020:2;25023;25020:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25038:3;25031:2;25034;25031:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25049:3;25042:2;25045;25042:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25060:3;25053:2;25056;25053:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25071:3;25064:2;25067;25064:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25082:2;25075;25078;25075:6;;;;;;;;:::i;:::-;;;;;;:9;;;;;25092:3;25085:2;25088;25085:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25103:2;25096;25099;25096:6;;;;;;;;:::i;:::-;;;;;;:9;;;;;25113:3;25106:2;25109;25106:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25124:3;25117:2;25120;25117:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;24759:384;25160:3;25162:1;25160;:3;:::i;:::-;25165:1;25160:6;25157:150;;25206:6;25202:90;25215:2;:9;25213:1;:11;25202:90;;;25267:2;25270:1;25267:5;;;;;;;;:::i;:::-;;;;;;;25261:3;:11;;;;:::i;:::-;25253:2;25256:1;25253:5;;;;;;;;:::i;:::-;;;;;;;;;;:19;25225:4;25228:1;25225:4;;:::i;:::-;;;25202:90;;;;24243:2262;;;25328:2;25326:1;:4;:12;;;;;25336:2;25334:1;:4;25326:12;25323:1182;;;25357:1;25360;25357:4;25354:605;;25433:13;;;25444:1;25433:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25433:13:0;25428:18;;25453:3;25447:2;25450:1;25447:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25463:3;25457:2;25460:1;25457:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25473:3;25467:2;25470:1;25467:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25483:3;25477:2;25480:1;25477:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25493:3;25487:2;25490:1;25487:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25503:3;25497:2;25500:1;25497:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25354:605;;;25550:1;25553;25550:4;25547:412;;25622:13;;;25633:1;25622:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25622:13:0;25617:18;;25642:3;25636:2;25639:1;25636:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25652:3;25646:2;25649:1;25646:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25662:3;25656:2;25659:1;25656:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25672:3;25666:2;25669:1;25666:5;;;;;;;;:::i;25547:412::-;25719:1;25722;25719:4;25716:243;;25809:14;;;25820:2;25809:14;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25809:14:0;25804:19;;25830:2;25824;25827:1;25824:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;25839:3;25833:2;25836:1;25833:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25849:3;25843:2;25846:1;25843:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25859:3;25853:2;25856:1;25853:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25869:3;25863:2;25866:1;25863:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25879:3;25873:2;25876:1;25873:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25889:2;25883;25886:1;25883:5;;;;;;;;:::i;:::-;;;;;;:8;;;;;25898:3;25892:2;25895:1;25892:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;25909:3;25902:2;25905;25902:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25920:3;25913:2;25916;25913:6;;;;;;;;:::i;:::-;;;;;;:10;;;;;25716:243;25976:3;25978:1;25976;:3;:::i;:::-;25981:1;25976:6;25973:229;;26010:6;26039;26035:152;26048:2;:9;26046:1;:11;26035:152;;;26090:2;26093:1;26090:5;;;;;;;;:::i;:::-;;;;;;;26086:9;;26126:2;26129:1;26131;26129:3;;;;:::i;:::-;26126:7;;;;;;;;:::i;:::-;;;;;;;26118:2;26121:1;26118:5;;;;;;;;:::i;:::-;;;;;;;;;;:15;26166:1;26156:2;26159:3;:1;26161;26159:3;:::i;:::-;26156:7;;;;;;;;:::i;:::-;;;;;;;;;;:11;26058:4;26061:1;26058:4;;:::i;:::-;;;26035:152;;;;25983:219;25323:1182;;;26272:13;;;26283:1;26272:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26272:13:0;26267:18;;26292:3;26286:2;26289:1;26286:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;26302:3;26296:2;26299:1;26296:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;26312:3;26306:2;26309:1;26306:5;;;;;;;;:::i;:::-;;;;;;:9;;;;;26322:3;26316:2;26319:1;26316:5;;;;;;;;:::i;:::-;;;;;;;;;;:9;26343:3;26345:1;26343;:3;:::i;:::-;26348:1;26343:6;26340:154;;26389:6;26385:94;26398:2;:9;26396:1;:11;26385:94;;;26452:2;26455:3;:1;26457;26455:3;:::i;:::-;26452:7;;;;;;;;:::i;:::-;;;;;;;26446:3;:13;;;;:::i;:::-;26436:2;26439:3;:1;26441;26439:3;:::i;:::-;26436:7;;;;;;;;:::i;:::-;;;;;;;;;;:23;26408:4;26411:1;26408:4;;:::i;:::-;;;26385:94;;;;-1:-1:-1;26522:2:0;22986:3546;-1:-1:-1;;22986:3546:0:o;8848:20::-;;;;;;;:::i;13066:207::-;13169:10;13152:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;13152:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;13152:49:0;;;;;;;;;;13219:46;;3815:41:1;;;13152:38:0;;13169:10;13219:46;;3788:18:1;13219:46:0;;;;;;;13066:207;;:::o;15213:160::-;15308:4;15332:33;15342:10;15354:2;15358:6;15332:9;:33::i;:::-;15325:40;15213:160;-1:-1:-1;;;15213:160:0:o;19331:176::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;19444:30:::1;19459:5;19466:7;19444:14;:30::i;:::-;19485:5;:14;19493:6:::0;19485:5;:14:::1;:::i;15950:436::-:0;16104:26;16117:4;16123:2;16127;16104:12;:26::i;:::-;-1:-1:-1;;;;;16161:14:0;;;:19;;;;:156;;-1:-1:-1;16197:63:0;;-1:-1:-1;;;16197:63:0;;;16277:40;-1:-1:-1;;;;;16197:35:0;;;16277:40;;16197:63;;16233:10;;16245:4;;16251:2;;16255:4;;;;16197:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;16197:120:0;;;16161:156;16143:236;;;16350:17;;-1:-1:-1;;;16350:17:0;;;;;;;;;;;11649:164;11708:10;11691:14;11732:17;;;:9;:17;;;;;;:20;;11729:76;;-1:-1:-1;;;;;11788:17:0;;;;;;:9;:17;;;;;;;-1:-1:-1;;11767:38:0;;11788:17;;;;11787:18;11767:38;;;11729:76;11680:133;11649:164::o;21804:21::-;;;;;;;:::i;21236:411::-;21296:13;21355:1;21332:12;21326:26;;;;;:::i;:::-;;;:30;21322:318;;;21425:19;;;;:15;:19;;;;;;21394:12;;21408:37;;:16;:37::i;:::-;21380:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21373:74;;21236:411;;;:::o;21322:318::-;21592:8;;:17;;-1:-1:-1;;;21592:17:0;;;;;4013:25:1;;;-1:-1:-1;;;;;21592:8:0;;;;:13;;3986:18:1;;21592:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21592:17:0;;;;;;;;;;;;:::i;:::-;21504:124;;;;;;;;:::i;18714:26::-;;;;;;;:::i;27714:1544::-;27778:13;27803:11;27957:10;;27947:6;27832:122;;;;;;;19397:34:1;19385:47;;19462:34;19457:2;19448:12;;19441:56;19527:33;19522:2;19513:12;;19506:55;19586:2;19577:12;;19570:28;;;;19623:3;19614:13;;19155:478;27832:122:0;;;;;;;;;;;;;27822:133;;;;;;27817:139;;:150;;;;:::i;:::-;27803:164;;27978:11;28145:10;;28135:6;28007:135;;;;;;;19880:34:1;19868:47;;19945:34;19940:2;19931:12;;19924:56;20010:34;20005:2;19996:12;;19989:56;-1:-1:-1;;;20070:2:1;20061:12;;20054:36;20115:3;20106:13;;20099:29;;;;20153:3;20144:13;;19638:525;28007:135:0;;;;;;;;;;;;;27997:146;;;;;;27992:152;;:163;;;;:::i;:::-;28196:40;;-1:-1:-1;;;28196:40:0;;;20398:28:1;20442:12;;;20435:28;;;27978:177:0;;-1:-1:-1;28166:12:0;;28239:2;;20479:12:1;;28196:40:0;;;;;;;;;;;;28186:51;;;;;;28181:57;;:60;;;;:::i;:::-;28166:75;;28252:132;28268:6;28258;:16;28252:132;;28362:10;;28350:8;;;:::i;:::-;28314:45;;-1:-1:-1;;;28314:45:0;;;20872:31:1;20919:12;;;20912:28;;;28350:8:0;;-1:-1:-1;20956:12:1;;28314:45:0;;;;;;;;;;;;28304:56;;;;;;28299:62;;:73;;;;:::i;:::-;28290:82;;28252:132;;;28394:22;28419;28437:2;28419:16;:22::i;:::-;28476:16;;;28489:2;28476:16;;;;;;;;;28394:47;;-1:-1:-1;28452:21:0;;28476:16;;;;;;;;;;;;;;;;;;;;;28452:40;;28503:105;;;;;;;;;;;;;;;;;:5;28509:1;28503:8;;;;;;;;:::i;:::-;;;;;;:105;;;;28630:7;28619:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28625:1;28619:8;;;;;;;;:::i;:::-;;;;;;:18;;;;28659:24;28676:6;28659:16;:24::i;:::-;28648:5;28654:1;28648:8;;;;;;;;:::i;:::-;;;;;;:35;;;;28694:56;;;;;;;;;;;;;;;;;:5;28700:1;28694:8;;;;;;;;:::i;:::-;;;;;;:56;;;;28761:37;;;;;;;;;;;;;;;;;:5;28767:1;28761:8;;;;;;;;:::i;:::-;;;;;;:37;;;;28820:8;28809:5;28815:1;28809:8;;;;;;;;:::i;:::-;;;;;;:19;;;;28839:36;;;;;;;;;;;;;-1:-1:-1;;;28839:36:0;;;:5;28845:1;28839:8;;;;;;;;:::i;:::-;;;;;;:36;;;;28897:20;28909:7;28897:11;:20::i;:::-;28886:5;28892:1;28886:8;;;;;;;;:::i;:::-;;;;;;:31;;;;28928:45;;;;;;;;;;;;;;;;;:5;28934:1;28928:8;;;;;;;;:::i;:::-;;;;;;:45;;;;28995:7;28984:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28990:1;28984:8;;;;;;;;:::i;:::-;;;;;;:18;;;;29025:24;29042:6;29025:16;:24::i;:::-;29013:5;29019:2;29013:9;;;;;;;;:::i;:::-;;;;;;:36;;;;29060:81;;;;;;;;;;;;;;;;;:5;29066:2;29060:9;;;;;;;;:::i;:::-;;;;;;:81;;;;29164:8;29152:5;29158:2;29152:9;;;;;;;;:::i;:::-;;;;;;:20;;;;29183:28;;;;;;;;;;;;;-1:-1:-1;;;29183:28:0;;;:5;29189:2;29183:9;;;;;;;;:::i;:::-;;;;;;:28;;;;29239:11;29244:5;29239:4;:11::i;:::-;29232:18;27714:1544;-1:-1:-1;;;;;;;;27714:1544:0:o;10121:112::-;-1:-1:-1;;;;;10212:13:0;;;;;;:6;:13;;;;;;;;;10205:20;;;;;;;;;;;;;;;;;10180:13;;10205:20;;;10212:13;10205:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10121:112;;;:::o;29266:572::-;29381:17;;;;;;;;;;;;-1:-1:-1;;;29381:17:0;;;;-1:-1:-1;29429:20:0;29444:4;29429:14;:20::i;:::-;29409:40;-1:-1:-1;29464:9:0;;:22;;;;-1:-1:-1;29477:9:0;;29464:22;29460:73;;;29511:3;:10;29502:19;;29460:73;29554:6;29543:233;29563:6;29561:1;:8;29543:233;;;29629:8;;29643:6;;29617:11;;-1:-1:-1;;;;;29629:8:0;;:13;;29643:3;;29647:1;;29643:6;;;;;;:::i;:::-;;;;;;;29629:21;;;;;;;;;;;;;4013:25:1;;4001:2;3986:18;;3867:177;29629:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29629:21:0;;;;;;;;;;;;:::i;:::-;29603:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29589:63;;29684:1;29673:3;:10;:12;;;;:::i;:::-;29670:1;:15;29667:98;;29733:11;29719:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;29705:44;;29667:98;29570:3;;29543:233;;;;29814:11;29800:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;29786:44;;29370:468;29266:572;;;;;:::o;19619:106::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;19693:12:::1;:24;19708:9:::0;19693:12;:24:::1;:::i;19733:285::-:0;19805:10;19826:26;19805:10;19826:18;:26::i;:::-;19873:6;;-1:-1:-1;;;19873:6:0;;;;;:25;;-1:-1:-1;19893:5:0;;-1:-1:-1;;;;;19883:15:0;;;19893:5;;19883:15;19873:25;19872:49;;;;;19911:10;19903:6;:18;;19872:49;:87;;;;-1:-1:-1;19935:4:0;;19925:34;;-1:-1:-1;;;;;19935:4:0;19941:6;19948:10;19952:6;19948:3;:10;:::i;19925:34::-;19863:98;;;;;;19972:5;;19998:4;;19972:38;;-1:-1:-1;;;19972:38:0;;-1:-1:-1;;;;;22129:15:1;;;19972:38:0;;;22111:34:1;19998:4:0;;;22161:18:1;;;22154:43;22213:18;;;22206:34;;;19972:5:0;;;:18;;22046::1;;19972:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19777:241;19733:285;:::o;21960:151::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;22050:10:::1;:24:::0;;;22085:7:::1;:18;22095:8:::0;22085:7;:18:::1;:::i;6564:219::-:0;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;-1:-1:-1;;;;;6647:20:0;::::1;6643:47;;6676:14;;-1:-1:-1::0;;;6676:14:0::1;;;;;;;;;;;6643:47;6703:5;:14:::0;;-1:-1:-1;;;;;;6703:14:0::1;-1:-1:-1::0;;;;;6703:14:0;::::1;::::0;;::::1;::::0;;6735:40:::1;::::0;6703:14;;6756:10:::1;::::0;6735:40:::1;::::0;6703:5;6735:40:::1;6564:219:::0;:::o;22119:97::-;6319:5;;-1:-1:-1;;;;;6319:5:0;6305:10;:19;6301:46;;6333:14;;-1:-1:-1;;;6333:14:0;;;;;;;;;;;6301:46;22190:7:::1;:18;22200:8:::0;22190:7;:18:::1;:::i;11482:161::-:0;11551:10;11534:14;11575:17;;;:9;:17;;;;;;:20;;11572:63;;-1:-1:-1;;;;;11610:17:0;;;;;:9;:17;;;;;:25;;-1:-1:-1;;11610:25:0;;;;;;;;;;11482:161::o;17552:92::-;17595:7;17622:14;17628:8;17622:2;:14;:::i;:::-;17615:21;;17552:92;:::o;16454:1059::-;16567:4;16584:12;16599:10;:8;:10::i;:::-;-1:-1:-1;;;;;16650:15:0;;;16620:27;16650:15;;;:9;:15;;;;;;;;16708:13;;;;;;;;;16734:15;;;16584:25;;-1:-1:-1;16650:15:0;;16708:13;;16753:6;;16650:15;16734:25;16753:6;16650:15;16734:25;:::i;:::-;;;;-1:-1:-1;;;;;;;16797:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;16905:15;;;;;:9;:15;;;;;;16900:234;;-1:-1:-1;;;;;16994:15:0;;16937:22;16994:15;;;:9;:15;;;;;;:22;;17012:4;;16994:22;:::i;:::-;16963:26;16985:4;16963:19;:26;:::i;:::-;16962:55;;;;:::i;:::-;16937:80;;17037:9;17032:91;17056:14;17052:1;:18;17032:91;;;17096:11;17102:4;17096:5;:11::i;:::-;17072:3;;17032:91;;;;16922:212;16900:234;-1:-1:-1;;;;;17210:13:0;;;;;;:9;:13;;;;;;;;17205:230;;17240:22;17291:28;17315:4;17291:21;:28;:::i;:::-;-1:-1:-1;;;;;17266:13:0;;;;;;:9;:13;;;;;;:20;;17282:4;;17266:20;:::i;:::-;17265:55;;;;:::i;:::-;17240:80;;17340:9;17335:89;17359:14;17355:1;:18;17335:89;;;17399:9;17405:2;17399:5;:9::i;:::-;17375:3;;17335:89;;;;17225:210;17205:230;17472:2;-1:-1:-1;;;;;17452:31:0;17466:4;-1:-1:-1;;;;;17452:31:0;;17476:6;17452:31;;;;4013:25:1;;4001:2;3986:18;;3867:177;17452:31:0;;;;;;;;-1:-1:-1;17501:4:0;;16454:1059;-1:-1:-1;;;;;;16454:1059:0:o;5335:718::-;5391:13;5442:14;5459:17;5470:5;5459:10;:17::i;:::-;5479:1;5459:21;5442:38;;5495:20;5529:6;5518:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5518:18:0;-1:-1:-1;5495:41:0;-1:-1:-1;5660:28:0;;;5676:2;5660:28;5717:290;-1:-1:-1;;5749:5:0;-1:-1:-1;;;5886:2:0;5875:14;;5870:32;5749:5;5857:46;5949:2;5940:11;;;-1:-1:-1;5970:21:0;5717:290;5970:21;-1:-1:-1;6028:6:0;5335:718;-1:-1:-1;;;5335:718:0:o;18515:160::-;18628:4;:12;18635:5;18628:4;:12;:::i;:::-;-1:-1:-1;18651:6:0;:16;18660:7;18651:6;:16;:::i;11262:134::-;-1:-1:-1;;;;;11329:17:0;;;;;;:9;:17;;;;;;:20;;11326:62;;-1:-1:-1;;;;;11364:17:0;;;;;;:9;:17;;;;;:24;;-1:-1:-1;;11364:24:0;11384:4;11364:24;;;11262:134;:::o;21030:194::-;21088:7;21098:25;21118:4;21098:19;:25::i;:::-;21148:19;;;;:15;:19;;;;;;;;;21139:5;;;21134:11;;:4;:11;;;;;;:33;21180:8;;21088:35;;-1:-1:-1;21187:1:0;;21139:5;;21148:19;21180:8;;21187:1;;21180:8;:::i;:::-;;;;-1:-1:-1;21199:17:0;;-1:-1:-1;21211:4:0;21199:11;:17::i;20444:578::-;20500:15;20512:2;20500:11;:15::i;:::-;20526:7;20536:4;-1:-1:-1;;;;;20536:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20526:23;;20562:11;20646:5;;20608:2;20636:3;20621:12;:18;;;;:::i;:::-;20611:29;20591:50;;;;;;;;23974:19:1;;;24018:2;24009:12;;24002:28;24055:2;24046:12;;23817:247;20591:50:0;;;;;;;;;;;;;20581:61;;;;;;20576:67;;:75;;;;:::i;:::-;20662:9;20685:16;;;:8;:16;;;;;;20562:89;;-1:-1:-1;20662:9:0;20685:16;;20682:148;;;-1:-1:-1;20724:12:0;;;;:4;:12;;;;;;20682:148;;;-1:-1:-1;20795:16:0;;;;:8;:16;;;;;:23;;-1:-1:-1;;20795:23:0;20814:4;20795:23;;;20774:6;20682:148;20847:1;20840:5;;:8;;;;;;;:::i;:::-;;;;-1:-1:-1;;20883:5:0;;20874:15;;;;:8;:15;;;;;;;;:33;;20902:5;;20874:33;;;20895:5;;20890:11;;;;:4;:11;;;;;;20874:33;20859:12;;;;:4;:12;;;;;;;;:48;;;;20927:5;;20918:15;;:8;:15;;;;;:22;;-1:-1:-1;;20918:22:0;20936:4;20918:22;;;20951:19;;;:15;:19;;;;;:26;;;20993:21;;20973:4;;-1:-1:-1;;;;;20993:21:0;;;;;20859:12;20993:21;20489:533;;;20444:578;:::o;3944:948::-;3997:7;;-1:-1:-1;;;4075:17:0;;4071:106;;-1:-1:-1;;;4113:17:0;;;-1:-1:-1;4159:2:0;4149:12;4071:106;4204:8;4195:5;:17;4191:106;;4242:8;4233:17;;;-1:-1:-1;4279:2:0;4269:12;4191:106;4324:8;4315:5;:17;4311:106;;4362:8;4353:17;;;-1:-1:-1;4399:2:0;4389:12;4311:106;4444:7;4435:5;:16;4431:103;;4481:7;4472:16;;;-1:-1:-1;4517:1:0;4507:11;4431:103;4561:7;4552:5;:16;4548:103;;4598:7;4589:16;;;-1:-1:-1;4634:1:0;4624:11;4548:103;4678:7;4669:5;:16;4665:103;;4715:7;4706:16;;;-1:-1:-1;4751:1:0;4741:11;4665:103;4795:7;4786:5;:16;4782:68;;4833:1;4823:11;4878:6;3944:948;-1:-1:-1;;3944:948:0:o;9907:208::-;-1:-1:-1;;;;;10002:13:0;;9974:7;10002:13;;;:6;:13;;;;;:20;9994:56;;;;-1:-1:-1;;;9994:56:0;;24271:2:1;9994:56:0;;;24253:21:1;24310:2;24290:18;;;24283:30;-1:-1:-1;;;24329:18:1;;;24322:49;24388:18;;9994:56:0;;;;;;;;-1:-1:-1;;;;;10068:13:0;;;;;;:6;:13;;;;;10082:20;;:24;;10105:1;;10082:24;:::i;:::-;10068:39;;;;;;;;:::i;:::-;;;;;;;;;10061:46;;9907:208;;;:::o;18134:373::-;-1:-1:-1;;;;;18195:18:0;;18191:73;;18237:15;;-1:-1:-1;;;18237:15:0;;;;;;;;;;;18191:73;-1:-1:-1;;;;;18289:12:0;;18276:10;18289:12;;;:6;:12;;;;;18302:19;;:23;;18324:1;;18302:23;:::i;:::-;18289:37;;;;;;;;:::i;:::-;;;;;;;;;18276:50;;18337:6;:12;18344:4;-1:-1:-1;;;;;18337:12:0;-1:-1:-1;;;;;18337:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;18337:18:0;;;;;;;;;;;;18373:15;;;:11;:15;;;;;;18366:22;;;18406:8;:12;;;;;18399:19;;-1:-1:-1;;;;;;18399:19:0;;;;;;18436:11;:15;;;;;;18429:22;;;;;;;;18469:30;18385:2;;18337:18;-1:-1:-1;;;;;18469:30:0;;;;;18337:18;;18469:30;18180:327;18134:373;:::o;17652:474::-;-1:-1:-1;;;;;17711:16:0;;17707:74;;17751:18;;-1:-1:-1;;;17751:18:0;;;;;;;;;;;17707:74;17818:6;:8;;;;;;;;:6;17886:12;;;:8;:12;;;;;;-1:-1:-1;;;;;17886:12:0;:26;17882:81;;17936:15;;-1:-1:-1;;;17936:15:0;;;;;;;;;;;17882:81;17975:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;17975:17:0;-1:-1:-1;;;;;17975:17:0;;;;;;;;18003:10;;;:6;:10;;;;;:19;;-1:-1:-1;18003:19:0;;;;;;;;;;;;;;;18051:10;;:17;;:21;;-1:-1:-1;18051:21:0;:::i;:::-;18033:15;;;;:11;:15;;;;;;:39;;;;18090:28;;18045:2;;-1:-1:-1;;;;;18090:28:0;;;;;18033:15;;18090:28;17696:430;17652:474;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:1;247:40;;317:18;302:34;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:1:o;426:187::-;475:4;508:18;500:6;497:30;494:56;;;530:18;;:::i;:::-;-1:-1:-1;596:2:1;575:15;-1:-1:-1;;571:29:1;602:4;567:40;;426:187::o;618:464::-;661:5;714:3;707:4;699:6;695:17;691:27;681:55;;732:1;729;722:12;681:55;768:6;755:20;799:49;815:32;844:2;815:32;:::i;:::-;799:49;:::i;:::-;873:2;864:7;857:19;919:3;912:4;907:2;899:6;895:15;891:26;888:35;885:55;;;936:1;933;926:12;885:55;1001:2;994:4;986:6;982:17;975:4;966:7;962:18;949:55;1049:1;1024:16;;;1042:4;1020:27;1013:38;;;;1028:7;618:464;-1:-1:-1;;;618:464:1:o;1087:1097::-;1181:6;1212:2;1255;1243:9;1234:7;1230:23;1226:32;1223:52;;;1271:1;1268;1261:12;1223:52;1311:9;1298:23;1340:18;1381:2;1373:6;1370:14;1367:34;;;1397:1;1394;1387:12;1367:34;1435:6;1424:9;1420:22;1410:32;;1480:7;1473:4;1469:2;1465:13;1461:27;1451:55;;1502:1;1499;1492:12;1451:55;1538:2;1525:16;1560:2;1556;1553:10;1550:36;;;1566:18;;:::i;:::-;1612:2;1609:1;1605:10;1635:28;1659:2;1655;1651:11;1635:28;:::i;:::-;1697:15;;;1767:11;;;1763:20;;;1728:12;;;;1795:19;;;1792:39;;;1827:1;1824;1817:12;1792:39;1859:2;1855;1851:11;1840:22;;1871:283;1887:6;1882:3;1879:15;1871:283;;;1973:3;1960:17;2009:2;1996:11;1993:19;1990:39;;;2025:1;2022;2015:12;1990:39;2054:57;2103:7;2098:2;2084:11;2080:2;2076:20;2072:29;2054:57;:::i;:::-;2042:70;;-1:-1:-1;1904:12:1;;;;2132;;;;1871:283;;;2173:5;1087:1097;-1:-1:-1;;;;;;;;;1087:1097:1:o;2189:250::-;2274:1;2284:113;2298:6;2295:1;2292:13;2284:113;;;2374:11;;;2368:18;2355:11;;;2348:39;2320:2;2313:10;2284:113;;;-1:-1:-1;;2431:1:1;2413:16;;2406:27;2189:250::o;2444:396::-;2593:2;2582:9;2575:21;2556:4;2625:6;2619:13;2668:6;2663:2;2652:9;2648:18;2641:34;2684:79;2756:6;2751:2;2740:9;2736:18;2731:2;2723:6;2719:15;2684:79;:::i;:::-;2824:2;2803:15;-1:-1:-1;;2799:29:1;2784:45;;;;2831:2;2780:54;;2444:396;-1:-1:-1;;2444:396:1:o;2845:180::-;2904:6;2957:2;2945:9;2936:7;2932:23;2928:32;2925:52;;;2973:1;2970;2963:12;2925:52;-1:-1:-1;2996:23:1;;2845:180;-1:-1:-1;2845:180:1:o;3238:173::-;3306:20;;-1:-1:-1;;;;;3355:31:1;;3345:42;;3335:70;;3401:1;3398;3391:12;3416:254;3484:6;3492;3545:2;3533:9;3524:7;3520:23;3516:32;3513:52;;;3561:1;3558;3551:12;3513:52;3584:29;3603:9;3584:29;:::i;:::-;3574:39;3660:2;3645:18;;;;3632:32;;-1:-1:-1;;;3416:254:1:o;4049:328::-;4126:6;4134;4142;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;4234:29;4253:9;4234:29;:::i;:::-;4224:39;;4282:38;4316:2;4305:9;4301:18;4282:38;:::i;:::-;4272:48;;4367:2;4356:9;4352:18;4339:32;4329:42;;4049:328;;;;;:::o;4571:118::-;4657:5;4650:13;4643:21;4636:5;4633:32;4623:60;;4679:1;4676;4669:12;4694:315;4759:6;4767;4820:2;4808:9;4799:7;4795:23;4791:32;4788:52;;;4836:1;4833;4826:12;4788:52;4859:29;4878:9;4859:29;:::i;:::-;4849:39;;4938:2;4927:9;4923:18;4910:32;4951:28;4973:5;4951:28;:::i;:::-;4998:5;4988:15;;;4694:315;;;;;:::o;5014:186::-;5073:6;5126:2;5114:9;5105:7;5101:23;5097:32;5094:52;;;5142:1;5139;5132:12;5094:52;5165:29;5184:9;5165:29;:::i;5205:743::-;5312:6;5320;5328;5381:2;5369:9;5360:7;5356:23;5352:32;5349:52;;;5397:1;5394;5387:12;5349:52;5437:9;5424:23;5466:18;5507:2;5499:6;5496:14;5493:34;;;5523:1;5520;5513:12;5493:34;5546:50;5588:7;5579:6;5568:9;5564:22;5546:50;:::i;:::-;5536:60;;5649:2;5638:9;5634:18;5621:32;5605:48;;5678:2;5668:8;5665:16;5662:36;;;5694:1;5691;5684:12;5662:36;5717:52;5761:7;5750:8;5739:9;5735:24;5717:52;:::i;:::-;5707:62;;5822:2;5811:9;5807:18;5794:32;5778:48;;5851:2;5841:8;5838:16;5835:36;;;5867:1;5864;5857:12;5835:36;;5890:52;5934:7;5923:8;5912:9;5908:24;5890:52;:::i;:::-;5880:62;;;5205:743;;;;;:::o;5953:632::-;6124:2;6176:21;;;6246:13;;6149:18;;;6268:22;;;6095:4;;6124:2;6347:15;;;;6321:2;6306:18;;;6095:4;6390:169;6404:6;6401:1;6398:13;6390:169;;;6465:13;;6453:26;;6534:15;;;;6499:12;;;;6426:1;6419:9;6390:169;;;-1:-1:-1;6576:3:1;;5953:632;-1:-1:-1;;;;;;5953:632:1:o;6590:808::-;6687:6;6695;6703;6711;6719;6772:3;6760:9;6751:7;6747:23;6743:33;6740:53;;;6789:1;6786;6779:12;6740:53;6812:29;6831:9;6812:29;:::i;:::-;6802:39;;6860:38;6894:2;6883:9;6879:18;6860:38;:::i;:::-;6850:48;;6945:2;6934:9;6930:18;6917:32;6907:42;;7000:2;6989:9;6985:18;6972:32;7023:18;7064:2;7056:6;7053:14;7050:34;;;7080:1;7077;7070:12;7050:34;7118:6;7107:9;7103:22;7093:32;;7163:7;7156:4;7152:2;7148:13;7144:27;7134:55;;7185:1;7182;7175:12;7134:55;7225:2;7212:16;7251:2;7243:6;7240:14;7237:34;;;7267:1;7264;7257:12;7237:34;7312:7;7307:2;7298:6;7294:2;7290:15;7286:24;7283:37;7280:57;;;7333:1;7330;7323:12;7280:57;6590:808;;;;-1:-1:-1;6590:808:1;;-1:-1:-1;7364:2:1;7356:11;;7386:6;6590:808;-1:-1:-1;;;6590:808:1:o;7403:248::-;7471:6;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:52;;;7548:1;7545;7538:12;7500:52;-1:-1:-1;;7571:23:1;;;7641:2;7626:18;;;7613:32;;-1:-1:-1;7403:248:1:o;7656:260::-;7724:6;7732;7785:2;7773:9;7764:7;7760:23;7756:32;7753:52;;;7801:1;7798;7791:12;7753:52;7824:29;7843:9;7824:29;:::i;:::-;7814:39;;7872:38;7906:2;7895:9;7891:18;7872:38;:::i;:::-;7862:48;;7656:260;;;;;:::o;7921:322::-;7998:6;8006;8014;8067:2;8055:9;8046:7;8042:23;8038:32;8035:52;;;8083:1;8080;8073:12;8035:52;8106:29;8125:9;8106:29;:::i;:::-;8096:39;8182:2;8167:18;;8154:32;;-1:-1:-1;8233:2:1;8218:18;;;8205:32;;7921:322;-1:-1:-1;;;7921:322:1:o;8248:::-;8317:6;8370:2;8358:9;8349:7;8345:23;8341:32;8338:52;;;8386:1;8383;8376:12;8338:52;8426:9;8413:23;8459:18;8451:6;8448:30;8445:50;;;8491:1;8488;8481:12;8445:50;8514;8556:7;8547:6;8536:9;8532:22;8514:50;:::i;:::-;8504:60;8248:322;-1:-1:-1;;;;8248:322:1:o;8575:390::-;8653:6;8661;8714:2;8702:9;8693:7;8689:23;8685:32;8682:52;;;8730:1;8727;8720:12;8682:52;8766:9;8753:23;8743:33;;8827:2;8816:9;8812:18;8799:32;8854:18;8846:6;8843:30;8840:50;;;8886:1;8883;8876:12;8840:50;8909;8951:7;8942:6;8931:9;8927:22;8909:50;:::i;:::-;8899:60;;;8575:390;;;;;:::o;8970:241::-;9026:6;9079:2;9067:9;9058:7;9054:23;9050:32;9047:52;;;9095:1;9092;9085:12;9047:52;9134:9;9121:23;9153:28;9175:5;9153:28;:::i;9216:127::-;9277:10;9272:3;9268:20;9265:1;9258:31;9308:4;9305:1;9298:15;9332:4;9329:1;9322:15;9348:496;9527:3;9565:6;9559:13;9581:66;9640:6;9635:3;9628:4;9620:6;9616:17;9581:66;:::i;:::-;9710:13;;9669:16;;;;9732:70;9710:13;9669:16;9779:4;9767:17;;9732:70;:::i;:::-;9818:20;;9348:496;-1:-1:-1;;;;9348:496:1:o;9849:380::-;9928:1;9924:12;;;;9971;;;9992:61;;10046:4;10038:6;10034:17;10024:27;;9992:61;10099:2;10091:6;10088:14;10068:18;10065:38;10062:161;;10145:10;10140:3;10136:20;10133:1;10126:31;10180:4;10177:1;10170:15;10208:4;10205:1;10198:15;10062:161;;9849:380;;;:::o;10234:127::-;10295:10;10290:3;10286:20;10283:1;10276:31;10326:4;10323:1;10316:15;10350:4;10347:1;10340:15;10366:128;10433:9;;;10454:11;;;10451:37;;;10468:18;;:::i;10499:127::-;10560:10;10555:3;10551:20;10548:1;10541:31;10591:4;10588:1;10581:15;10615:4;10612:1;10605:15;11191:290;11260:6;11313:2;11301:9;11292:7;11288:23;11284:32;11281:52;;;11329:1;11326;11319:12;11281:52;11355:16;;-1:-1:-1;;;;;;11400:32:1;;11390:43;;11380:71;;11447:1;11444;11437:12;11486:125;11551:9;;;11572:10;;;11569:36;;;11585:18;;:::i;11616:168::-;11689:9;;;11720;;11737:15;;;11731:22;;11717:37;11707:71;;11758:18;;:::i;12068:245::-;12135:6;12188:2;12176:9;12167:7;12163:23;12159:32;12156:52;;;12204:1;12201;12194:12;12156:52;12236:9;12230:16;12255:28;12277:5;12255:28;:::i;12318:445::-;-1:-1:-1;;;12557:41:1;;12621:13;;12539:3;;12643:74;12621:13;12706:1;12697:11;;12690:4;12678:17;;12643:74;:::i;:::-;12737:16;;;;12755:1;12733:24;;12318:445;-1:-1:-1;;12318:445:1:o;12894:723::-;12944:3;12985:5;12979:12;13014:36;13040:9;13014:36;:::i;:::-;13069:1;13086:17;;;13112:133;;;;13259:1;13254:357;;;;13079:532;;13112:133;-1:-1:-1;;13145:24:1;;13133:37;;13218:14;;13211:22;13199:35;;13190:45;;;-1:-1:-1;13112:133:1;;13254:357;13285:5;13282:1;13275:16;13314:4;13359;13356:1;13346:18;13386:1;13400:165;13414:6;13411:1;13408:13;13400:165;;;13492:14;;13479:11;;;13472:35;13535:16;;;;13429:10;;13400:165;;;13404:3;;;13594:6;13589:3;13585:16;13578:23;;13079:532;;;;;12894:723;;;;:::o;13622:450::-;13851:3;13879:38;13913:3;13905:6;13879:38;:::i;:::-;13937:66;13926:78;;-1:-1:-1;;;14028:2:1;14020:11;;14013:26;14063:2;14055:11;;13622:450;-1:-1:-1;;;13622:450:1:o;14077:486::-;14299:3;14337:6;14331:13;14353:66;14412:6;14407:3;14400:4;14392:6;14388:17;14353:66;:::i;:::-;-1:-1:-1;;;14441:16:1;;14466:61;;;-1:-1:-1;14554:2:1;14543:14;;14077:486;-1:-1:-1;14077:486:1:o;14568:127::-;14629:10;14624:3;14620:20;14617:1;14610:31;14660:4;14657:1;14650:15;14684:4;14681:1;14674:15;14700:120;14740:1;14766;14756:35;;14771:18;;:::i;:::-;-1:-1:-1;14805:9:1;;14700:120::o;14825:112::-;14857:1;14883;14873:35;;14888:18;;:::i;:::-;-1:-1:-1;14922:9:1;;14825:112::o;14942:518::-;15044:2;15039:3;15036:11;15033:421;;;15080:5;15077:1;15070:16;15124:4;15121:1;15111:18;15194:2;15182:10;15178:19;15175:1;15171:27;15165:4;15161:38;15230:4;15218:10;15215:20;15212:47;;;-1:-1:-1;15253:4:1;15212:47;15308:2;15303:3;15299:12;15296:1;15292:20;15286:4;15282:31;15272:41;;15363:81;15381:2;15374:5;15371:13;15363:81;;;15440:1;15426:16;;15407:1;15396:13;15363:81;;15636:1345;15762:3;15756:10;15789:18;15781:6;15778:30;15775:56;;;15811:18;;:::i;:::-;15840:97;15930:6;15890:38;15922:4;15916:11;15890:38;:::i;:::-;15884:4;15840:97;:::i;:::-;15992:4;;16049:2;16038:14;;16066:1;16061:663;;;;16768:1;16785:6;16782:89;;;-1:-1:-1;16837:19:1;;;16831:26;16782:89;-1:-1:-1;;15593:1:1;15589:11;;;15585:24;15581:29;15571:40;15617:1;15613:11;;;15568:57;16884:81;;16031:944;;16061:663;12841:1;12834:14;;;12878:4;12865:18;;-1:-1:-1;;16097:20:1;;;16215:236;16229:7;16226:1;16223:14;16215:236;;;16318:19;;;16312:26;16297:42;;16410:27;;;;16378:1;16366:14;;;;16245:19;;16215:236;;;16219:3;16479:6;16470:7;16467:19;16464:201;;;16540:19;;;16534:26;-1:-1:-1;;16623:1:1;16619:14;;;16635:3;16615:24;16611:37;16607:42;16592:58;16577:74;;16464:201;-1:-1:-1;;;;;16711:1:1;16695:14;;;16691:22;16678:36;;-1:-1:-1;15636:1345:1:o;16986:662::-;-1:-1:-1;;;;;17265:15:1;;;17247:34;;17317:15;;17312:2;17297:18;;17290:43;17364:2;17349:18;;17342:34;;;17412:3;17407:2;17392:18;;17385:31;;;17432:19;;17425:35;;;17190:4;17453:6;17503;17227:3;17482:19;;17469:49;17568:1;17562:3;17553:6;17542:9;17538:22;17534:32;17527:43;17638:3;17631:2;17627:7;17622:2;17614:6;17610:15;17606:29;17595:9;17591:45;17587:55;17579:63;;16986:662;;;;;;;;:::o;17653:389::-;17829:3;17857:38;17891:3;17883:6;17857:38;:::i;:::-;17924:6;17918:13;17940:65;17998:6;17994:2;17987:4;17979:6;17975:17;17940:65;:::i;18047:649::-;18127:6;18180:2;18168:9;18159:7;18155:23;18151:32;18148:52;;;18196:1;18193;18186:12;18148:52;18229:9;18223:16;18262:18;18254:6;18251:30;18248:50;;;18294:1;18291;18284:12;18248:50;18317:22;;18370:4;18362:13;;18358:27;-1:-1:-1;18348:55:1;;18399:1;18396;18389:12;18348:55;18428:2;18422:9;18453:49;18469:32;18498:2;18469:32;:::i;18453:49::-;18525:2;18518:5;18511:17;18565:7;18560:2;18555;18551;18547:11;18543:20;18540:33;18537:53;;;18586:1;18583;18576:12;18537:53;18599:67;18663:2;18658;18651:5;18647:14;18642:2;18638;18634:11;18599:67;:::i;18701:449::-;18953:29;18948:3;18941:42;18923:3;19012:6;19006:13;19028:75;19096:6;19091:2;19086:3;19082:12;19075:4;19067:6;19063:17;19028:75;:::i;:::-;19123:16;;;;19141:2;19119:25;;18701:449;-1:-1:-1;;18701:449:1:o;20502:135::-;20541:3;20562:17;;;20559:43;;20582:18;;:::i;:::-;-1:-1:-1;20629:1:1;20618:13;;20502:135::o;20979:441::-;21200:3;21238:6;21232:13;21254:66;21313:6;21308:3;21301:4;21293:6;21289:17;21254:66;:::i;:::-;-1:-1:-1;;;21342:16:1;;21367:18;;;-1:-1:-1;21412:1:1;21401:13;;20979:441;-1:-1:-1;20979:441:1:o;21425:::-;21646:3;21684:6;21678:13;21700:66;21759:6;21754:3;21747:4;21739:6;21735:17;21700:66;:::i;:::-;-1:-1:-1;;;21788:16:1;;21813:18;;;-1:-1:-1;21858:1:1;21847:13;;21425:441;-1:-1:-1;21425:441:1:o;22251:416::-;22340:1;22377:5;22340:1;22391:270;22412:7;22402:8;22399:21;22391:270;;;22471:4;22467:1;22463:6;22459:17;22453:4;22450:27;22447:53;;;22480:18;;:::i;:::-;22530:7;22520:8;22516:22;22513:55;;;22550:16;;;;22513:55;22629:22;;;;22589:15;;;;22391:270;;;22395:3;22251:416;;;;;:::o;22672:806::-;22721:5;22751:8;22741:80;;-1:-1:-1;22792:1:1;22806:5;;22741:80;22840:4;22830:76;;-1:-1:-1;22877:1:1;22891:5;;22830:76;22922:4;22940:1;22935:59;;;;23008:1;23003:130;;;;22915:218;;22935:59;22965:1;22956:10;;22979:5;;;23003:130;23040:3;23030:8;23027:17;23024:43;;;23047:18;;:::i;:::-;-1:-1:-1;;23103:1:1;23089:16;;23118:5;;22915:218;;23217:2;23207:8;23204:16;23198:3;23192:4;23189:13;23185:36;23179:2;23169:8;23166:16;23161:2;23155:4;23152:12;23148:35;23145:77;23142:159;;;-1:-1:-1;23254:19:1;;;23286:5;;23142:159;23333:34;23358:8;23352:4;23333:34;:::i;:::-;23403:6;23399:1;23395:6;23391:19;23382:7;23379:32;23376:58;;;23414:18;;:::i;:::-;23452:20;;22672:806;-1:-1:-1;;;22672:806:1:o;23483:140::-;23541:5;23570:47;23611:4;23601:8;23597:19;23591:4;23570:47;:::i;23628:184::-;23698:6;23751:2;23739:9;23730:7;23726:23;23722:32;23719:52;;;23767:1;23764;23757:12;23719:52;-1:-1:-1;23790:16:1;;23628:184;-1:-1:-1;23628:184:1:o

Swarm Source

ipfs://ab634747af8f7e425d5acc3b2caf3a956d7644c461f3f2cfdcccf1d300763fce
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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