ETH Price: $1,466.44 (-5.04%)
 

Overview

ETH Balance

0.0013 ETH

Eth Value

$1.91 (@ $1,466.44/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Distribute Pack110007922020-10-06 7:12:371645 days ago1601968357IN
0x6c0b9d09...C40120320
0 ETH0.0056507537
Distribute Pack110007922020-10-06 7:12:371645 days ago1601968357IN
0x6c0b9d09...C40120320
0 ETH0.006460937
Distribute Pack110007632020-10-06 7:06:131645 days ago1601967973IN
0x6c0b9d09...C40120320
0 ETH0.0064604537
Distribute Pack110007322020-10-06 7:00:111645 days ago1601967611IN
0x6c0b9d09...C40120320
0 ETH0.006460937
Distribute Pack110006102020-10-06 6:33:491645 days ago1601966029IN
0x6c0b9d09...C40120320
0 ETH0.0076832344
Distribute Pack110005972020-10-06 6:32:291645 days ago1601965949IN
0x6c0b9d09...C40120320
0 ETH0.0078578545
Distribute Pack110005882020-10-06 6:29:391645 days ago1601965779IN
0x6c0b9d09...C40120320
0 ETH0.0082070947
Distribute Pack110005812020-10-06 6:28:261645 days ago1601965706IN
0x6c0b9d09...C40120320
0 ETH0.0083817148
Distribute Pack110005622020-10-06 6:25:211645 days ago1601965521IN
0x6c0b9d09...C40120320
0 ETH0.0087309550
Distribute Pack110005572020-10-06 6:24:381645 days ago1601965478IN
0x6c0b9d09...C40120320
0 ETH0.0087309550
Distribute Pack110005332020-10-06 6:20:571645 days ago1601965257IN
0x6c0b9d09...C40120320
0 ETH0.0089055651
Distribute Pack110005132020-10-06 6:16:451645 days ago1601965005IN
0x6c0b9d09...C40120320
0 ETH0.0089055651
Distribute Pack110004822020-10-06 6:10:341645 days ago1601964634IN
0x6c0b9d09...C40120320
0 ETH0.0089055651
Distribute Pack110004772020-10-06 6:09:031645 days ago1601964543IN
0x6c0b9d09...C40120320
0 ETH0.0089055651
Distribute Pack110004702020-10-06 6:07:051645 days ago1601964425IN
0x6c0b9d09...C40120320
0 ETH0.0076367550
Distribute Pack110004702020-10-06 6:07:051645 days ago1601964425IN
0x6c0b9d09...C40120320
0 ETH0.0071785447
Distribute Pack110004702020-10-06 6:07:051645 days ago1601964425IN
0x6c0b9d09...C40120320
0 ETH0.0071785447
Distribute Pack110004702020-10-06 6:07:051645 days ago1601964425IN
0x6c0b9d09...C40120320
0 ETH0.0071785447
Distribute Pack110004702020-10-06 6:07:051645 days ago1601964425IN
0x6c0b9d09...C40120320
0 ETH0.0078578545
Distribute Pack110003042020-10-06 5:26:111645 days ago1601961971IN
0x6c0b9d09...C40120320
0 ETH0.0076657743.9
Distribute Pack110002572020-10-06 5:16:221645 days ago1601961382IN
0x6c0b9d09...C40120320
0 ETH0.0066350638
Distribute Pack110002082020-10-06 5:04:241645 days ago1601960664IN
0x6c0b9d09...C40120320
0 ETH0.0066355238
Distribute Pack110001832020-10-06 4:59:111645 days ago1601960351IN
0x6c0b9d09...C40120320
0 ETH0.0066355238
Distribute Pack110001212020-10-06 4:46:411645 days ago1601959601IN
0x6c0b9d09...C40120320
0 ETH0.0066355238
Distribute Pack110000962020-10-06 4:41:521645 days ago1601959312IN
0x6c0b9d09...C40120320
0 ETH0.0056511937
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-110007922020-10-06 7:12:371645 days ago1601968357
0x6c0b9d09...C40120320
0.0044 ETH
-110007922020-10-06 7:12:371645 days ago1601968357
0x6c0b9d09...C40120320
0.0044 ETH
-110007632020-10-06 7:06:131645 days ago1601967973
0x6c0b9d09...C40120320
0.0044 ETH
-110007322020-10-06 7:00:111645 days ago1601967611
0x6c0b9d09...C40120320
0.0044 ETH
-110006102020-10-06 6:33:491645 days ago1601966029
0x6c0b9d09...C40120320
0.0044 ETH
-110005972020-10-06 6:32:291645 days ago1601965949
0x6c0b9d09...C40120320
0.0044 ETH
-110005882020-10-06 6:29:391645 days ago1601965779
0x6c0b9d09...C40120320
0.0044 ETH
-110005812020-10-06 6:28:261645 days ago1601965706
0x6c0b9d09...C40120320
0.0044 ETH
-110005622020-10-06 6:25:211645 days ago1601965521
0x6c0b9d09...C40120320
0.0044 ETH
-110005572020-10-06 6:24:381645 days ago1601965478
0x6c0b9d09...C40120320
0.0044 ETH
-110005332020-10-06 6:20:571645 days ago1601965257
0x6c0b9d09...C40120320
0.0044 ETH
-110005132020-10-06 6:16:451645 days ago1601965005
0x6c0b9d09...C40120320
0.0044 ETH
-110004822020-10-06 6:10:341645 days ago1601964634
0x6c0b9d09...C40120320
0.0044 ETH
-110004772020-10-06 6:09:031645 days ago1601964543
0x6c0b9d09...C40120320
0.0044 ETH
-110004702020-10-06 6:07:051645 days ago1601964425
0x6c0b9d09...C40120320
0.0044 ETH
-110004702020-10-06 6:07:051645 days ago1601964425
0x6c0b9d09...C40120320
0.0044 ETH
-110004702020-10-06 6:07:051645 days ago1601964425
0x6c0b9d09...C40120320
0.0044 ETH
-110004702020-10-06 6:07:051645 days ago1601964425
0x6c0b9d09...C40120320
0.0044 ETH
-110004702020-10-06 6:07:051645 days ago1601964425
0x6c0b9d09...C40120320
0.0044 ETH
-110003042020-10-06 5:26:111645 days ago1601961971
0x6c0b9d09...C40120320
0.0044 ETH
-110002572020-10-06 5:16:221645 days ago1601961382
0x6c0b9d09...C40120320
0.0044 ETH
-110002082020-10-06 5:04:241645 days ago1601960664
0x6c0b9d09...C40120320
0.0044 ETH
-110001832020-10-06 4:59:111645 days ago1601960351
0x6c0b9d09...C40120320
0.0044 ETH
-110001212020-10-06 4:46:411645 days ago1601959601
0x6c0b9d09...C40120320
0.0044 ETH
-110000962020-10-06 4:41:521645 days ago1601959312
0x6c0b9d09...C40120320
0.0044 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SimplifiedDistributor

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-17
*/

pragma solidity >=0.6.0 <0.7.0;

// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/issues/20

interface ERC20Token {

    /**
     * @notice send `_value` token to `_to` from `msg.sender`
     * @param _to The address of the recipient
     * @param _value The amount of token to be transferred
     * @return success Whether the transfer was successful or not
     */
    function transfer(address _to, uint256 _value) external returns (bool success);

    /**
     * @notice `msg.sender` approves `_spender` to spend `_value` tokens
     * @param _spender The address of the account able to transfer the tokens
     * @param _value The amount of tokens to be approved for transfer
     * @return success Whether the approval was successful or not
     */
    function approve(address _spender, uint256 _value) external returns (bool success);

    /**
     * @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
     * @param _from The address of the sender
     * @param _to The address of the recipient
     * @param _value The amount of token to be transferred
     * @return success Whether the transfer was successful or not
     */
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);

    /**
     * @param _owner The address from which the balance will be retrieved
     * @return balance The balance
     */
    function balanceOf(address _owner) external view returns (uint256 balance);

    /**
     * @param _owner The address of the account owning tokens
     * @param _spender The address of the account able to transfer the tokens
     * @return remaining Amount of remaining tokens allowed to spent
     */
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);

    /**
     * @notice return total supply of tokens
     */
    function totalSupply() external view returns (uint256 supply);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract ReentrancyGuard {

    bool internal reentranceLock = false;

    /**
     * @dev Use this modifier on functions susceptible to reentrancy attacks
     */
    modifier reentrancyGuard() {
        require(!reentranceLock, "Reentrant call detected!");
        reentranceLock = true; // No no no, you naughty naughty!
        _;
        reentranceLock = false;
    }
}
pragma experimental ABIEncoderV2;





/**
 * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
 * @notice interface for StickerMarket
 */
interface StickerMarket {

    event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount);
    event MarketState(State state);
    event RegisterFee(uint256 value);
    event BurnRate(uint256 value);

    enum State { Invalid, Open, BuyOnly, Controlled, Closed }

    function state() external view returns(State);
    function snt() external view returns (address);
    function stickerPack() external view returns (address);
    function stickerType() external view returns (address);

    /**
     * @dev Mints NFT StickerPack in `_destination` account, and Transfers SNT using user allowance
     * emit NonfungibleToken.Transfer(`address(0)`, `_destination`, `tokenId`)
     * @notice buy a pack from market pack owner, including a StickerPack's token in `_destination` account with same metadata of `_packId`
     * @param _packId id of market pack
     * @param _destination owner of token being brought
     * @param _price agreed price
     * @return tokenId generated StickerPack token
     */
    function buyToken(
        uint256 _packId,
        address _destination,
        uint256 _price
    )
        external
        returns (uint256 tokenId);

    /**
     * @dev emits StickerMarket.Register(`packId`, `_urlHash`, `_price`, `_contenthash`)
     * @notice Registers to sell a sticker pack
     * @param _price cost in wei to users minting this pack
     * @param _donate value between 0-10000 representing percentage of `_price` that is donated to StickerMarket at every buy
     * @param _category listing category
     * @param _owner address of the beneficiary of buys
     * @param _contenthash EIP1577 pack contenthash for listings
     * @param _fee Fee msg.sender agrees to pay for this registration
     * @return packId Market position of Sticker Pack data.
     */
    function registerPack(
        uint256 _price,
        uint256 _donate,
        bytes4[] calldata _category,
        address _owner,
        bytes calldata _contenthash,
        uint256 _fee
    )
        external
        returns(uint256 packId);

}



/**
 * @dev ERC-721 non-fungible token standard. 
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721
{

  /**
   * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are
   * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any
   * number of NFTs may be created and assigned without emitting Transfer. At the time of any
   * transfer, the approved address for that NFT (if any) is reset to none.
   */
  event Transfer(
    address indexed from,
    address indexed to,
    uint256 indexed value
  );

  /**
   * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero
   * address indicates there is no approved address. When a Transfer event emits, this also
   * indicates that the approved address for that NFT (if any) is reset to none.
   */
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );

  /**
   * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage
   * all NFTs of the owner.
   */
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  /**
   * @dev Transfers the ownership of an NFT from one address to another address.
   * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the
   * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is
   * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this
   * function checks if `_to` is a smart contract (code size > 0). If so, it calls
   * `onERC721Received` on `_to` and throws if the return value is not 
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata _data
  )
    external;

  /**
   * @dev Transfers the ownership of an NFT from one address to another address.
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to ""
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
   * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero
   * address. Throws if `_tokenId` is not a valid NFT.
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they mayb be permanently lost.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Set or reaffirm the approved address for an NFT.
   * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is
   * the current NFT owner, or an authorized operator of the current owner.
   * @param _approved The new approved NFT controller.
   * @param _tokenId The NFT to approve.
   */
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external;

  /**
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @notice The contract MUST allow multiple operators per owner.
   * @param _operator Address to add to the set of authorized operators.
   * @param _approved True if the operators is approved, false to revoke approval.
   */
  function setApprovalForAll(
    address _operator,
    bool _approved
  )
    external;

  /**
   * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are
   * considered invalid, and this function throws for queries about the zero address.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256);

  /**
   * @dev Returns the address of the owner of the NFT. NFTs assigned to zero address are considered
   * invalid, and queries about them do throw.
   * @param _tokenId The identifier for an NFT.
   * @return Address of _tokenId owner.
   */
  function ownerOf(
    uint256 _tokenId
  )
    external
    view
    returns (address);
    
  /**
   * @dev Get the approved address for a single NFT.
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @param _tokenId The NFT to find the approved address for.
   * @return Address that _tokenId is approved for. 
   */
  function getApproved(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  /**
   * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise.
   * @param _owner The address that owns the NFTs.
   * @param _operator The address that acts on behalf of the owner.
   * @return True if approved for all, false otherwise.
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    external
    view
    returns (bool);

}



/**
 * @dev Optional enumeration extension for ERC-721 non-fungible token standard.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721Enumerable
{

  /**
   * @dev Returns a count of valid NFTs tracked by this contract, where each one of them has an
   * assigned and queryable owner not equal to the zero address.
   * @return Total supply of NFTs.
   */
  function totalSupply()
    external
    view
    returns (uint256);

  /**
   * @dev Returns the token identifier for the `_index`th NFT. Sort order is not specified.
   * @param _index A counter less than `totalSupply()`.
   * @return Token id.
   */
  function tokenByIndex(
    uint256 _index
  )
    external
    view
    returns (uint256);

  /**
   * @dev Returns the token identifier for the `_index`th NFT assigned to `_owner`. Sort order is
   * not specified. It throws if `_index` >= `balanceOf(_owner)` or if `_owner` is the zero address,
   * representing invalid NFTs.
   * @param _owner An address where we are interested in NFTs owned by them.
   * @param _index A counter less than `balanceOf(_owner)`.
   * @return Token id.
   */
  function tokenOfOwnerByIndex(
    address _owner,
    uint256 _index
  )
    external
    view
    returns (uint256);

}


/**
 * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
 * @notice interface for StickerType
 */
/* interface */ abstract contract StickerType is ERC721, ERC721Enumerable { // Interfaces can't inherit

    /**
     * @notice controller can generate packs at will
     * @param _price cost in wei to users minting with _urlHash metadata
     * @param _donate optional amount of `_price` that is donated to StickerMarket at every buy
     * @param _category listing category
     * @param _owner address of the beneficiary of buys
     * @param _contenthash EIP1577 pack contenthash for listings
     * @return packId Market position of Sticker Pack data.
     */
    function generatePack(
        uint256 _price,
        uint256 _donate,
        bytes4[] calldata _category,
        address _owner,
        bytes calldata _contenthash
    )
        external
        virtual
        returns(uint256 packId);

    /**
     * @notice removes all market data about a marketed pack, can only be called by market controller
     * @param _packId position to be deleted
     * @param _limit limit of categories to cleanup
     */
    function purgePack(uint256 _packId, uint256 _limit)
        external
        virtual;

    /**
     * @notice changes contenthash of `_packId`, can only be called by controller
     * @param _packId which market position is being altered
     * @param _contenthash new contenthash
     */
    function setPackContenthash(uint256 _packId, bytes calldata _contenthash)
        external
        virtual;

    /**
     * @notice This method can be used by the controller to extract mistakenly
     *  sent tokens to this contract.
     * @param _token The address of the token contract that you want to recover
     *  set to 0 in case you want to extract ether.
     */
    function claimTokens(address _token)
        external
        virtual;

    /**
     * @notice changes price of `_packId`, can only be called when market is open
     * @param _packId pack id changing price settings
     * @param _price cost in wei to users minting this pack
     * @param _donate value between 0-10000 representing percentage of `_price` that is donated to StickerMarket at every buy
     */
    function setPackPrice(uint256 _packId, uint256 _price, uint256 _donate)
        external
        virtual;

    /**
     * @notice add caregory in `_packId`, can only be called when market is open
     * @param _packId pack adding category
     * @param _category category to list
     */
    function addPackCategory(uint256 _packId, bytes4 _category)
        external
        virtual;

    /**
     * @notice remove caregory in `_packId`, can only be called when market is open
     * @param _packId pack removing category
     * @param _category category to unlist
     */
    function removePackCategory(uint256 _packId, bytes4 _category)
        external
        virtual;

    /**
     * @notice Changes if pack is enabled for sell
     * @param _packId position edit
     * @param _mintable true to enable sell
     */
    function setPackState(uint256 _packId, bool _mintable)
        external
        virtual;

    /**
     * @notice read available market ids in a category (might be slow)
     * @param _category listing category
     * @return availableIds array of market id registered
     */
    function getAvailablePacks(bytes4 _category)
        external
        virtual
        view
        returns (uint256[] memory availableIds);

    /**
     * @notice count total packs in a category
     * @param _category listing category
     * @return size total number of packs in category
     */
    function getCategoryLength(bytes4 _category)
        external
        virtual
        view
        returns (uint256 size);

    /**
     * @notice read a packId in the category list at a specific index
     * @param _category listing category
     * @param _index index
     * @return packId on index
     */
    function getCategoryPack(bytes4 _category, uint256 _index)
        external
        virtual
        view
        returns (uint256 packId);

    /**
     * @notice returns all data from pack in market
     * @param _packId pack id being queried
     * @return category list of categories registered to this packType
     * @return owner authorship holder
     * @return mintable new pack can be generated (rare tool)
     * @return timestamp registration timestamp
     * @return price current price
     * @return contenthash EIP1577 encoded hash
     */
    function getPackData(uint256 _packId)
        external
        virtual
        view
        returns (
            bytes4[] memory category,
            address owner,
            bool mintable,
            uint256 timestamp,
            uint256 price,
            bytes memory contenthash
        );

    /**
     * @notice returns all data from pack in market
     * @param _packId pack id being queried
     * @return category list of categories registered to this packType
     * @return timestamp registration timestamp
     * @return contenthash EIP1577 encoded hash
     */
    function getPackSummary(uint256 _packId)
        external
        virtual
        view
        returns (
            bytes4[] memory category,
            uint256 timestamp,
            bytes memory contenthash
        );

    /**
     * @notice returns payment data for migrated contract
     * @param _packId pack id being queried
     * @return owner authorship holder
     * @return mintable new pack can be generated (rare tool)
     * @return price current price
     * @return donate informational value between 0-10000 representing percentage of `price` that is donated to StickerMarket at every buy
     */
    function getPaymentData(uint256 _packId)
        external
        virtual
        view
        returns (
            address owner,
            bool mintable,
            uint256 price,
            uint256 donate
        );
   
}




/**
 * @title SafeERC20
 * @dev Adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/SafeERC20.sol
 * and https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol
 */
contract SafeTransfer {
    
    function _safeTransfer(ERC20Token token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function _safeTransferFrom(ERC20Token token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    
    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(ERC20Token token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(_isContract(address(token)), "SafeTransfer: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeTransfer: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeTransfer: ERC20 operation did not succeed");
        }
    }

    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function _isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
}







/**
 * @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
 * @notice Owner's backdoor withdrawal logic, used for code reuse.
 */
contract TokenWithdrawer is SafeTransfer {
    /**
     * @dev Withdraw all balance of each `_tokens` into `_destination`.
     * @param _tokens address of ERC20 token, or zero for withdrawing ETH.
     * @param _destination receiver of token
     */
    function withdrawTokens(
        address[] memory _tokens,
        address payable _destination
    )
        internal
    {
        uint len = _tokens.length;
        for(uint i = 0; i < len; i++){
            withdrawToken(_tokens[i], _destination);
        }
    }

    /**
     * @dev Withdraw all balance of `_token` into `_destination`.
     * @param _token address of ERC20 token, or zero for withdrawing ETH.
     * @param _destination receiver of token
     */
    function withdrawToken(address _token, address payable _destination)
        internal
    {
        uint256 balance;
        if (_token == address(0)) {
            balance = address(this).balance;
            (bool success, ) = _destination.call.value(balance)("");
            require(success, "Transfer failed");
        } else {
            ERC20Token token = ERC20Token(_token);
            balance = token.balanceOf(address(this));
            _safeTransfer(token, _destination, balance);
        }
    }
}


/// @title Starterpack Distributor
/// @notice Attempts to deliver 1 and only 1 starterpack containing ETH, ERC20 Tokens and NFT Stickerpacks to an eligible recipient
/// @dev The contract assumes Signer has verified an In-App Purchase Receipt
contract SimplifiedDistributor is SafeTransfer, ReentrancyGuard, TokenWithdrawer {
    address payable public owner;  // Contract deployer can modify parameters
    address public signer; // Signer can only distribute Starterpacks

    // Defines the Starterpack parameters
    struct Pack {
        uint256 ethAmount; // The Amount of ETH to transfer to the recipient
        address[] tokens; // Array of ERC20 Contract Addresses
        uint256[] tokenAmounts; // Array of ERC20 amounts corresponding to cells in tokens[]
    }

    Pack public defaultPack;

    ERC20Token public sntToken;

    bool public pause = true;
    
    event RequireApproval(address attribution);
    
    mapping(address => uint) public pendingAttributionCnt;
    mapping(address => uint) public attributionCnt;
    
    struct Attribution {
        bool enabled;
        uint256 ethAmount; // The Amount of ETH to transfer to the referrer
        address[] tokens; // Array of ERC20 Contract Addresses
        uint256[] tokenAmounts; // Array of ERC20 amounts corresponding to cells in tokens[]
        uint limit;
    }
    
    mapping(address => Attribution) defaultAttributionSettings;
    mapping(address => Attribution) promoAttributionSettings;

    // Modifiers --------------------------------------------------------------------------------------------

    // Functions only Owner can call
    modifier onlyOwner {
        require(msg.sender == owner, "Unauthorized");
        _;
    }

    // Logic ------------------------------------------------------------------------------------------------

    /// @notice Check if an address is eligible for a starterpack
    /// @dev will return false if a transaction of distributePack for _recipient has been successfully executed
    ///      RETURNING TRUE BECAUSE ELIGIBILITY WILL BE HANDLED BY THE BACKEND
    /// @param _recipient The address to be checked for eligibility
    function eligible(address _recipient) public view returns (bool){
        return true;
    }

    /// @notice Get the starter pack configuration
    /// @return stickerMarket address Stickermarket contract address
    /// @return ethAmount uint256 ETH amount in wei that will be sent to a recipient
    /// @return tokens address[] List of tokens that will be sent to a recipient
    /// @return tokenAmounts uint[] Amount of tokens that will be sent to a recipient
    /// @return stickerPackIds uint[] List of sticker packs to send to a recipient
    function getDefaultPack() external view returns(address stickerMarket, uint256 ethAmount, address[] memory tokens, uint[] memory tokenAmounts, uint[] memory stickerPackIds) {
        ethAmount = defaultPack.ethAmount;
        tokens = defaultPack.tokens;
        tokenAmounts = defaultPack.tokenAmounts;
    }

    /// @notice Get the promo pack configuration
    /// @return stickerMarket address Stickermarket contract address
    /// @return ethAmount uint256 ETH amount in wei that will be sent to a recipient
    /// @return tokens address[] List of tokens that will be sent to a recipient
    /// @return tokenAmounts uint[] Amount of tokens that will be sent to a recipient
    /// @return stickerPackIds uint[] List of sticker packs to send to a recipient
    /// @return available uint number of promo packs available
    function getPromoPack() external view returns(address stickerMarket, uint256 ethAmount, address[] memory tokens, uint[] memory tokenAmounts, uint[] memory stickerPackIds, uint256 available) {
        // Removed the promo pack functionality, so returning default values (to not affect the ABI)
    }

    event Distributed(address indexed recipient, address indexed attribution);

    /// @notice Distributes a starterpack to an eligible address. Either a promo pack or a default will be distributed depending on availability
    /// @dev Can only be called by signer, assumes signer has validated an IAP receipt, owner can block calling by pausing.
    /// @param _recipient A payable address that is sent a starterpack after being checked for eligibility
    /// @param _attribution A payable address who referred the starterpack purchaser 
    function distributePack(address payable _recipient, address payable _attribution) external reentrancyGuard {
        require(!pause, "Paused");
        require(msg.sender == signer, "Unauthorized");
        require(_recipient != _attribution, "Recipient should be different from Attribution address");

        Pack memory pack = defaultPack;

        // Transfer Tokens
        // Iterate over tokens[] and transfer the an amount corresponding to the i cell in tokenAmounts[]
        for (uint256 i = 0; i < pack.tokens.length; i++) {
            ERC20Token token = ERC20Token(pack.tokens[i]);
            uint256 amount = pack.tokenAmounts[i];
            require(token.transfer(_recipient, amount), "ERC20 operation did not succeed");
        }

        // Transfer ETH
        // .transfer bad post Istanbul fork :|
        (bool success, ) = _recipient.call.value(pack.ethAmount)("");
        require(success, "ETH Transfer failed");

        emit Distributed(_recipient, _attribution);

        if (_attribution == address(0)) return;
        
        pendingAttributionCnt[_attribution] += 1;
    }

    function withdrawAttributions() external {
        require(!pause, "Paused");
        
        uint pendingAttributions = pendingAttributionCnt[msg.sender];
        uint attributionsPaid = attributionCnt[msg.sender];

        if (pendingAttributions == 0) return;

        Attribution memory attr = defaultAttributionSettings[msg.sender];
        if (!attr.enabled) {
           attr = defaultAttributionSettings[address(0)];
        }

        uint totalETHToPay;
        uint totalSNTToPay;
        uint attributionsToPay;
        if((attributionsPaid + pendingAttributions) > attr.limit){
            emit RequireApproval(msg.sender);
            if(attributionsPaid < attr.limit){
                attributionsToPay = attr.limit - attributionsPaid;
            } else {
                attributionsToPay = 0;
            }
            attributionsPaid += attributionsToPay;
            pendingAttributions -= attributionsToPay;
        } else {
            attributionsToPay = pendingAttributions;
            attributionsPaid += attributionsToPay;
            pendingAttributions = 0;
        }

        totalETHToPay += attributionsToPay * attr.ethAmount;

        for (uint256 i = 0; i < attr.tokens.length; i++) {
            if(attr.tokens[i] == address(sntToken)){
                totalSNTToPay += attributionsToPay * attr.tokenAmounts[i];
            } else {
                ERC20Token token = ERC20Token(attr.tokens[i]);
                uint256 amount = attributionsToPay * attr.tokenAmounts[i];
                _safeTransfer(token, msg.sender, amount);
            }
        }

        pendingAttributionCnt[msg.sender] = pendingAttributions;
        attributionCnt[msg.sender] = attributionsPaid;

        if (totalETHToPay != 0){
            
            (bool success, ) = msg.sender.call.value(totalETHToPay)("");
            require(success, "ETH Transfer failed");
        }

        if (totalSNTToPay != 0){
            ERC20Token token = ERC20Token(sntToken);
            _safeTransfer(token, msg.sender, totalSNTToPay);
        }
    }
    

    /// @notice Get rewards for specific referrer
    /// @param _account The address to obtain the attribution config
    /// @param _isPromo Indicates if the configuration for a promo should be returned or not
    /// @return ethAmount Amount of ETH in wei
    /// @return tokenLen Number of tokens configured as part of the reward
    /// @return maxThreshold If isPromo == true: Number of promo bonuses still available for that address else: Max number of attributions to pay before requiring approval
    /// @return attribCount Number of referrals
    function getReferralReward(address _account, bool _isPromo) public view returns (uint ethAmount, uint tokenLen, uint maxThreshold, uint attribCount) {
        require(_isPromo != true);
        Attribution memory attr = defaultAttributionSettings[_account];
        if (!attr.enabled) {
            attr = defaultAttributionSettings[address(0)];
        }
        
        ethAmount = attr.ethAmount;
        maxThreshold = attr.limit;
        attribCount = attributionCnt[_account];
        tokenLen = attr.tokens.length;
    }

    /// @notice Get token rewards for specific address
    /// @param _account The address to obtain the attribution's token config
    /// @param _isPromo Indicates if the configuration for a promo should be returned or not
    /// @param _idx Index of token array in the attribution used to obtain the token config
    /// @return token ERC20 contract address
    /// @return tokenAmount Amount of token configured in the attribution
    function getReferralRewardTokens(address _account, bool _isPromo, uint _idx) public view returns (address token, uint tokenAmount) {
        require(_isPromo != true);
        Attribution memory attr = defaultAttributionSettings[_account];
        if (!attr.enabled) {
            attr = defaultAttributionSettings[address(0)];
        }
        
        token = attr.tokens[_idx];
        tokenAmount = attr.tokenAmounts[_idx];
    }
    
    fallback() external payable  {
     // ...
    }
    
    // Admin ------------------------------------------------------------------------------------------------

    /// @notice Allows the Owner to allow or prohibit Signer from calling distributePack().
    /// @dev setPause must be called before Signer can call distributePack()
    function setPause(bool _pause) external onlyOwner {
        pause = _pause;
    }

    /// @notice Set a starter pack configuration
    /// @dev The Owner can change the default starterpack contents
    /// @param _newPack starter pack configuration
    function changeStarterPack(Pack memory _newPack) public onlyOwner {
        require(_newPack.tokens.length == _newPack.tokenAmounts.length, "Mismatch with Tokens & Amounts");

        for (uint256 i = 0; i < _newPack.tokens.length; i++) {
            require(_newPack.tokenAmounts[i] > 0, "Amounts must be non-zero");
        }

        defaultPack = _newPack;
    }

    /// @notice Safety function allowing the owner to immediately pause starterpack distribution and withdraw all balances in the the contract
    function withdraw(address[] calldata _tokens) external onlyOwner {
        pause = true;
        withdrawTokens(_tokens, owner);
    }

    /// @notice Changes the Signer of the contract
    /// @param _newSigner The new Signer of the contract
    function changeSigner(address _newSigner) public onlyOwner {
        require(_newSigner != address(0), "zero_address not allowed");
        signer = _newSigner;
    }

    /// @notice Changes the owner of the contract
    /// @param _newOwner The new owner of the contract
    function changeOwner(address payable _newOwner) external onlyOwner {
        require(_newOwner != address(0), "zero_address not allowed");
        owner = _newOwner;
    }
    
    /// @notice Set default/custom payout and threshold for referrals
    /// @param _isPromo indicates if this attribution config is a promo or default config
    /// @param _ethAmount Payout for referrals
    /// @param _thresholds Max number of referrals allowed beforee requiring approval
    /// @param _assignedTo Use a valid address here to set custom settings. To set the default payout and threshold, use address(0);
    function setPayoutAndThreshold(
        bool _isPromo,
        uint256 _ethAmount,
        address[] calldata _tokens,
        uint256[] calldata _tokenAmounts,
        uint256[] calldata _thresholds,
        address[] calldata _assignedTo
    ) external onlyOwner {
        require(_isPromo != true);

        require(_thresholds.length == _assignedTo.length, "Array length mismatch");
        require(_tokens.length == _tokenAmounts.length, "Array length mismatch");
        
        for (uint256 i = 0; i < _thresholds.length; i++) {
            bool enabled = _assignedTo[i] != address(0);
            
            Attribution memory attr = Attribution({
                enabled: enabled,
                ethAmount: _ethAmount,
                limit: _thresholds[i],
                tokens: _tokens,
                tokenAmounts: _tokenAmounts
            });
            
            defaultAttributionSettings[_assignedTo[i]] = attr;
        }
    }
    
    /// @notice Remove attribution configuration for addresses
    /// @param _assignedTo Array of addresses with an attribution configured
    /// @param _isPromo Indicates if the configuration to delete is the promo or default
    function removePayoutAndThreshold(address[] calldata _assignedTo, bool _isPromo) external onlyOwner {
        for (uint256 i = 0; i < _assignedTo.length; i++) {
            delete defaultAttributionSettings[_assignedTo[i]];
        }
    }

    /// @notice Set SNT address
    function setSntToken(address _sntToken) external onlyOwner {
        sntToken = ERC20Token(_sntToken);
    }

    /// @param _signer allows the contract deployer(owner) to define the signer on construction
    /// @param _sntToken SNT token address
    constructor(address _signer, address _sntToken) public {
        require(_signer != address(0), "zero_address not allowed");
        owner = msg.sender;
        signer = _signer;
        sntToken = ERC20Token(_sntToken);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_sntToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"address","name":"attribution","type":"address"}],"name":"Distributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"attribution","type":"address"}],"name":"RequireApproval","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"attributionCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"changeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"internalType":"struct SimplifiedDistributor.Pack","name":"_newPack","type":"tuple"}],"name":"changeStarterPack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultPack","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"address payable","name":"_attribution","type":"address"}],"name":"distributePack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"eligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultPack","outputs":[{"internalType":"address","name":"stickerMarket","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"stickerPackIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPromoPack","outputs":[{"internalType":"address","name":"stickerMarket","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"stickerPackIds","type":"uint256[]"},{"internalType":"uint256","name":"available","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isPromo","type":"bool"}],"name":"getReferralReward","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenLen","type":"uint256"},{"internalType":"uint256","name":"maxThreshold","type":"uint256"},{"internalType":"uint256","name":"attribCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isPromo","type":"bool"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"getReferralRewardTokens","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingAttributionCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_assignedTo","type":"address[]"},{"internalType":"bool","name":"_isPromo","type":"bool"}],"name":"removePayoutAndThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPromo","type":"bool"},{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_tokenAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"},{"internalType":"address[]","name":"_assignedTo","type":"address[]"}],"name":"setPayoutAndThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sntToken","type":"address"}],"name":"setSntToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sntToken","outputs":[{"internalType":"contract ERC20Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAttributions","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260008060006101000a81548160ff0219169083151502179055506001600560146101000a81548160ff0219169083151502179055503480156200004657600080fd5b506040516200403c3803806200403c83398181016040528101906200006c9190620001c1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d69062000244565b60405180910390fd5b33600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620002c5565b600081519050620001bb81620002ab565b92915050565b60008060408385031215620001d557600080fd5b6000620001e585828601620001aa565b9250506020620001f885828601620001aa565b9150509250929050565b60006200021160188362000266565b91507f7a65726f5f61646472657373206e6f7420616c6c6f77656400000000000000006000830152602082019050919050565b600060208201905081810360008301526200025f8162000202565b9050919050565b600082825260208201905092915050565b600062000284826200028b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620002b68162000277565b8114620002c257600080fd5b50565b613d6780620002d56000396000f3fe6080604052600436106101395760003560e01c8063abf43977116100ab578063bedb86fb1161006f578063bedb86fb1461042a578063d00223e714610453578063d738988114610482578063db904862146104ab578063dfa3802f146104db578063ea23cd3e146104f25761013a565b8063abf4397714610348578063b9265adb14610386578063b9e21004146103af578063bcbf25f7146103d8578063bd5dec98146104015761013a565b80637236dc63116100fd5780637236dc6314610223578063797ef3bf146102635780638456cb59146102a05780638da5cb5b146102cb578063a6f9dae1146102f6578063aad2b7231461031f5761013a565b80630713b1391461013c578063238ac933146101795780634ea9d070146101a45780635ac5cf1b146101cd57806360837f29146101f85761013a565b5b005b34801561014857600080fd5b50610163600480360381019061015e9190612da0565b61052f565b6040516101709190613882565b60405180910390f35b34801561018557600080fd5b5061018e61053a565b60405161019b9190613701565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c691906130a4565b610560565b005b3480156101d957600080fd5b506101e2610701565b6040516101ef9190613a78565b60405180910390f35b34801561020457600080fd5b5061020d61070d565b60405161021a919061389d565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190612e2e565b610733565b60405161025a9493929190613a93565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612da0565b610a81565b6040516102979190613a78565b60405180910390f35b3480156102ac57600080fd5b506102b5610a99565b6040516102c29190613882565b60405180910390f35b3480156102d757600080fd5b506102e0610aac565b6040516102ed9190613737565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612dc9565b610ad2565b005b34801561032b57600080fd5b5061034660048036038101906103419190612da0565b610c16565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e6a565b610d5a565b60405161037d92919061377b565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612fa8565b611080565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612da0565b6113c8565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612df2565b61149c565b005b34801561040d57600080fd5b5061042860048036038101906104239190612eb9565b611a33565b005b34801561043657600080fd5b50610451600480360381019061044c9190612f56565b611b4f565b005b34801561045f57600080fd5b50610468611bfc565b6040516104799594939291906137a4565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190612efe565b611cf4565b005b3480156104b757600080fd5b506104c0611e4b565b6040516104d29695949392919061380c565b60405180910390f35b3480156104e757600080fd5b506104f0611e5d565b005b3480156104fe57600080fd5b5061051960048036038101906105149190612da0565b612522565b6040516105269190613a78565b60405180910390f35b600060019050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790613958565b60405180910390fd5b8060400151518160200151511461063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063390613a38565b60405180910390fd5b60005b8160200151518110156106b35760008260400151828151811061065e57fe5b6020026020010151116106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d906139d8565b60405180910390fd5b808060010191505061063f565b508060026000820151816000015560208201518160010190805190602001906106dd929190612935565b5060408201518160020190805190602001906106fa9291906129bf565b5090505050565b60028060000154905081565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060011515851515141561074b57600080fd5b610753612a0c565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820180548060200260200160405190810160405280929190818152602001828054801561084757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107fd575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561089f57602002820191906000526020600020905b81548152602001906001019080831161088b575b5050505050815260200160048201548152505090508060000151610a1f57600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610967575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610a0957602002820191906000526020600020905b8154815260200190600101908083116109f5575b5050505050815260200160048201548152505090505b8060200151945080608001519250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915080604001515193505092959194509250565b60076020528060005260406000206000915090505481565b600560149054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990613958565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613998565b60405180910390fd5b80600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613958565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613998565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600115158415151415610d6f57600080fd5b610d77612a0c565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e6b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610e21575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610ec357602002820191906000526020600020905b815481526020019060010190808311610eaf575b505050505081526020016004820154815250509050806000015161104357600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020018280548015610fd557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f8b575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561102d57602002820191906000526020600020905b815481526020019060010190808311611019575b5050505050815260200160048201548152505090505b8060400151848151811061105357fe5b602002602001015192508060600151848151811061106d57fe5b6020026020010151915050935093915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790613958565b60405180910390fd5b600115158a1515141561112257600080fd5b81819050848490501461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613938565b60405180910390fd5b8585905088889050146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990613938565b60405180910390fd5b60005b848490508110156113bb5760008073ffffffffffffffffffffffffffffffffffffffff168484848181106111e557fe5b90506020020160208101906111fa9190612da0565b73ffffffffffffffffffffffffffffffffffffffff161415905061121c612a0c565b6040518060a0016040528083151581526020018d81526020018c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018888868181106112cf57fe5b90506020020135815250905080600860008787878181106112ec57fe5b90506020020160208101906113019190612da0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002019080519060200190611381929190612935565b50606082015181600301908051906020019061139e9291906129bf565b5060808201518160040155905050505080806001019150506111b5565b5050505050505050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90613958565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900460ff16156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613918565b60405180910390fd5b60016000806101000a81548160ff021916908315150217905550600560149054906101000a900460ff1615611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906138d8565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90613958565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613a58565b60405180910390fd5b61165b612a3d565b600260405180606001604052908160008201548152602001600182018054806020026020016040519081016040528092919081815260200182805480156116f757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116ad575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561174f57602002820191906000526020600020905b81548152602001906001019080831161173b575b505050505081525050905060005b81602001515181101561187d5760008260200151828151811061177c57fe5b6020026020010151905060008360400151838151811061179857fe5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b81526004016117dd929190613752565b602060405180830381600087803b1580156117f757600080fd5b505af115801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612f7f565b61186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613a18565b60405180910390fd5b5050808060010191505061175d565b5060008373ffffffffffffffffffffffffffffffffffffffff1682600001516040516118a8906136ec565b60006040518083038185875af1925050503d80600081146118e5576040519150601f19603f3d011682016040523d82523d6000602084013e6118ea565b606091505b505090508061192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906139f8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f308e2c5753972417b271d7ca4dc8f5d75b5ae15f18eb667e195dd174ac6d359360405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c4575050611a15565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505b60008060006101000a81548160ff0219169083151502179055505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613958565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550611b4b828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661253a565b5050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613958565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b600080606080606060026000015493506002600101805480602002602001604051908101604052809291908181526020018280548015611c9157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c47575b5050505050925060028001805480602002602001604051908101604052809291908181526020018280548015611ce657602002820191906000526020600020905b815481526020019060010190808311611cd2575b505050505091509091929394565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613958565b60405180910390fd5b60005b83839050811015611e455760086000858584818110611da257fe5b9050602002016020810190611db79190612da0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000611e1e9190612a5e565b600382016000611e2e9190612a7f565b600482016000905550508080600101915050611d87565b50505050565b60008060608060606000909192939495565b600560149054906101000a900460ff1615611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea4906138d8565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821415611f45575050612520565b611f4d612a0c565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820180548060200260200160405190810160405280929190818152602001828054801561204157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611ff7575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561209957602002820191906000526020600020905b815481526020019060010190808311612085575b505050505081526020016004820154815250509050806000015161221957600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282018054806020026020016040519081016040528092919081815260200182805480156121ab57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612161575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561220357602002820191906000526020600020905b8154815260200190600101908083116121ef575b5050505050815260200160048201548152505090505b600080600083608001518686011115612291577f5fab9b9ad2c936c0199fccac8da5ecb5100de9323d6a34a6489bdd3715e0b5483360405161225b919061371c565b60405180910390a1836080015185101561227d57848460800151039050612282565b600090505b8085019450808603955061229e565b8590508085019450600095505b836020015181028301925060005b84604001515181101561239e57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560400151828151811061230257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612349578460600151818151811061233657fe5b6020026020010151820283019250612391565b60008560400151828151811061235b57fe5b6020026020010151905060008660600151838151811061237757fe5b60200260200101518402905061238e82338361257b565b50505b80806001019150506122ac565b5085600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600083146124dd5760003373ffffffffffffffffffffffffffffffffffffffff1684604051612455906136ec565b60006040518083038185875af1925050503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b50509050806124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906139f8565b60405180910390fd5b505b60008214612519576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061251781338561257b565b505b5050505050505b565b60066020528060005260406000206000915090505481565b60008251905060005b818110156125755761256884828151811061255a57fe5b602002602001015184612601565b8080600101915050612543565b50505050565b6125fc8363a9059cbb60e01b848460405160240161259a92919061377b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ec5747905060008273ffffffffffffffffffffffffffffffffffffffff1682604051612660906136ec565b60006040518083038185875af1925050503d806000811461269d576040519150601f19603f3d011682016040523d82523d6000602084013e6126a2565b606091505b50509050806126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613978565b60405180910390fd5b50612789565b60008390508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161272a9190613701565b60206040518083038186803b15801561274257600080fd5b505afa158015612756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277a91906130e5565b915061278781848461257b565b505b505050565b612797826128ea565b6127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906138f8565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516127ff91906136d5565b6000604051808303816000865af19150503d806000811461283c576040519150601f19603f3d011682016040523d82523d6000602084013e612841565b606091505b509150915081612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d906138b8565b60405180910390fd5b6000815111156128e457808060200190518101906128a49190612f7f565b6128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da906139b8565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561292c57506000801b8214155b92505050919050565b8280548282559060005260206000209081019282156129ae579160200282015b828111156129ad5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612955565b5b5090506129bb9190612aa0565b5090565b8280548282559060005260206000209081019282156129fb579160200282015b828111156129fa5782518255916020019190600101906129df565b5b509050612a089190612adb565b5090565b6040518060a00160405280600015158152602001600081526020016060815260200160608152602001600081525090565b60405180606001604052806000815260200160608152602001606081525090565b5080546000825590600052602060002090810190612a7c9190612adb565b50565b5080546000825590600052602060002090810190612a9d9190612adb565b50565b5b80821115612ad757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612aa1565b5090565b5b80821115612af4576000816000905550600101612adc565b5090565b600081359050612b0781613cd5565b92915050565b600081359050612b1c81613cec565b92915050565b60008083601f840112612b3457600080fd5b8235905067ffffffffffffffff811115612b4d57600080fd5b602083019150836020820283011115612b6557600080fd5b9250929050565b600082601f830112612b7d57600080fd5b8135612b90612b8b82613b05565b613ad8565b91508181835260208401935060208101905083856020840282011115612bb557600080fd5b60005b83811015612be55781612bcb8882612af8565b845260208401935060208301925050600181019050612bb8565b5050505092915050565b60008083601f840112612c0157600080fd5b8235905067ffffffffffffffff811115612c1a57600080fd5b602083019150836020820283011115612c3257600080fd5b9250929050565b600082601f830112612c4a57600080fd5b8135612c5d612c5882613b2d565b613ad8565b91508181835260208401935060208101905083856020840282011115612c8257600080fd5b60005b83811015612cb25781612c988882612d76565b845260208401935060208301925050600181019050612c85565b5050505092915050565b600081359050612ccb81613d03565b92915050565b600081519050612ce081613d03565b92915050565b600060608284031215612cf857600080fd5b612d026060613ad8565b90506000612d1284828501612d76565b600083015250602082013567ffffffffffffffff811115612d3257600080fd5b612d3e84828501612b6c565b602083015250604082013567ffffffffffffffff811115612d5e57600080fd5b612d6a84828501612c39565b60408301525092915050565b600081359050612d8581613d1a565b92915050565b600081519050612d9a81613d1a565b92915050565b600060208284031215612db257600080fd5b6000612dc084828501612af8565b91505092915050565b600060208284031215612ddb57600080fd5b6000612de984828501612b0d565b91505092915050565b60008060408385031215612e0557600080fd5b6000612e1385828601612b0d565b9250506020612e2485828601612b0d565b9150509250929050565b60008060408385031215612e4157600080fd5b6000612e4f85828601612af8565b9250506020612e6085828601612cbc565b9150509250929050565b600080600060608486031215612e7f57600080fd5b6000612e8d86828701612af8565b9350506020612e9e86828701612cbc565b9250506040612eaf86828701612d76565b9150509250925092565b60008060208385031215612ecc57600080fd5b600083013567ffffffffffffffff811115612ee657600080fd5b612ef285828601612b22565b92509250509250929050565b600080600060408486031215612f1357600080fd5b600084013567ffffffffffffffff811115612f2d57600080fd5b612f3986828701612b22565b93509350506020612f4c86828701612cbc565b9150509250925092565b600060208284031215612f6857600080fd5b6000612f7684828501612cbc565b91505092915050565b600060208284031215612f9157600080fd5b6000612f9f84828501612cd1565b91505092915050565b60008060008060008060008060008060c08b8d031215612fc757600080fd5b6000612fd58d828e01612cbc565b9a50506020612fe68d828e01612d76565b99505060408b013567ffffffffffffffff81111561300357600080fd5b61300f8d828e01612b22565b985098505060608b013567ffffffffffffffff81111561302e57600080fd5b61303a8d828e01612bef565b965096505060808b013567ffffffffffffffff81111561305957600080fd5b6130658d828e01612bef565b945094505060a08b013567ffffffffffffffff81111561308457600080fd5b6130908d828e01612b22565b92509250509295989b9194979a5092959850565b6000602082840312156130b657600080fd5b600082013567ffffffffffffffff8111156130d057600080fd5b6130dc84828501612ce6565b91505092915050565b6000602082840312156130f757600080fd5b600061310584828501612d8b565b91505092915050565b600061311a838361315c565b60208301905092915050565b600061313283836136b7565b60208301905092915050565b61314781613c48565b82525050565b61315681613c00565b82525050565b61316581613bee565b82525050565b61317481613bee565b82525050565b600061318582613b75565b61318f8185613bb0565b935061319a83613b55565b8060005b838110156131cb5781516131b2888261310e565b97506131bd83613b96565b92505060018101905061319e565b5085935050505092915050565b60006131e382613b80565b6131ed8185613bc1565b93506131f883613b65565b8060005b838110156132295781516132108882613126565b975061321b83613ba3565b9250506001810190506131fc565b5085935050505092915050565b61323f81613c12565b82525050565b600061325082613b8b565b61325a8185613bd2565b935061326a818560208601613ca2565b80840191505092915050565b61327f81613c5a565b82525050565b6000613292602383613bdd565b91507f536166655472616e736665723a206c6f772d6c6576656c2063616c6c2066616960008301527f6c656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132f8600683613bdd565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613338602283613bdd565b91507f536166655472616e736665723a2063616c6c20746f206e6f6e2d636f6e74726160008301527f63740000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061339e601883613bdd565b91507f5265656e7472616e742063616c6c2064657465637465642100000000000000006000830152602082019050919050565b60006133de601583613bdd565b91507f4172726179206c656e677468206d69736d6174636800000000000000000000006000830152602082019050919050565b600061341e600c83613bdd565b91507f556e617574686f72697a656400000000000000000000000000000000000000006000830152602082019050919050565b600061345e600f83613bdd565b91507f5472616e73666572206661696c656400000000000000000000000000000000006000830152602082019050919050565b600061349e601883613bdd565b91507f7a65726f5f61646472657373206e6f7420616c6c6f77656400000000000000006000830152602082019050919050565b60006134de602d83613bdd565b91507f536166655472616e736665723a204552433230206f7065726174696f6e20646960008301527f64206e6f742073756363656564000000000000000000000000000000000000006020830152604082019050919050565b6000613544601883613bdd565b91507f416d6f756e7473206d757374206265206e6f6e2d7a65726f00000000000000006000830152602082019050919050565b6000613584601383613bdd565b91507f455448205472616e73666572206661696c6564000000000000000000000000006000830152602082019050919050565b60006135c4601f83613bdd565b91507f4552433230206f7065726174696f6e20646964206e6f742073756363656564006000830152602082019050919050565b6000613604601e83613bdd565b91507f4d69736d61746368207769746820546f6b656e73202620416d6f756e747300006000830152602082019050919050565b6000613644600083613bd2565b9150600082019050919050565b600061365e603683613bdd565b91507f526563697069656e742073686f756c6420626520646966666572656e7420667260008301527f6f6d204174747269627574696f6e2061646472657373000000000000000000006020830152604082019050919050565b6136c081613c3e565b82525050565b6136cf81613c3e565b82525050565b60006136e18284613245565b915081905092915050565b60006136f782613637565b9150819050919050565b6000602082019050613716600083018461316b565b92915050565b6000602082019050613731600083018461313e565b92915050565b600060208201905061374c600083018461314d565b92915050565b6000604082019050613767600083018561313e565b61377460208301846136c6565b9392505050565b6000604082019050613790600083018561316b565b61379d60208301846136c6565b9392505050565b600060a0820190506137b9600083018861316b565b6137c660208301876136c6565b81810360408301526137d8818661317a565b905081810360608301526137ec81856131d8565b9050818103608083015261380081846131d8565b90509695505050505050565b600060c082019050613821600083018961316b565b61382e60208301886136c6565b8181036040830152613840818761317a565b9050818103606083015261385481866131d8565b9050818103608083015261386881856131d8565b905061387760a08301846136c6565b979650505050505050565b60006020820190506138976000830184613236565b92915050565b60006020820190506138b26000830184613276565b92915050565b600060208201905081810360008301526138d181613285565b9050919050565b600060208201905081810360008301526138f1816132eb565b9050919050565b600060208201905081810360008301526139118161332b565b9050919050565b6000602082019050818103600083015261393181613391565b9050919050565b60006020820190508181036000830152613951816133d1565b9050919050565b6000602082019050818103600083015261397181613411565b9050919050565b6000602082019050818103600083015261399181613451565b9050919050565b600060208201905081810360008301526139b181613491565b9050919050565b600060208201905081810360008301526139d1816134d1565b9050919050565b600060208201905081810360008301526139f181613537565b9050919050565b60006020820190508181036000830152613a1181613577565b9050919050565b60006020820190508181036000830152613a31816135b7565b9050919050565b60006020820190508181036000830152613a51816135f7565b9050919050565b60006020820190508181036000830152613a7181613651565b9050919050565b6000602082019050613a8d60008301846136c6565b92915050565b6000608082019050613aa860008301876136c6565b613ab560208301866136c6565b613ac260408301856136c6565b613acf60608301846136c6565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715613afb57600080fd5b8060405250919050565b600067ffffffffffffffff821115613b1c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613b4457600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613bf982613c1e565b9050919050565b6000613c0b82613c1e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c5382613c7e565b9050919050565b6000613c6582613c6c565b9050919050565b6000613c7782613c1e565b9050919050565b6000613c8982613c90565b9050919050565b6000613c9b82613c1e565b9050919050565b60005b83811015613cc0578082015181840152602081019050613ca5565b83811115613ccf576000848401525b50505050565b613cde81613bee565b8114613ce957600080fd5b50565b613cf581613c00565b8114613d0057600080fd5b50565b613d0c81613c12565b8114613d1757600080fd5b50565b613d2381613c3e565b8114613d2e57600080fd5b5056fea264697066735822122024adca062b7dce5bc4b48fa52b94f67e6f6dda1be6b39e4c8bb44dc29292fb2564736f6c634300060c0033000000000000000000000000f234ec8b27f4157f9594bb10a6d2c3d7a35082d2000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e

Deployed Bytecode

0x6080604052600436106101395760003560e01c8063abf43977116100ab578063bedb86fb1161006f578063bedb86fb1461042a578063d00223e714610453578063d738988114610482578063db904862146104ab578063dfa3802f146104db578063ea23cd3e146104f25761013a565b8063abf4397714610348578063b9265adb14610386578063b9e21004146103af578063bcbf25f7146103d8578063bd5dec98146104015761013a565b80637236dc63116100fd5780637236dc6314610223578063797ef3bf146102635780638456cb59146102a05780638da5cb5b146102cb578063a6f9dae1146102f6578063aad2b7231461031f5761013a565b80630713b1391461013c578063238ac933146101795780634ea9d070146101a45780635ac5cf1b146101cd57806360837f29146101f85761013a565b5b005b34801561014857600080fd5b50610163600480360381019061015e9190612da0565b61052f565b6040516101709190613882565b60405180910390f35b34801561018557600080fd5b5061018e61053a565b60405161019b9190613701565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c691906130a4565b610560565b005b3480156101d957600080fd5b506101e2610701565b6040516101ef9190613a78565b60405180910390f35b34801561020457600080fd5b5061020d61070d565b60405161021a919061389d565b60405180910390f35b34801561022f57600080fd5b5061024a60048036038101906102459190612e2e565b610733565b60405161025a9493929190613a93565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190612da0565b610a81565b6040516102979190613a78565b60405180910390f35b3480156102ac57600080fd5b506102b5610a99565b6040516102c29190613882565b60405180910390f35b3480156102d757600080fd5b506102e0610aac565b6040516102ed9190613737565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612dc9565b610ad2565b005b34801561032b57600080fd5b5061034660048036038101906103419190612da0565b610c16565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612e6a565b610d5a565b60405161037d92919061377b565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190612fa8565b611080565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612da0565b6113c8565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612df2565b61149c565b005b34801561040d57600080fd5b5061042860048036038101906104239190612eb9565b611a33565b005b34801561043657600080fd5b50610451600480360381019061044c9190612f56565b611b4f565b005b34801561045f57600080fd5b50610468611bfc565b6040516104799594939291906137a4565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190612efe565b611cf4565b005b3480156104b757600080fd5b506104c0611e4b565b6040516104d29695949392919061380c565b60405180910390f35b3480156104e757600080fd5b506104f0611e5d565b005b3480156104fe57600080fd5b5061051960048036038101906105149190612da0565b612522565b6040516105269190613a78565b60405180910390f35b600060019050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e790613958565b60405180910390fd5b8060400151518160200151511461063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063390613a38565b60405180910390fd5b60005b8160200151518110156106b35760008260400151828151811061065e57fe5b6020026020010151116106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d906139d8565b60405180910390fd5b808060010191505061063f565b508060026000820151816000015560208201518160010190805190602001906106dd929190612935565b5060408201518160020190805190602001906106fa9291906129bf565b5090505050565b60028060000154905081565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060011515851515141561074b57600080fd5b610753612a0c565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820180548060200260200160405190810160405280929190818152602001828054801561084757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107fd575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561089f57602002820191906000526020600020905b81548152602001906001019080831161088b575b5050505050815260200160048201548152505090508060000151610a1f57600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610967575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610a0957602002820191906000526020600020905b8154815260200190600101908083116109f5575b5050505050815260200160048201548152505090505b8060200151945080608001519250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915080604001515193505092959194509250565b60076020528060005260406000206000915090505481565b600560149054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5990613958565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613998565b60405180910390fd5b80600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d90613958565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613998565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600115158415151415610d6f57600080fd5b610d77612a0c565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e6b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610e21575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610ec357602002820191906000526020600020905b815481526020019060010190808311610eaf575b505050505081526020016004820154815250509050806000015161104357600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff161515151581526020016001820154815260200160028201805480602002602001604051908101604052809291908181526020018280548015610fd557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f8b575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561102d57602002820191906000526020600020905b815481526020019060010190808311611019575b5050505050815260200160048201548152505090505b8060400151848151811061105357fe5b602002602001015192508060600151848151811061106d57fe5b6020026020010151915050935093915050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790613958565b60405180910390fd5b600115158a1515141561112257600080fd5b81819050848490501461116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190613938565b60405180910390fd5b8585905088889050146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990613938565b60405180910390fd5b60005b848490508110156113bb5760008073ffffffffffffffffffffffffffffffffffffffff168484848181106111e557fe5b90506020020160208101906111fa9190612da0565b73ffffffffffffffffffffffffffffffffffffffff161415905061121c612a0c565b6040518060a0016040528083151581526020018d81526020018c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018888868181106112cf57fe5b90506020020135815250905080600860008787878181106112ec57fe5b90506020020160208101906113019190612da0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002019080519060200190611381929190612935565b50606082015181600301908051906020019061139e9291906129bf565b5060808201518160040155905050505080806001019150506111b5565b5050505050505050505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90613958565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900460ff16156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190613918565b60405180910390fd5b60016000806101000a81548160ff021916908315150217905550600560149054906101000a900460ff1615611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906138d8565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90613958565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a90613a58565b60405180910390fd5b61165b612a3d565b600260405180606001604052908160008201548152602001600182018054806020026020016040519081016040528092919081815260200182805480156116f757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116ad575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561174f57602002820191906000526020600020905b81548152602001906001019080831161173b575b505050505081525050905060005b81602001515181101561187d5760008260200151828151811061177c57fe5b6020026020010151905060008360400151838151811061179857fe5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b81526004016117dd929190613752565b602060405180830381600087803b1580156117f757600080fd5b505af115801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f9190612f7f565b61186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613a18565b60405180910390fd5b5050808060010191505061175d565b5060008373ffffffffffffffffffffffffffffffffffffffff1682600001516040516118a8906136ec565b60006040518083038185875af1925050503d80600081146118e5576040519150601f19603f3d011682016040523d82523d6000602084013e6118ea565b606091505b505090508061192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906139f8565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f308e2c5753972417b271d7ca4dc8f5d75b5ae15f18eb667e195dd174ac6d359360405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c4575050611a15565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505b60008060006101000a81548160ff0219169083151502179055505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90613958565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550611b4b828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661253a565b5050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613958565b60405180910390fd5b80600560146101000a81548160ff02191690831515021790555050565b600080606080606060026000015493506002600101805480602002602001604051908101604052809291908181526020018280548015611c9157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c47575b5050505050925060028001805480602002602001604051908101604052809291908181526020018280548015611ce657602002820191906000526020600020905b815481526020019060010190808311611cd2575b505050505091509091929394565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613958565b60405180910390fd5b60005b83839050811015611e455760086000858584818110611da257fe5b9050602002016020810190611db79190612da0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff02191690556001820160009055600282016000611e1e9190612a5e565b600382016000611e2e9190612a7f565b600482016000905550508080600101915050611d87565b50505050565b60008060608060606000909192939495565b600560149054906101000a900460ff1615611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea4906138d8565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821415611f45575050612520565b611f4d612a0c565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182015481526020016002820180548060200260200160405190810160405280929190818152602001828054801561204157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611ff7575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561209957602002820191906000526020600020905b815481526020019060010190808311612085575b505050505081526020016004820154815250509050806000015161221957600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff1615151515815260200160018201548152602001600282018054806020026020016040519081016040528092919081815260200182805480156121ab57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612161575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561220357602002820191906000526020600020905b8154815260200190600101908083116121ef575b5050505050815260200160048201548152505090505b600080600083608001518686011115612291577f5fab9b9ad2c936c0199fccac8da5ecb5100de9323d6a34a6489bdd3715e0b5483360405161225b919061371c565b60405180910390a1836080015185101561227d57848460800151039050612282565b600090505b8085019450808603955061229e565b8590508085019450600095505b836020015181028301925060005b84604001515181101561239e57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168560400151828151811061230257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612349578460600151818151811061233657fe5b6020026020010151820283019250612391565b60008560400151828151811061235b57fe5b6020026020010151905060008660600151838151811061237757fe5b60200260200101518402905061238e82338361257b565b50505b80806001019150506122ac565b5085600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600083146124dd5760003373ffffffffffffffffffffffffffffffffffffffff1684604051612455906136ec565b60006040518083038185875af1925050503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b50509050806124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906139f8565b60405180910390fd5b505b60008214612519576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061251781338561257b565b505b5050505050505b565b60066020528060005260406000206000915090505481565b60008251905060005b818110156125755761256884828151811061255a57fe5b602002602001015184612601565b8080600101915050612543565b50505050565b6125fc8363a9059cbb60e01b848460405160240161259a92919061377b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061278e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ec5747905060008273ffffffffffffffffffffffffffffffffffffffff1682604051612660906136ec565b60006040518083038185875af1925050503d806000811461269d576040519150601f19603f3d011682016040523d82523d6000602084013e6126a2565b606091505b50509050806126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613978565b60405180910390fd5b50612789565b60008390508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161272a9190613701565b60206040518083038186803b15801561274257600080fd5b505afa158015612756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277a91906130e5565b915061278781848461257b565b505b505050565b612797826128ea565b6127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd906138f8565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516127ff91906136d5565b6000604051808303816000865af19150503d806000811461283c576040519150601f19603f3d011682016040523d82523d6000602084013e612841565b606091505b509150915081612886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287d906138b8565b60405180910390fd5b6000815111156128e457808060200190518101906128a49190612f7f565b6128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da906139b8565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561292c57506000801b8214155b92505050919050565b8280548282559060005260206000209081019282156129ae579160200282015b828111156129ad5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612955565b5b5090506129bb9190612aa0565b5090565b8280548282559060005260206000209081019282156129fb579160200282015b828111156129fa5782518255916020019190600101906129df565b5b509050612a089190612adb565b5090565b6040518060a00160405280600015158152602001600081526020016060815260200160608152602001600081525090565b60405180606001604052806000815260200160608152602001606081525090565b5080546000825590600052602060002090810190612a7c9190612adb565b50565b5080546000825590600052602060002090810190612a9d9190612adb565b50565b5b80821115612ad757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612aa1565b5090565b5b80821115612af4576000816000905550600101612adc565b5090565b600081359050612b0781613cd5565b92915050565b600081359050612b1c81613cec565b92915050565b60008083601f840112612b3457600080fd5b8235905067ffffffffffffffff811115612b4d57600080fd5b602083019150836020820283011115612b6557600080fd5b9250929050565b600082601f830112612b7d57600080fd5b8135612b90612b8b82613b05565b613ad8565b91508181835260208401935060208101905083856020840282011115612bb557600080fd5b60005b83811015612be55781612bcb8882612af8565b845260208401935060208301925050600181019050612bb8565b5050505092915050565b60008083601f840112612c0157600080fd5b8235905067ffffffffffffffff811115612c1a57600080fd5b602083019150836020820283011115612c3257600080fd5b9250929050565b600082601f830112612c4a57600080fd5b8135612c5d612c5882613b2d565b613ad8565b91508181835260208401935060208101905083856020840282011115612c8257600080fd5b60005b83811015612cb25781612c988882612d76565b845260208401935060208301925050600181019050612c85565b5050505092915050565b600081359050612ccb81613d03565b92915050565b600081519050612ce081613d03565b92915050565b600060608284031215612cf857600080fd5b612d026060613ad8565b90506000612d1284828501612d76565b600083015250602082013567ffffffffffffffff811115612d3257600080fd5b612d3e84828501612b6c565b602083015250604082013567ffffffffffffffff811115612d5e57600080fd5b612d6a84828501612c39565b60408301525092915050565b600081359050612d8581613d1a565b92915050565b600081519050612d9a81613d1a565b92915050565b600060208284031215612db257600080fd5b6000612dc084828501612af8565b91505092915050565b600060208284031215612ddb57600080fd5b6000612de984828501612b0d565b91505092915050565b60008060408385031215612e0557600080fd5b6000612e1385828601612b0d565b9250506020612e2485828601612b0d565b9150509250929050565b60008060408385031215612e4157600080fd5b6000612e4f85828601612af8565b9250506020612e6085828601612cbc565b9150509250929050565b600080600060608486031215612e7f57600080fd5b6000612e8d86828701612af8565b9350506020612e9e86828701612cbc565b9250506040612eaf86828701612d76565b9150509250925092565b60008060208385031215612ecc57600080fd5b600083013567ffffffffffffffff811115612ee657600080fd5b612ef285828601612b22565b92509250509250929050565b600080600060408486031215612f1357600080fd5b600084013567ffffffffffffffff811115612f2d57600080fd5b612f3986828701612b22565b93509350506020612f4c86828701612cbc565b9150509250925092565b600060208284031215612f6857600080fd5b6000612f7684828501612cbc565b91505092915050565b600060208284031215612f9157600080fd5b6000612f9f84828501612cd1565b91505092915050565b60008060008060008060008060008060c08b8d031215612fc757600080fd5b6000612fd58d828e01612cbc565b9a50506020612fe68d828e01612d76565b99505060408b013567ffffffffffffffff81111561300357600080fd5b61300f8d828e01612b22565b985098505060608b013567ffffffffffffffff81111561302e57600080fd5b61303a8d828e01612bef565b965096505060808b013567ffffffffffffffff81111561305957600080fd5b6130658d828e01612bef565b945094505060a08b013567ffffffffffffffff81111561308457600080fd5b6130908d828e01612b22565b92509250509295989b9194979a5092959850565b6000602082840312156130b657600080fd5b600082013567ffffffffffffffff8111156130d057600080fd5b6130dc84828501612ce6565b91505092915050565b6000602082840312156130f757600080fd5b600061310584828501612d8b565b91505092915050565b600061311a838361315c565b60208301905092915050565b600061313283836136b7565b60208301905092915050565b61314781613c48565b82525050565b61315681613c00565b82525050565b61316581613bee565b82525050565b61317481613bee565b82525050565b600061318582613b75565b61318f8185613bb0565b935061319a83613b55565b8060005b838110156131cb5781516131b2888261310e565b97506131bd83613b96565b92505060018101905061319e565b5085935050505092915050565b60006131e382613b80565b6131ed8185613bc1565b93506131f883613b65565b8060005b838110156132295781516132108882613126565b975061321b83613ba3565b9250506001810190506131fc565b5085935050505092915050565b61323f81613c12565b82525050565b600061325082613b8b565b61325a8185613bd2565b935061326a818560208601613ca2565b80840191505092915050565b61327f81613c5a565b82525050565b6000613292602383613bdd565b91507f536166655472616e736665723a206c6f772d6c6576656c2063616c6c2066616960008301527f6c656400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132f8600683613bdd565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613338602283613bdd565b91507f536166655472616e736665723a2063616c6c20746f206e6f6e2d636f6e74726160008301527f63740000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061339e601883613bdd565b91507f5265656e7472616e742063616c6c2064657465637465642100000000000000006000830152602082019050919050565b60006133de601583613bdd565b91507f4172726179206c656e677468206d69736d6174636800000000000000000000006000830152602082019050919050565b600061341e600c83613bdd565b91507f556e617574686f72697a656400000000000000000000000000000000000000006000830152602082019050919050565b600061345e600f83613bdd565b91507f5472616e73666572206661696c656400000000000000000000000000000000006000830152602082019050919050565b600061349e601883613bdd565b91507f7a65726f5f61646472657373206e6f7420616c6c6f77656400000000000000006000830152602082019050919050565b60006134de602d83613bdd565b91507f536166655472616e736665723a204552433230206f7065726174696f6e20646960008301527f64206e6f742073756363656564000000000000000000000000000000000000006020830152604082019050919050565b6000613544601883613bdd565b91507f416d6f756e7473206d757374206265206e6f6e2d7a65726f00000000000000006000830152602082019050919050565b6000613584601383613bdd565b91507f455448205472616e73666572206661696c6564000000000000000000000000006000830152602082019050919050565b60006135c4601f83613bdd565b91507f4552433230206f7065726174696f6e20646964206e6f742073756363656564006000830152602082019050919050565b6000613604601e83613bdd565b91507f4d69736d61746368207769746820546f6b656e73202620416d6f756e747300006000830152602082019050919050565b6000613644600083613bd2565b9150600082019050919050565b600061365e603683613bdd565b91507f526563697069656e742073686f756c6420626520646966666572656e7420667260008301527f6f6d204174747269627574696f6e2061646472657373000000000000000000006020830152604082019050919050565b6136c081613c3e565b82525050565b6136cf81613c3e565b82525050565b60006136e18284613245565b915081905092915050565b60006136f782613637565b9150819050919050565b6000602082019050613716600083018461316b565b92915050565b6000602082019050613731600083018461313e565b92915050565b600060208201905061374c600083018461314d565b92915050565b6000604082019050613767600083018561313e565b61377460208301846136c6565b9392505050565b6000604082019050613790600083018561316b565b61379d60208301846136c6565b9392505050565b600060a0820190506137b9600083018861316b565b6137c660208301876136c6565b81810360408301526137d8818661317a565b905081810360608301526137ec81856131d8565b9050818103608083015261380081846131d8565b90509695505050505050565b600060c082019050613821600083018961316b565b61382e60208301886136c6565b8181036040830152613840818761317a565b9050818103606083015261385481866131d8565b9050818103608083015261386881856131d8565b905061387760a08301846136c6565b979650505050505050565b60006020820190506138976000830184613236565b92915050565b60006020820190506138b26000830184613276565b92915050565b600060208201905081810360008301526138d181613285565b9050919050565b600060208201905081810360008301526138f1816132eb565b9050919050565b600060208201905081810360008301526139118161332b565b9050919050565b6000602082019050818103600083015261393181613391565b9050919050565b60006020820190508181036000830152613951816133d1565b9050919050565b6000602082019050818103600083015261397181613411565b9050919050565b6000602082019050818103600083015261399181613451565b9050919050565b600060208201905081810360008301526139b181613491565b9050919050565b600060208201905081810360008301526139d1816134d1565b9050919050565b600060208201905081810360008301526139f181613537565b9050919050565b60006020820190508181036000830152613a1181613577565b9050919050565b60006020820190508181036000830152613a31816135b7565b9050919050565b60006020820190508181036000830152613a51816135f7565b9050919050565b60006020820190508181036000830152613a7181613651565b9050919050565b6000602082019050613a8d60008301846136c6565b92915050565b6000608082019050613aa860008301876136c6565b613ab560208301866136c6565b613ac260408301856136c6565b613acf60608301846136c6565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715613afb57600080fd5b8060405250919050565b600067ffffffffffffffff821115613b1c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613b4457600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613bf982613c1e565b9050919050565b6000613c0b82613c1e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c5382613c7e565b9050919050565b6000613c6582613c6c565b9050919050565b6000613c7782613c1e565b9050919050565b6000613c8982613c90565b9050919050565b6000613c9b82613c1e565b9050919050565b60005b83811015613cc0578082015181840152602081019050613ca5565b83811115613ccf576000848401525b50505050565b613cde81613bee565b8114613ce957600080fd5b50565b613cf581613c00565b8114613d0057600080fd5b50565b613d0c81613c12565b8114613d1757600080fd5b50565b613d2381613c3e565b8114613d2e57600080fd5b5056fea264697066735822122024adca062b7dce5bc4b48fa52b94f67e6f6dda1be6b39e4c8bb44dc29292fb2564736f6c634300060c0033

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

000000000000000000000000f234ec8b27f4157f9594bb10a6d2c3d7a35082d2000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e

-----Decoded View---------------
Arg [0] : _signer (address): 0xf234ec8B27F4157f9594BB10a6D2C3d7a35082D2
Arg [1] : _sntToken (address): 0x744d70FDBE2Ba4CF95131626614a1763DF805B9E

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f234ec8b27f4157f9594bb10a6d2c3d7a35082d2
Arg [1] : 000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e


Deployed Bytecode Sourcemap

23308:13792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25276:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23475:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33416:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23855:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23887:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31365:539;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;24074:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23922:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23396:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34481:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34197:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32354:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35098:981;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36607:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27539:1130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33942:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33155:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25839:313;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;36323:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26683:300;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28677:2113;;;;;;;;;;;;;:::i;:::-;;24014:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25276:94;25335:4;25358;25351:11;;25276:94;;;:::o;23475:21::-;;;;;;;;;;;;;:::o;33416:374::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33527:8:::1;:21;;;:28;33501:8;:15;;;:22;:54;33493:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;33608:9;33603:145;33627:8;:15;;;:22;33623:1;:26;33603:145;;;33706:1;33679:8;:21;;;33701:1;33679:24;;;;;;;;;;;;;;:28;33671:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33651:3;;;;;;;33603:145;;;;33774:8;33760:11;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;33416:374:::0;:::o;23855:23::-;;;;;;;;;:::o;23887:26::-;;;;;;;;;;;;;:::o;31365:539::-;31446:14;31462:13;31477:17;31496:16;31545:4;31533:16;;:8;:16;;;;31525:25;;;;;;31561:23;;:::i;:::-;31587:26;:36;31614:8;31587:36;;;;;;;;;;;;;;;31561:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31639:4;:12;;;31634:91;;31675:26;:38;31710:1;31675:38;;;;;;;;;;;;;;;31668:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31634:91;31757:4;:14;;;31745:26;;31797:4;:10;;;31782:25;;31832:14;:24;31847:8;31832:24;;;;;;;;;;;;;;;;31818:38;;31878:4;:11;;;:18;31867:29;;31365:539;;;;;;;;:::o;24074:46::-;;;;;;;;;;;;;;;;;:::o;23922:24::-;;;;;;;;;;;;;:::o;23396:28::-;;;;;;;;;;;;;:::o;34481:174::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;34588:1:::1;34567:23;;:9;:23;;;;34559:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34638:9;34630:5;;:17;;;;;;;;;;;;;;;;;;34481:174:::0;:::o;34197:169::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;34297:1:::1;34275:24;;:10;:24;;;;34267:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34348:10;34339:6;;:19;;;;;;;;;;;;;;;;;;34197:169:::0;:::o;32354:443::-;32452:13;32467:16;32516:4;32504:16;;:8;:16;;;;32496:25;;;;;;32532:23;;:::i;:::-;32558:26;:36;32585:8;32558:36;;;;;;;;;;;;;;;32532:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32610:4;:12;;;32605:91;;32646:26;:38;32681:1;32646:38;;;;;;;;;;;;;;;32639:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32605:91;32724:4;:11;;;32736:4;32724:17;;;;;;;;;;;;;;32716:25;;32766:4;:17;;;32784:4;32766:23;;;;;;;;;;;;;;32752:37;;32354:443;;;;;;;:::o;35098:981::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;35401:4:::1;35389:16;;:8;:16;;;;35381:25;;;::::0;::::1;;35449:11;;:18;;35427:11;;:18;;:40;35419:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35530:13;;:20;;35512:7;;:14;;:38;35504:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;35602:9;35597:475;35621:11;;:18;;35617:1;:22;35597:475;;;35661:12;35702:1:::0;35676:28:::1;;:11;;35688:1;35676:14;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;;;35661:43;;35733:23;;:::i;:::-;35759:223;;;;;;;;35799:7;35759:223;;;;;;35836:10;35759:223;;;;35913:7;;35759:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35953:13;;35759:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35872:11;;35884:1;35872:14;;;;;;;;;;;;;35759:223;;::::0;35733:249:::1;;36056:4;36011:26;:42;36038:11;;36050:1;36038:14;;;;;;;;;;;;;;;;;;;;:::i;:::-;36011:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35597:475;;35641:3;;;;;;;35597:475;;;;35098:981:::0;;;;;;;;;;:::o;36607:110::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36699:9:::1;36677:8;;:32;;;;;;;;;;;;;;;;;;36607:110:::0;:::o;27539:1130::-;2431:14;;;;;;;;;;2430:15;2422:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;2502:4;2485:14;;:21;;;;;;;;;;;;;;;;;;27666:5:::1;;;;;;;;;;;27665:6;27657:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;27715:6;;;;;;;;;;;27701:20;;:10;:20;;;27693:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27771:12;27757:26;;:10;:26;;;;27749:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;27855:16;;:::i;:::-;27874:11;27855:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;28038:9;28033:266;28057:4;:11;;;:18;28053:1;:22;28033:266;;;28097:16;28127:4;:11;;;28139:1;28127:14;;;;;;;;;;;;;;28097:45;;28157:14;28174:4;:17;;;28192:1;28174:20;;;;;;;;;;;;;;28157:37;;28217:5;:14;;;28232:10;28244:6;28217:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28209:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28033:266;;28077:3;;;;;;;28033:266;;;;28385:12;28403:10;:15;;28425:4;:14;;;28403:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28384:60;;;28463:7;28455:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;28536:12;28512:37;;28524:10;28512:37;;;;;;;;;;;;28590:1;28566:26;;:12;:26;;;28562:39;;;28594:7;;;;28562:39;28660:1;28621:21;:35;28643:12;28621:35;;;;;;;;;;;;;;;;:40;;;;;;;;;;;2551:1;;;2580:5:::0;2563:14;;:22;;;;;;;;;;;;;;;;;;27539:1130;;:::o;33942:137::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;34026:4:::1;34018:5;;:12;;;;;;;;;;;;;;;;;;34041:30;34056:7;;34041:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34065:5;;;;;;;;;;;34041:14;:30::i;:::-;33942:137:::0;;:::o;33155:83::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33224:6:::1;33216:5;;:14;;;;;;;;;;;;;;;;;;33155:83:::0;:::o;25839:313::-;25887:21;25910:17;25929:23;25954:26;25982:28;26035:11;:21;;;26023:33;;26076:11;:18;;26067:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26120:11;:24;;26105:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25839:313;;;;;:::o;36323:243::-;24784:5;;;;;;;;;;;24770:19;;:10;:19;;;24762:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36439:9:::1;36434:125;36458:11;;:18;;36454:1;:22;36434:125;;;36505:26;:42;36532:11;;36544:1;36532:14;;;;;;;;;;;;;;;;;;;;:::i;:::-;36505:42;;;;;;;;;;;;;;;;36498:49:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;36478:3;;;;;;;36434:125;;;;36323:243:::0;;;:::o;26683:300::-;26729:21;26752:17;26771:23;26796:26;26824:28;26854:17;26683:300;;;;;;:::o;28677:2113::-;28738:5;;;;;;;;;;;28737:6;28729:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;28775:24;28802:21;:33;28824:10;28802:33;;;;;;;;;;;;;;;;28775:60;;28846:21;28870:14;:26;28885:10;28870:26;;;;;;;;;;;;;;;;28846:50;;28936:1;28913:19;:24;28909:37;;;28939:7;;;;28909:37;28958:23;;:::i;:::-;28984:26;:38;29011:10;28984:38;;;;;;;;;;;;;;;28958:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29038:4;:12;;;29033:90;;29073:26;:38;29108:1;29073:38;;;;;;;;;;;;;;;29066:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29033:90;29135:18;29164;29193:22;29272:4;:10;;;29249:19;29230:16;:38;29229:53;29226:578;;;29303:27;29319:10;29303:27;;;;;;:::i;:::-;;;;;;;;29367:4;:10;;;29348:16;:29;29345:179;;;29430:16;29417:4;:10;;;:29;29397:49;;29345:179;;;29507:1;29487:21;;29345:179;29558:17;29538:37;;;;29613:17;29590:40;;;;29226:578;;;29683:19;29663:39;;29737:17;29717:37;;;;29791:1;29769:23;;29226:578;29853:4;:14;;;29833:17;:34;29816:51;;;;29885:9;29880:427;29904:4;:11;;;:18;29900:1;:22;29880:427;;;29973:8;;;;;;;;;;;29947:35;;:4;:11;;;29959:1;29947:14;;;;;;;;;;;;;;:35;;;29944:352;;;30039:4;:17;;;30057:1;30039:20;;;;;;;;;;;;;;30019:17;:40;30002:57;;;;29944:352;;;30100:16;30130:4;:11;;;30142:1;30130:14;;;;;;;;;;;;;;30100:45;;30164:14;30201:4;:17;;;30219:1;30201:20;;;;;;;;;;;;;;30181:17;:40;30164:57;;30240:40;30254:5;30261:10;30273:6;30240:13;:40::i;:::-;29944:352;;;29924:3;;;;;;;29880:427;;;;30355:19;30319:21;:33;30341:10;30319:33;;;;;;;;;;;;;;;:55;;;;30414:16;30385:14;:26;30400:10;30385:26;;;;;;;;;;;;;;;:45;;;;30464:1;30447:13;:18;30443:177;;30496:12;30514:10;:15;;30536:13;30514:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30495:59;;;30577:7;30569:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;30443:177;;30653:1;30636:13;:18;30632:151;;30670:16;30700:8;;;;;;;;;;;30670:39;;30724:47;30738:5;30745:10;30757:13;30724;:47::i;:::-;30632:151;;28677:2113;;;;;;;:::o;24014:53::-;;;;;;;;;;;;;;;;;:::o;22038:277::-;22177:8;22188:7;:14;22177:25;;22217:6;22213:95;22233:3;22229:1;:7;22213:95;;;22257:39;22271:7;22279:1;22271:10;;;;;;;;;;;;;;22283:12;22257:13;:39::i;:::-;22238:3;;;;;;;22213:95;;;;22038:277;;;:::o;18467:182::-;18555:86;18575:5;18605:23;;;18630:2;18634:5;18582:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18555:19;:86::i;:::-;18467:182;;;:::o;22529:523::-;22632:15;22680:1;22662:20;;:6;:20;;;22658:387;;;22709:21;22699:31;;22746:12;22764;:17;;22788:7;22764:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22745:55;;;22823:7;22815:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;22658:387;;;;22883:16;22913:6;22883:37;;22945:5;:15;;;22969:4;22945:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22935:40;;22990:43;23004:5;23011:12;23025:7;22990:13;:43::i;:::-;22658:387;;22529:523;;;:::o;19262:1128::-;19871:27;19891:5;19871:11;:27::i;:::-;19863:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20011:12;20025:23;20060:5;20052:19;;20072:4;20052:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20010:67;;;;20096:7;20088:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;20180:1;20160:10;:17;:21;20156:227;;;20302:10;20291:30;;;;;;;;;;;;:::i;:::-;20283:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;20156:227;19262:1128;;;;:::o;20985:620::-;21046:4;21308:16;21335:19;21357:66;21335:88;;;;21526:7;21514:20;21502:32;;21566:11;21554:8;:23;;:42;;;;;21593:3;21581:15;;:8;:15;;21554:42;21546:51;;;;20985:620;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:146::-;;230:6;217:20;208:29;;242:41;277:5;242:41;:::i;:::-;202:86;;;;:::o;313:352::-;;;443:3;436:4;428:6;424:17;420:27;410:2;;461:1;458;451:12;410:2;494:6;481:20;471:30;;521:18;513:6;510:30;507:2;;;553:1;550;543:12;507:2;587:4;579:6;575:17;563:29;;638:3;630:4;622:6;618:17;608:8;604:32;601:41;598:2;;;655:1;652;645:12;598:2;403:262;;;;;:::o;691:707::-;;808:3;801:4;793:6;789:17;785:27;775:2;;826:1;823;816:12;775:2;863:6;850:20;885:80;900:64;957:6;900:64;:::i;:::-;885:80;:::i;:::-;876:89;;982:5;1007:6;1000:5;993:21;1037:4;1029:6;1025:17;1015:27;;1059:4;1054:3;1050:14;1043:21;;1112:6;1159:3;1151:4;1143:6;1139:17;1134:3;1130:27;1127:36;1124:2;;;1176:1;1173;1166:12;1124:2;1201:1;1186:206;1211:6;1208:1;1205:13;1186:206;;;1269:3;1291:37;1324:3;1312:10;1291:37;:::i;:::-;1286:3;1279:50;1352:4;1347:3;1343:14;1336:21;;1380:4;1375:3;1371:14;1364:21;;1243:149;1233:1;1230;1226:9;1221:14;;1186:206;;;1190:14;768:630;;;;;;;:::o;1424:352::-;;;1554:3;1547:4;1539:6;1535:17;1531:27;1521:2;;1572:1;1569;1562:12;1521:2;1605:6;1592:20;1582:30;;1632:18;1624:6;1621:30;1618:2;;;1664:1;1661;1654:12;1618:2;1698:4;1690:6;1686:17;1674:29;;1749:3;1741:4;1733:6;1729:17;1719:8;1715:32;1712:41;1709:2;;;1766:1;1763;1756:12;1709:2;1514:262;;;;;:::o;1802:707::-;;1919:3;1912:4;1904:6;1900:17;1896:27;1886:2;;1937:1;1934;1927:12;1886:2;1974:6;1961:20;1996:80;2011:64;2068:6;2011:64;:::i;:::-;1996:80;:::i;:::-;1987:89;;2093:5;2118:6;2111:5;2104:21;2148:4;2140:6;2136:17;2126:27;;2170:4;2165:3;2161:14;2154:21;;2223:6;2270:3;2262:4;2254:6;2250:17;2245:3;2241:27;2238:36;2235:2;;;2287:1;2284;2277:12;2235:2;2312:1;2297:206;2322:6;2319:1;2316:13;2297:206;;;2380:3;2402:37;2435:3;2423:10;2402:37;:::i;:::-;2397:3;2390:50;2463:4;2458:3;2454:14;2447:21;;2491:4;2486:3;2482:14;2475:21;;2354:149;2344:1;2341;2337:9;2332:14;;2297:206;;;2301:14;1879:630;;;;;;;:::o;2517:124::-;;2594:6;2581:20;2572:29;;2606:30;2630:5;2606:30;:::i;:::-;2566:75;;;;:::o;2648:128::-;;2729:6;2723:13;2714:22;;2741:30;2765:5;2741:30;:::i;:::-;2708:68;;;;:::o;2823:844::-;;2933:4;2921:9;2916:3;2912:19;2908:30;2905:2;;;2951:1;2948;2941:12;2905:2;2969:20;2984:4;2969:20;:::i;:::-;2960:29;;3044:1;3076:49;3121:3;3112:6;3101:9;3097:22;3076:49;:::i;:::-;3069:4;3062:5;3058:16;3051:75;2999:138;3217:2;3206:9;3202:18;3189:32;3241:18;3233:6;3230:30;3227:2;;;3273:1;3270;3263:12;3227:2;3308:74;3378:3;3369:6;3358:9;3354:22;3308:74;:::i;:::-;3301:4;3294:5;3290:16;3283:100;3147:247;3480:2;3469:9;3465:18;3452:32;3504:18;3496:6;3493:30;3490:2;;;3536:1;3533;3526:12;3490:2;3571:74;3641:3;3632:6;3621:9;3617:22;3571:74;:::i;:::-;3564:4;3557:5;3553:16;3546:100;3404:253;2899:768;;;;:::o;3674:130::-;;3754:6;3741:20;3732:29;;3766:33;3793:5;3766:33;:::i;:::-;3726:78;;;;:::o;3811:134::-;;3895:6;3889:13;3880:22;;3907:33;3934:5;3907:33;:::i;:::-;3874:71;;;;:::o;3952:241::-;;4056:2;4044:9;4035:7;4031:23;4027:32;4024:2;;;4072:1;4069;4062:12;4024:2;4107:1;4124:53;4169:7;4160:6;4149:9;4145:22;4124:53;:::i;:::-;4114:63;;4086:97;4018:175;;;;:::o;4200:257::-;;4312:2;4300:9;4291:7;4287:23;4283:32;4280:2;;;4328:1;4325;4318:12;4280:2;4363:1;4380:61;4433:7;4424:6;4413:9;4409:22;4380:61;:::i;:::-;4370:71;;4342:105;4274:183;;;;:::o;4464:398::-;;;4601:2;4589:9;4580:7;4576:23;4572:32;4569:2;;;4617:1;4614;4607:12;4569:2;4652:1;4669:61;4722:7;4713:6;4702:9;4698:22;4669:61;:::i;:::-;4659:71;;4631:105;4767:2;4785:61;4838:7;4829:6;4818:9;4814:22;4785:61;:::i;:::-;4775:71;;4746:106;4563:299;;;;;:::o;4869:360::-;;;4987:2;4975:9;4966:7;4962:23;4958:32;4955:2;;;5003:1;5000;4993:12;4955:2;5038:1;5055:53;5100:7;5091:6;5080:9;5076:22;5055:53;:::i;:::-;5045:63;;5017:97;5145:2;5163:50;5205:7;5196:6;5185:9;5181:22;5163:50;:::i;:::-;5153:60;;5124:95;4949:280;;;;;:::o;5236:485::-;;;;5371:2;5359:9;5350:7;5346:23;5342:32;5339:2;;;5387:1;5384;5377:12;5339:2;5422:1;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5401:97;5529:2;5547:50;5589:7;5580:6;5569:9;5565:22;5547:50;:::i;:::-;5537:60;;5508:95;5634:2;5652:53;5697:7;5688:6;5677:9;5673:22;5652:53;:::i;:::-;5642:63;;5613:98;5333:388;;;;;:::o;5728:397::-;;;5867:2;5855:9;5846:7;5842:23;5838:32;5835:2;;;5883:1;5880;5873:12;5835:2;5946:1;5935:9;5931:17;5918:31;5969:18;5961:6;5958:30;5955:2;;;6001:1;5998;5991:12;5955:2;6029:80;6101:7;6092:6;6081:9;6077:22;6029:80;:::i;:::-;6011:98;;;;5897:218;5829:296;;;;;:::o;6132:516::-;;;;6285:2;6273:9;6264:7;6260:23;6256:32;6253:2;;;6301:1;6298;6291:12;6253:2;6364:1;6353:9;6349:17;6336:31;6387:18;6379:6;6376:30;6373:2;;;6419:1;6416;6409:12;6373:2;6447:80;6519:7;6510:6;6499:9;6495:22;6447:80;:::i;:::-;6429:98;;;;6315:218;6564:2;6582:50;6624:7;6615:6;6604:9;6600:22;6582:50;:::i;:::-;6572:60;;6543:95;6247:401;;;;;:::o;6655:235::-;;6756:2;6744:9;6735:7;6731:23;6727:32;6724:2;;;6772:1;6769;6762:12;6724:2;6807:1;6824:50;6866:7;6857:6;6846:9;6842:22;6824:50;:::i;:::-;6814:60;;6786:94;6718:172;;;;:::o;6897:257::-;;7009:2;6997:9;6988:7;6984:23;6980:32;6977:2;;;7025:1;7022;7015:12;6977:2;7060:1;7077:61;7130:7;7121:6;7110:9;7106:22;7077:61;:::i;:::-;7067:71;;7039:105;6971:183;;;;:::o;7161:1487::-;;;;;;;;;;;7487:3;7475:9;7466:7;7462:23;7458:33;7455:2;;;7504:1;7501;7494:12;7455:2;7539:1;7556:50;7598:7;7589:6;7578:9;7574:22;7556:50;:::i;:::-;7546:60;;7518:94;7643:2;7661:53;7706:7;7697:6;7686:9;7682:22;7661:53;:::i;:::-;7651:63;;7622:98;7779:2;7768:9;7764:18;7751:32;7803:18;7795:6;7792:30;7789:2;;;7835:1;7832;7825:12;7789:2;7863:80;7935:7;7926:6;7915:9;7911:22;7863:80;:::i;:::-;7845:98;;;;7730:219;8008:2;7997:9;7993:18;7980:32;8032:18;8024:6;8021:30;8018:2;;;8064:1;8061;8054:12;8018:2;8092:80;8164:7;8155:6;8144:9;8140:22;8092:80;:::i;:::-;8074:98;;;;7959:219;8237:3;8226:9;8222:19;8209:33;8262:18;8254:6;8251:30;8248:2;;;8294:1;8291;8284:12;8248:2;8322:80;8394:7;8385:6;8374:9;8370:22;8322:80;:::i;:::-;8304:98;;;;8188:220;8467:3;8456:9;8452:19;8439:33;8492:18;8484:6;8481:30;8478:2;;;8524:1;8521;8514:12;8478:2;8552:80;8624:7;8615:6;8604:9;8600:22;8552:80;:::i;:::-;8534:98;;;;8418:220;7449:1199;;;;;;;;;;;;;:::o;8655:369::-;;8780:2;8768:9;8759:7;8755:23;8751:32;8748:2;;;8796:1;8793;8786:12;8748:2;8859:1;8848:9;8844:17;8831:31;8882:18;8874:6;8871:30;8868:2;;;8914:1;8911;8904:12;8868:2;8934:74;9000:7;8991:6;8980:9;8976:22;8934:74;:::i;:::-;8924:84;;8810:204;8742:282;;;;:::o;9031:263::-;;9146:2;9134:9;9125:7;9121:23;9117:32;9114:2;;;9162:1;9159;9152:12;9114:2;9197:1;9214:64;9270:7;9261:6;9250:9;9246:22;9214:64;:::i;:::-;9204:74;;9176:108;9108:186;;;;:::o;9302:173::-;;9389:46;9431:3;9423:6;9389:46;:::i;:::-;9464:4;9459:3;9455:14;9441:28;;9382:93;;;;:::o;9484:173::-;;9571:46;9613:3;9605:6;9571:46;:::i;:::-;9646:4;9641:3;9637:14;9623:28;;9564:93;;;;:::o;9665:142::-;9756:45;9795:5;9756:45;:::i;:::-;9751:3;9744:58;9738:69;;:::o;9814:137::-;9913:32;9939:5;9913:32;:::i;:::-;9908:3;9901:45;9895:56;;:::o;9958:103::-;10031:24;10049:5;10031:24;:::i;:::-;10026:3;10019:37;10013:48;;:::o;10068:113::-;10151:24;10169:5;10151:24;:::i;:::-;10146:3;10139:37;10133:48;;:::o;10219:690::-;;10364:54;10412:5;10364:54;:::i;:::-;10431:86;10510:6;10505:3;10431:86;:::i;:::-;10424:93;;10538:56;10588:5;10538:56;:::i;:::-;10614:7;10642:1;10627:260;10652:6;10649:1;10646:13;10627:260;;;10719:6;10713:13;10740:63;10799:3;10784:13;10740:63;:::i;:::-;10733:70;;10820:60;10873:6;10820:60;:::i;:::-;10810:70;;10684:203;10674:1;10671;10667:9;10662:14;;10627:260;;;10631:14;10900:3;10893:10;;10343:566;;;;;;;:::o;10948:690::-;;11093:54;11141:5;11093:54;:::i;:::-;11160:86;11239:6;11234:3;11160:86;:::i;:::-;11153:93;;11267:56;11317:5;11267:56;:::i;:::-;11343:7;11371:1;11356:260;11381:6;11378:1;11375:13;11356:260;;;11448:6;11442:13;11469:63;11528:3;11513:13;11469:63;:::i;:::-;11462:70;;11549:60;11602:6;11549:60;:::i;:::-;11539:70;;11413:203;11403:1;11400;11396:9;11391:14;;11356:260;;;11360:14;11629:3;11622:10;;11072:566;;;;;;;:::o;11646:104::-;11723:21;11738:5;11723:21;:::i;:::-;11718:3;11711:34;11705:45;;:::o;11757:356::-;;11885:38;11917:5;11885:38;:::i;:::-;11935:88;12016:6;12011:3;11935:88;:::i;:::-;11928:95;;12028:52;12073:6;12068:3;12061:4;12054:5;12050:16;12028:52;:::i;:::-;12101:6;12096:3;12092:16;12085:23;;11865:248;;;;;:::o;12120:160::-;12220:54;12268:5;12220:54;:::i;:::-;12215:3;12208:67;12202:78;;:::o;12288:372::-;;12448:67;12512:2;12507:3;12448:67;:::i;:::-;12441:74;;12548:34;12544:1;12539:3;12535:11;12528:55;12617:5;12612:2;12607:3;12603:12;12596:27;12651:2;12646:3;12642:12;12635:19;;12434:226;;;:::o;12669:305::-;;12829:66;12893:1;12888:3;12829:66;:::i;:::-;12822:73;;12928:8;12924:1;12919:3;12915:11;12908:29;12965:2;12960:3;12956:12;12949:19;;12815:159;;;:::o;12983:371::-;;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13243:34;13239:1;13234:3;13230:11;13223:55;13312:4;13307:2;13302:3;13298:12;13291:26;13345:2;13340:3;13336:12;13329:19;;13129:225;;;:::o;13363:324::-;;13523:67;13587:2;13582:3;13523:67;:::i;:::-;13516:74;;13623:26;13619:1;13614:3;13610:11;13603:47;13678:2;13673:3;13669:12;13662:19;;13509:178;;;:::o;13696:321::-;;13856:67;13920:2;13915:3;13856:67;:::i;:::-;13849:74;;13956:23;13952:1;13947:3;13943:11;13936:44;14008:2;14003:3;13999:12;13992:19;;13842:175;;;:::o;14026:312::-;;14186:67;14250:2;14245:3;14186:67;:::i;:::-;14179:74;;14286:14;14282:1;14277:3;14273:11;14266:35;14329:2;14324:3;14320:12;14313:19;;14172:166;;;:::o;14347:315::-;;14507:67;14571:2;14566:3;14507:67;:::i;:::-;14500:74;;14607:17;14603:1;14598:3;14594:11;14587:38;14653:2;14648:3;14644:12;14637:19;;14493:169;;;:::o;14671:324::-;;14831:67;14895:2;14890:3;14831:67;:::i;:::-;14824:74;;14931:26;14927:1;14922:3;14918:11;14911:47;14986:2;14981:3;14977:12;14970:19;;14817:178;;;:::o;15004:382::-;;15164:67;15228:2;15223:3;15164:67;:::i;:::-;15157:74;;15264:34;15260:1;15255:3;15251:11;15244:55;15333:15;15328:2;15323:3;15319:12;15312:37;15377:2;15372:3;15368:12;15361:19;;15150:236;;;:::o;15395:324::-;;15555:67;15619:2;15614:3;15555:67;:::i;:::-;15548:74;;15655:26;15651:1;15646:3;15642:11;15635:47;15710:2;15705:3;15701:12;15694:19;;15541:178;;;:::o;15728:319::-;;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15988:21;15984:1;15979:3;15975:11;15968:42;16038:2;16033:3;16029:12;16022:19;;15874:173;;;:::o;16056:331::-;;16216:67;16280:2;16275:3;16216:67;:::i;:::-;16209:74;;16316:33;16312:1;16307:3;16303:11;16296:54;16378:2;16373:3;16369:12;16362:19;;16202:185;;;:::o;16396:330::-;;16556:67;16620:2;16615:3;16556:67;:::i;:::-;16549:74;;16656:32;16652:1;16647:3;16643:11;16636:53;16717:2;16712:3;16708:12;16701:19;;16542:184;;;:::o;16735:296::-;;16912:83;16993:1;16988:3;16912:83;:::i;:::-;16905:90;;17023:1;17018:3;17014:11;17007:18;;16898:133;;;:::o;17040:391::-;;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17300:34;17296:1;17291:3;17287:11;17280:55;17369:24;17364:2;17359:3;17355:12;17348:46;17422:2;17417:3;17413:12;17406:19;;17186:245;;;:::o;17439:103::-;17512:24;17530:5;17512:24;:::i;:::-;17507:3;17500:37;17494:48;;:::o;17549:113::-;17632:24;17650:5;17632:24;:::i;:::-;17627:3;17620:37;17614:48;;:::o;17669:271::-;;17822:93;17911:3;17902:6;17822:93;:::i;:::-;17815:100;;17932:3;17925:10;;17803:137;;;;:::o;17947:379::-;;18154:147;18297:3;18154:147;:::i;:::-;18147:154;;18318:3;18311:10;;18135:191;;;:::o;18333:222::-;;18460:2;18449:9;18445:18;18437:26;;18474:71;18542:1;18531:9;18527:17;18518:6;18474:71;:::i;:::-;18431:124;;;;:::o;18562:238::-;;18697:2;18686:9;18682:18;18674:26;;18711:79;18787:1;18776:9;18772:17;18763:6;18711:79;:::i;:::-;18668:132;;;;:::o;18807:254::-;;18950:2;18939:9;18935:18;18927:26;;18964:87;19048:1;19037:9;19033:17;19024:6;18964:87;:::i;:::-;18921:140;;;;:::o;19068:349::-;;19231:2;19220:9;19216:18;19208:26;;19245:79;19321:1;19310:9;19306:17;19297:6;19245:79;:::i;:::-;19335:72;19403:2;19392:9;19388:18;19379:6;19335:72;:::i;:::-;19202:215;;;;;:::o;19424:333::-;;19579:2;19568:9;19564:18;19556:26;;19593:71;19661:1;19650:9;19646:17;19637:6;19593:71;:::i;:::-;19675:72;19743:2;19732:9;19728:18;19719:6;19675:72;:::i;:::-;19550:207;;;;;:::o;19764:1112::-;;20153:3;20142:9;20138:19;20130:27;;20168:71;20236:1;20225:9;20221:17;20212:6;20168:71;:::i;:::-;20250:72;20318:2;20307:9;20303:18;20294:6;20250:72;:::i;:::-;20370:9;20364:4;20360:20;20355:2;20344:9;20340:18;20333:48;20395:108;20498:4;20489:6;20395:108;:::i;:::-;20387:116;;20551:9;20545:4;20541:20;20536:2;20525:9;20521:18;20514:48;20576:108;20679:4;20670:6;20576:108;:::i;:::-;20568:116;;20733:9;20727:4;20723:20;20717:3;20706:9;20702:19;20695:49;20758:108;20861:4;20852:6;20758:108;:::i;:::-;20750:116;;20124:752;;;;;;;;:::o;20883:1224::-;;21300:3;21289:9;21285:19;21277:27;;21315:71;21383:1;21372:9;21368:17;21359:6;21315:71;:::i;:::-;21397:72;21465:2;21454:9;21450:18;21441:6;21397:72;:::i;:::-;21517:9;21511:4;21507:20;21502:2;21491:9;21487:18;21480:48;21542:108;21645:4;21636:6;21542:108;:::i;:::-;21534:116;;21698:9;21692:4;21688:20;21683:2;21672:9;21668:18;21661:48;21723:108;21826:4;21817:6;21723:108;:::i;:::-;21715:116;;21880:9;21874:4;21870:20;21864:3;21853:9;21849:19;21842:49;21905:108;22008:4;21999:6;21905:108;:::i;:::-;21897:116;;22024:73;22092:3;22081:9;22077:19;22068:6;22024:73;:::i;:::-;21271:836;;;;;;;;;:::o;22114:210::-;;22235:2;22224:9;22220:18;22212:26;;22249:65;22311:1;22300:9;22296:17;22287:6;22249:65;:::i;:::-;22206:118;;;;:::o;22331:256::-;;22475:2;22464:9;22460:18;22452:26;;22489:88;22574:1;22563:9;22559:17;22550:6;22489:88;:::i;:::-;22446:141;;;;:::o;22594:416::-;;22794:2;22783:9;22779:18;22771:26;;22844:9;22838:4;22834:20;22830:1;22819:9;22815:17;22808:47;22869:131;22995:4;22869:131;:::i;:::-;22861:139;;22765:245;;;:::o;23017:416::-;;23217:2;23206:9;23202:18;23194:26;;23267:9;23261:4;23257:20;23253:1;23242:9;23238:17;23231:47;23292:131;23418:4;23292:131;:::i;:::-;23284:139;;23188:245;;;:::o;23440:416::-;;23640:2;23629:9;23625:18;23617:26;;23690:9;23684:4;23680:20;23676:1;23665:9;23661:17;23654:47;23715:131;23841:4;23715:131;:::i;:::-;23707:139;;23611:245;;;:::o;23863:416::-;;24063:2;24052:9;24048:18;24040:26;;24113:9;24107:4;24103:20;24099:1;24088:9;24084:17;24077:47;24138:131;24264:4;24138:131;:::i;:::-;24130:139;;24034:245;;;:::o;24286:416::-;;24486:2;24475:9;24471:18;24463:26;;24536:9;24530:4;24526:20;24522:1;24511:9;24507:17;24500:47;24561:131;24687:4;24561:131;:::i;:::-;24553:139;;24457:245;;;:::o;24709:416::-;;24909:2;24898:9;24894:18;24886:26;;24959:9;24953:4;24949:20;24945:1;24934:9;24930:17;24923:47;24984:131;25110:4;24984:131;:::i;:::-;24976:139;;24880:245;;;:::o;25132:416::-;;25332:2;25321:9;25317:18;25309:26;;25382:9;25376:4;25372:20;25368:1;25357:9;25353:17;25346:47;25407:131;25533:4;25407:131;:::i;:::-;25399:139;;25303:245;;;:::o;25555:416::-;;25755:2;25744:9;25740:18;25732:26;;25805:9;25799:4;25795:20;25791:1;25780:9;25776:17;25769:47;25830:131;25956:4;25830:131;:::i;:::-;25822:139;;25726:245;;;:::o;25978:416::-;;26178:2;26167:9;26163:18;26155:26;;26228:9;26222:4;26218:20;26214:1;26203:9;26199:17;26192:47;26253:131;26379:4;26253:131;:::i;:::-;26245:139;;26149:245;;;:::o;26401:416::-;;26601:2;26590:9;26586:18;26578:26;;26651:9;26645:4;26641:20;26637:1;26626:9;26622:17;26615:47;26676:131;26802:4;26676:131;:::i;:::-;26668:139;;26572:245;;;:::o;26824:416::-;;27024:2;27013:9;27009:18;27001:26;;27074:9;27068:4;27064:20;27060:1;27049:9;27045:17;27038:47;27099:131;27225:4;27099:131;:::i;:::-;27091:139;;26995:245;;;:::o;27247:416::-;;27447:2;27436:9;27432:18;27424:26;;27497:9;27491:4;27487:20;27483:1;27472:9;27468:17;27461:47;27522:131;27648:4;27522:131;:::i;:::-;27514:139;;27418:245;;;:::o;27670:416::-;;27870:2;27859:9;27855:18;27847:26;;27920:9;27914:4;27910:20;27906:1;27895:9;27891:17;27884:47;27945:131;28071:4;27945:131;:::i;:::-;27937:139;;27841:245;;;:::o;28093:416::-;;28293:2;28282:9;28278:18;28270:26;;28343:9;28337:4;28333:20;28329:1;28318:9;28314:17;28307:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28264:245;;;:::o;28516:222::-;;28643:2;28632:9;28628:18;28620:26;;28657:71;28725:1;28714:9;28710:17;28701:6;28657:71;:::i;:::-;28614:124;;;;:::o;28745:556::-;;28956:3;28945:9;28941:19;28933:27;;28971:71;29039:1;29028:9;29024:17;29015:6;28971:71;:::i;:::-;29053:72;29121:2;29110:9;29106:18;29097:6;29053:72;:::i;:::-;29136;29204:2;29193:9;29189:18;29180:6;29136:72;:::i;:::-;29219;29287:2;29276:9;29272:18;29263:6;29219:72;:::i;:::-;28927:374;;;;;;;:::o;29308:256::-;;29370:2;29364:9;29354:19;;29408:4;29400:6;29396:17;29507:6;29495:10;29492:22;29471:18;29459:10;29456:34;29453:62;29450:2;;;29528:1;29525;29518:12;29450:2;29548:10;29544:2;29537:22;29348:216;;;;:::o;29571:304::-;;29730:18;29722:6;29719:30;29716:2;;;29762:1;29759;29752:12;29716:2;29797:4;29789:6;29785:17;29777:25;;29860:4;29854;29850:15;29842:23;;29653:222;;;:::o;29882:304::-;;30041:18;30033:6;30030:30;30027:2;;;30073:1;30070;30063:12;30027:2;30108:4;30100:6;30096:17;30088:25;;30171:4;30165;30161:15;30153:23;;29964:222;;;:::o;30193:151::-;;30279:3;30271:11;;30317:4;30312:3;30308:14;30300:22;;30265:79;;;:::o;30351:151::-;;30437:3;30429:11;;30475:4;30470:3;30466:14;30458:22;;30423:79;;;:::o;30509:137::-;;30618:5;30612:12;30602:22;;30583:63;;;:::o;30653:137::-;;30762:5;30756:12;30746:22;;30727:63;;;:::o;30797:121::-;;30890:5;30884:12;30874:22;;30855:63;;;:::o;30925:108::-;;31023:4;31018:3;31014:14;31006:22;;31000:33;;;:::o;31040:108::-;;31138:4;31133:3;31129:14;31121:22;;31115:33;;;:::o;31156:178::-;;31286:6;31281:3;31274:19;31323:4;31318:3;31314:14;31299:29;;31267:67;;;;:::o;31343:178::-;;31473:6;31468:3;31461:19;31510:4;31505:3;31501:14;31486:29;;31454:67;;;;:::o;31530:144::-;;31665:3;31650:18;;31643:31;;;;:::o;31683:163::-;;31798:6;31793:3;31786:19;31835:4;31830:3;31826:14;31811:29;;31779:67;;;;:::o;31854:91::-;;31916:24;31934:5;31916:24;:::i;:::-;31905:35;;31899:46;;;:::o;31952:99::-;;32022:24;32040:5;32022:24;:::i;:::-;32011:35;;32005:46;;;:::o;32058:85::-;;32131:5;32124:13;32117:21;32106:32;;32100:43;;;:::o;32150:121::-;;32223:42;32216:5;32212:54;32201:65;;32195:76;;;:::o;32278:72::-;;32340:5;32329:16;;32323:27;;;:::o;32357:129::-;;32444:37;32475:5;32444:37;:::i;:::-;32431:50;;32425:61;;;:::o;32493:155::-;;32589:54;32637:5;32589:54;:::i;:::-;32576:67;;32570:78;;;:::o;32655:125::-;;32751:24;32769:5;32751:24;:::i;:::-;32738:37;;32732:48;;;:::o;32787:121::-;;32866:37;32897:5;32866:37;:::i;:::-;32853:50;;32847:61;;;:::o;32915:108::-;;32994:24;33012:5;32994:24;:::i;:::-;32981:37;;32975:48;;;:::o;33031:268::-;33096:1;33103:101;33117:6;33114:1;33111:13;33103:101;;;33193:1;33188:3;33184:11;33178:18;33174:1;33169:3;33165:11;33158:39;33139:2;33136:1;33132:10;33127:15;;33103:101;;;33219:6;33216:1;33213:13;33210:2;;;33284:1;33275:6;33270:3;33266:16;33259:27;33210:2;33080:219;;;;:::o;33307:117::-;33376:24;33394:5;33376:24;:::i;:::-;33369:5;33366:35;33356:2;;33415:1;33412;33405:12;33356:2;33350:74;:::o;33431:133::-;33508:32;33534:5;33508:32;:::i;:::-;33501:5;33498:43;33488:2;;33555:1;33552;33545:12;33488:2;33482:82;:::o;33571:111::-;33637:21;33652:5;33637:21;:::i;:::-;33630:5;33627:32;33617:2;;33673:1;33670;33663:12;33617:2;33611:71;:::o;33689:117::-;33758:24;33776:5;33758:24;:::i;:::-;33751:5;33748:35;33738:2;;33797:1;33794;33787:12;33738:2;33732:74;:::o

Swarm Source

ipfs://24adca062b7dce5bc4b48fa52b94f67e6f6dda1be6b39e4c8bb44dc29292fb25

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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