ETH Price: $2,624.15 (-0.69%)

Token

BTU Incentivized DAI (bDAI)
 

Overview

Max Total Supply

54.761638405266965714 bDAI

Holders

31 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
juglas.eth
Balance
1 bDAI

Value
$0.00
0x476e2651bf97de8a26e4a05a9c8e00a6efa1390c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

bDAI is a stable coin that automatically rewards in BTU when you use it. Rewards are based on DSR, currently 7.75% per year.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Bdai

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 2048 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-03
*/

pragma solidity ^0.5.12;

/**
 * @dev Simplified contract of a `../Swapper.sol`
 */
contract SwapperLike {
    function fromDaiToBTU(address, uint256) external;
}


/**
 * @dev Simplified contract of a VatLike
 * For full implementation please see MakerDAO's repo at <https://github.com/makerdao/dss>
 */
contract VatLike {
    function hope(address) external;
}


/**
 * @dev Simplified contract of a PotLike
 * For full implementation please see MakerDAO's repo at <https://github.com/makerdao/dss>
 */
contract PotLike {
    function chi() external view returns (uint256);
    function rho() external view returns (uint256);
    function dsr() external view returns (uint256);
    function drip() external returns (uint256);
    function join(uint256) external;
    function exit(uint256) external;
}


/**
 * @dev Simplified contract of a DaiJoin
 * For full implementation please see MakerDAO's repo at <https://github.com/makerdao/dss>
 */
contract JoinLike {
    function join(address, uint256) external;
    function exit(address, uint256) external;
}


/**
 * @dev Simplified contract of a ERC20 Token
 */
contract ERC20Like {
    function transferFrom(address, address, uint256) external returns (bool);
    function transfer(address, uint256) external returns (bool);
    function approve(address, uint256) external returns (bool);
    function allowance(address, address) external view returns (uint256);
}




/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}










library RayMath {
    uint256 internal constant ONE_RAY = 10**27;

    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a, "Bdai: overflow");

        return c;
    }

    function sub(uint256 a, uint256 b, string memory errMsg)
        internal
        pure
        returns (uint256)
    {
        require(b <= a, errMsg);

        return a - b;
    }

    function subOrZero(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b > a) {
            return uint256(0);
        } else {
            return a - b;
        }
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / ONE_RAY;
    }

    /**
     * @dev Warning : result is rounded toward zero
     */
    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "bDai: division by 0");

        return mul(a, ONE_RAY) / b;
    }

    /**
     * @dev do division with rouding up
     */
    function rdivup(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, ONE_RAY), sub(b, 1, "bDai: division by 0")) / b;
    }
}


/**
 * @dev Implementation of the bDAI ERC20 token
 *
 * This contracts aims to take `amount` DAI, subscribes it to the DSR program and
 * gives back `amount` of bDAI. User can then earn interests on these bDAI in BTU
 *
 * To have bDAI user needs to call join or joinFor
 * claim and claimFor are used to be get back interests in BTU
 * exit and exitFor are aimed to claim back the user's DAI
 */
contract Bdai is IERC20 {
    using RayMath for uint256;

    bool public live;
    uint8 public constant decimals = 18;
    uint256 public totalSupply;

    string public constant name = "BTU Incentivized DAI";
    string public constant symbol = "bDAI";
    string public constant version = "1";

    mapping(address => uint256) private _balances;
    mapping(address => uint256) private _pies;
    mapping(address => uint256) private _nonces;

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

    ERC20Like public dai;
    JoinLike public daiJoin;
    PotLike public pot;
    VatLike public vat;
    SwapperLike public swapper;

    address public owner;

    bytes32 public DOMAIN_SEPARATOR; //EIP712 domain

    //keccak256 "Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)"
    bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    //keccak256 "ClaimFor(address holder,address spender,uint256 nonce,uint256 expiry,address dest)"
    bytes32 public constant CLAIM_TYPEHASH = 0xcbd06f2e482e52538ba0a2e3b1ec074c1ff826895448b9cf7b33c0abbbe904b3;

    //keccak256 "ExitFor(address holder,address spender,uint256 nonce,uint256 expiry,uint256 amount)"
    bytes32 public constant EXIT_TYPEHASH = 0x703d2576480f8b8746c2232693aae93ab2bda9c8b68427bce6eff0c6238807ed;

    /**
     * @dev Sets the external MakerDAO's contract address. All of these values are immutable.
     *      Authorises these contracts to play with DAI owned by `this`
     */
    constructor(
        address dai_,
        address daiJoin_,
        address pot_,
        address vat_,
        address swapper_,
        uint256 chainId_
    ) public {
        owner = msg.sender;
        live = true;

        dai = ERC20Like(dai_);
        daiJoin = JoinLike(daiJoin_);
        pot = PotLike(pot_);
        vat = VatLike(vat_);
        swapper = SwapperLike(swapper_);

        vat.hope(daiJoin_);
        vat.hope(pot_);

        dai.approve(daiJoin_, uint256(-1));
        dai.approve(swapper_, uint256(-1));

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name)),
                keccak256(bytes(version)),
                chainId_,
                address(this)
            )
        );
    }

    /**
     * @dev Returns the amount of bDAI owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev Transfers `amount` of bDAI from `sender` to `recipient`
     *      Before the transfer, `sender` earns interrests on its bDAI
     *
     * Requirements :
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     *
     * Emits {Transfer} event
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev Returns the pie owned by `account` on the DSR contract (e.g. pot.sol from MakerDAO).
     */
    function pieOf(address account) external view returns (uint256) {
        return _pies[account];
    }

    /**
     * @dev Returns the last recorded `chi` from the dsr contract
     */
    function chi() external view returns (uint256) {
        return pot.chi();
    }

    /**
     * @dev Returns the last recorded `rho` from the dsr contract
     */
    function rho() external view returns (uint256) {
        return pot.rho();
    }

    /**
     * @dev Returns the last recorded `dsr` from the dsr contract
     */
    function dsr() external view returns (uint256) {
        return pot.dsr();
    }

    /**
     * @dev Returns the amount of bDAI which `spender` can take from `tokenOwner` account
     */
    function allowance(address tokenOwner, address spender)
        external
        view
        returns (uint256)
    {
        return _allowances[tokenOwner][spender];
    }

    /**
     * @dev Sets an allowance of `amount` for `spender` over the caller's bDAI
     *
     * Emits {Approval} event
     */
    function approve(address spender, uint256 amount) external returns (bool) {
        require(spender != address(0), "Bdai: approve to 0x0");

        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);

        return true;
    }

    /**
     * @dev Transfers `amount` of bDAI from `sender` to `recipient`
     *      Before the transfer, `sender` earns interrests on its bDAI
     *      Updates allowance if not set to MAX_UINT256
     *
     * Requirements :
     * - `sender`cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - the caller must have an allowance of at least `amount`.
     * - `sender` must have at least `amount` of token
     *
     * Emits {Transfer} event
     * Emits an {Approval} event indicating the updated allowance
     */
    function transferFrom(address sender, address recipient, uint256 amount)
        external
        returns (bool)
    {
        _allow(sender, msg.sender, amount);
        _transfer(sender, recipient, amount);

        return true;
    }

    /**
     * @dev Takes `amount` of DAI (in wad) from the caller and subscribes it to the dsr
     *      Mints `amount` of bDAI for the caller
     *
     * Requirements :
     * - the caller must have at least `amount` of DAI.
     *
     * Emits {Transfer} event
     */
    function join(uint256 amount) external {
        _join(msg.sender, amount);
    }

    /**
     * @dev Takes `amount` of DAI (in wad) from the caller and subscribes it to the dsr
     *      Mints `amount` of bDAI for `dest` (e.g. DAI are taken from caller and bDAI are sent to `dest`)
     *
     * Requirements :
     * - the caller must have at least `amount` of DAI.
     * - `dest` cannot be zero address
     *
     * Emits {Transfer} event
     */
    function joinFor(address dest, uint256 amount) external {
        require(dest != address(0), "bDai: dest cannot be 0x0");
        _join(dest, amount);
    }

    /**
     * @dev Recalculates caller's `pie` to fit with its bDAI
     *      Converts interrests to BTU and sends it to caller's address
     */
    function claim() external {
        _claim(msg.sender, msg.sender);
    }

    /**
     * @dev Recalculates caller's `pie` to fit with its bDAI
     *      Converts interrests to BTU and sends it to `dest` address
     *
     * Requirements :
     * - `dest` cannot be the zero address
     */
    function claim(address dest) external {
        require(dest != address(0), "bDai: dest cannot be 0x0");
        _claim(msg.sender, dest);
    }

    /**
     * @dev Takes `amount` of bDAI and returns `amount` of DAI
     *      Claims interest
     *      Burns `amount` of bDAI
     *
     * Requirements :
     * - the caller must have at least `amount` of bDAI.
     *
     * Emits {Transfer} event
     */
    function exit(uint256 amount) external {
        _exit(msg.sender, amount);
    }

    /**
     * @dev Transfers `amounts` of bDAI from caller to `recipients`
     * Before the transfer, caller earns interrests on its bDAI
     *
     * Requirements :
     * - `recipients` cannot contain the zero address.
     * - the caller must have a balance of at least `total(amounts)`.
     *
     * Emits {Transfer} event
     */
    function transfer(address[] memory recipients, uint256[] memory amounts)
        public
        returns (bool)
    {
        _transfer(msg.sender, recipients, amounts);
        return true;
    }

    /**
     * @dev Transfers `amounts` of bDAI from caller to `recipients`
     * Before the transfer, caller earns interrests on its bDAI
     *
     * Requirements :
     * - `sender`cannot be the zero address.
     * - `recipients` cannot contain the zero address.
     * - the caller must have an allowance of at least `total(amounts)`.
     * - `sender` must have a balance of at least `total(amounts)`.
     *
     * Emits {Transfer} event
     * Emits an {Approval} event indicating the updated allowance
     */
    function transferFrom(
        address sender,
        address[] memory recipients,
        uint256[] memory amounts
    ) public returns (bool) {
        uint256 total;

        for (uint256 i; i < recipients.length; ++i) {
            total = total.add(amounts[i]);
        }

        _allow(sender, msg.sender, total);
        _transfer(sender, recipients, amounts);

        return true;
    }

    /**
     * @dev Returns the noce ofe `account`
     */
    function nonces(address account) external view returns (uint256) {
        return _nonces[account];
    }

    /**
     * @dev Sets an allowance of `MAX_UINT256` for `spender` over the holder's bDAI if `allowaed` set to `true`
     *
     * Requiremets:
     * - `holder` cannot be the zero address
     * - `spender` cannot be the zero address
     * - `nonce` must be actual nonce of `holder` + 1
     * - `expiry` must be zero (for infinite validity) or lower than `now` if not null
     * - `v`, `r`, `s` must contain the permit message signed by `holder`
     *
     * Emits {Approval} event
     */
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(holder != address(0), "bDai: approve from 0x0");
        require(spender != address(0), "bDai: approve to 0x0");
        require(expiry == 0 || now <= expiry, "bDai: permit-expired");
        require(nonce == _nonces[holder]++, "bDai: invalid-nonce");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        holder,
                        spender,
                        nonce,
                        expiry,
                        allowed
                    )
                )
            )
        );

        require(holder == ecrecover(digest, v, r, s), "bDai: invalid-permit");
        uint256 amount = allowed ? uint256(-1) : 0;
        _allowances[holder][spender] = amount;
        emit Approval(holder, spender, amount);
    }

    /**
     * @dev Recalculates `account`'s `pie` to fit with its bDAI
     *      Converts interrests to BTU and sends it to `dest` address
     *
     * Requirements :
     * - the caller must have an allowance >= of the `account`'s balance
     * - `dest` cannot be the zero address
     */
    function claimFor(
        address holder,
        uint256 nonce,
        uint256 expiry,
        address dest,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(dest != address(0), "bDai: dest cannot be 0x0");
        require(holder != address(0), "bDai: claim from 0x0");
        require(expiry == 0 || now <= expiry, "bDai: permit-expired");
        require(nonce == _nonces[holder]++, "bDai: invalid-nonce");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        CLAIM_TYPEHASH,
                        holder,
                        msg.sender,
                        nonce,
                        expiry,
                        dest
                    )
                )
            )
        );

        require(holder == ecrecover(digest, v, r, s), "bDai: invalid-permit");
        _claim(holder, dest);
    }

    /**
     * @dev Takes `amount` of bDAI and returns `amount` of DAI in the name of `account`
     * Claims interest
     * Burns `amount` of bDAI
     *
     * Requirements :
     * - `holder` must have at least `amount` of bDAI.
     * - `holder` cannot be the zero address
     * - `nonce` must be actual nonce of `holder` + 1
     * - `expiry` must be zero (for infinite validity) or lower than `now` if not null
     * - `v`, `r`, `s` must contain the permit message signed by `holder`
     *
     * Emits {Transfer} event
     */
    function exitFor(
        address holder,
        uint256 nonce,
        uint256 expiry,
        uint256 amount,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(holder != address(0), "bDai: exit from 0x0");
        require(expiry == 0 || now <= expiry, "bDai: permit-expired");
        require(nonce == _nonces[holder]++, "bDai: invalid-nonce");

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        EXIT_TYPEHASH,
                        holder,
                        msg.sender,
                        nonce,
                        expiry,
                        amount
                    )
                )
            )
        );

        require(holder == ecrecover(digest, v, r, s), "bDai: invalid-permit");
        _exit(holder, amount);
    }

    /**
     * @dev only callers with address equals to `owner` can call functions with this modifier
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "bDai: op not allowed");
        _;
    }

    /**
     * @dev Changes the contract owner from `owner` to `owner_`
     *
     * Requirements :
     * - the caller must be the actual contract `owner`
     * - `owner_` cannot be the zero address
     *
     */
    function setOwner(address owner_) external onlyOwner {
        require(owner_ != address(0), "bDai: owner cannot be 0x0");
        owner = owner_;
    }

    /**
     * @dev Changes the `live` params, if set to `false` join functionnality is blocked
     *
     * Requirements :
     * - the caller must be the actual contract `owner`
     *
     */
    function freeze(bool freeze_) external onlyOwner {
        live = !freeze_;
    }

    /**
     * @dev Changes the `swapper` contract
     *
     * Requirements :
     * - the caller must be the actual contract `owner`
     * - `swapper_` cannot be the zero address
     *
     */
    function setSwapper(address swapper_) external onlyOwner {
        require(swapper_ != address(0), "bDai: cannot set to 0x0");
        address oldSwapper = address(swapper);
        swapper = SwapperLike(swapper_);

        dai.approve(oldSwapper, uint256(0));
        dai.approve(swapper_, uint256(-1));
    }

    /**
     * @dev Returns the actual `chi` from the DSR (e.g. call `pot.drip()` if needed)
     */
    function _chi() internal returns (uint256) {
        return now > pot.rho() ? pot.drip() : pot.chi();
    }

    /**
     * @dev Updates the allowance of `caller` over `sender` for a specified `amount`
     * Emits an {Approval} event indicating the updated allowance
     */
    function _allow(address sender, address caller, uint256 amount) internal {
        uint256 a = _allowances[sender][caller];
        require(a > 0, "bDAI: bad allowance");
        if (a != uint256(-1)) {
            _allowances[sender][caller] = a.sub(amount, "bDAI: bad allowance");
            emit Approval(sender, caller, _allowances[sender][caller]);
        }
    }

    /**
     * @dev Transfers `amount` of bDAI from `sender` to `recipient`
     * Before the transfer, `sender` earns interrests on its bDAI
     *
     * Requirements :
     * - `sender`cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     *
     * Emits {Transfer} event
     */
    function _transfer(address sender, address recipient, uint256 amount)
        internal
    {
        require(sender != address(0), "Bdai: transfer from 0x0");
        require(recipient != address(0), "Bdai: transfer to 0x0");

        uint256 c = _chi();
        uint256 senderBalance = _balances[sender];
        uint256 oldSenderPie = _pies[sender];
        uint256 tmp = senderBalance.rdivup(c); //Pie reseted
        uint256 pieToClaim = oldSenderPie.subOrZero(tmp);
        uint256 pieToBeTransfered = amount.rdivup(c);

        _balances[sender] = senderBalance.sub(
            amount,
            "bDai: not enougth funds"
        );
        _balances[recipient] = _balances[recipient].add(amount);

        tmp = pieToClaim.add(pieToBeTransfered);
        if (tmp > oldSenderPie) {
            _pies[sender] = 0;
            _pies[recipient] = _pies[recipient].add(oldSenderPie);
        } else {
            _pies[sender] = oldSenderPie - tmp;
            _pies[recipient] = _pies[recipient].add(pieToBeTransfered);
        }

        if (pieToClaim > 0) {
            uint256 claimedToken = pieToClaim.rmul(c);

            pot.exit(pieToClaim);
            daiJoin.exit(address(this), claimedToken);
            swapper.fromDaiToBTU(sender, claimedToken);
        }

        emit Transfer(sender, recipient, amount);
    }

    /**
     * @dev Transfers `amounts` of bDAI from caller to `recipients`
     * Before the transfer, caller earns interrests on its bDAI
     *
     * Requirements :
     * - `sender`cannot be the zero address.
     * - `recipients` cannot contain the zero address.
     * - the caller must have an allowance of at least `total(amounts)`.
     * - `sender` must have a balance of at least `total(amounts)`.
     *
     * Emits {Transfer} event
     */
    function _transfer(
        address sender,
        address[] memory recipients,
        uint256[] memory amounts
    ) internal {
        require(sender != address(0), "Bdai: transfer from 0x0");

        uint256 c = _chi();
        uint256 senderBalance = _balances[sender];
        uint256 oldSenderPie = _pies[sender];
        uint256 tmp = senderBalance.rdivup(c); //Pie reseted
        uint256 pieToClaim = oldSenderPie.subOrZero(tmp);
        uint256 pieToBeTransfered;

        uint256 total;
        uint256 totalPie = oldSenderPie;
        for (uint256 i; i < recipients.length; ++i) {
            require(recipients[i] != address(0), "Bdai: transfer to 0x0");
            total = total.add(amounts[i]);

            pieToBeTransfered = amounts[i].rdivup(c);
            _balances[recipients[i]] = _balances[recipients[i]].add(amounts[i]);

            tmp = pieToClaim.add(pieToBeTransfered);
            if (tmp > oldSenderPie) {
                totalPie = 0;
                _pies[recipients[i]] = _pies[recipients[i]].add(oldSenderPie);
            } else {
                totalPie = oldSenderPie - tmp;
                _pies[recipients[i]] = _pies[recipients[i]].add(
                    pieToBeTransfered
                );
            }

            emit Transfer(sender, recipients[i], amounts[i]);
        }

        _balances[sender] = senderBalance.sub(total, "bDai: not enougth funds");
        _pies[sender] = totalPie;

        if (pieToClaim > 0) {
            uint256 claimedToken = pieToClaim.rmul(c);

            pot.exit(pieToClaim);
            daiJoin.exit(address(this), claimedToken);
            swapper.fromDaiToBTU(sender, claimedToken);
        }
    }

    /**
     * @dev Takes `amount` of DAI (in wad) from the caller and subscribes it to the dsr
     * Mints `amount` of bDAI for `dest` (e.g. DAI are taken from caller and bDAI are sent to `dest`)
     *
     * Requirements :
     * - the caller must have at least `amount` of DAI.
     *
     * Emits {Transfer} event
     */
    function _join(address dest, uint256 amount) internal {
        require(live, "bDai: system is frozen");

        uint256 c = _chi();
        uint256 pie = amount.rdiv(c);

        totalSupply = totalSupply.add(amount);
        _balances[dest] = _balances[dest].add(amount);
        _pies[dest] = _pies[dest].add(pie);

        dai.transferFrom(msg.sender, address(this), amount);
        daiJoin.join(address(this), amount);
        pot.join(pie);

        emit Transfer(address(0), dest, amount);
    }

    /**
     * @dev Recalculates `account`'s `pie` to fit with its bDAI
     *      Sends BTU to `dest` address
     * Converts interrests to BTU and sends it to caller's address
     */
    function _claim(address account, address dest) internal {
        uint256 c = _chi();
        uint256 newPie = _balances[account].rdivup(c);
        uint256 pieDiff = _pies[account].subOrZero(newPie);

        if (pieDiff > 0) {
            uint256 exitedTokens = pieDiff.rmul(c);
            _pies[account] = newPie;

            pot.exit(pieDiff);
            daiJoin.exit(address(this), exitedTokens);
            swapper.fromDaiToBTU(dest, exitedTokens);
        }
    }

    /**
     * @dev Takes `amount` of bDAI and returns `amount` of DAI in the name of `account`
     * Claims interest
     * Burns `amount` of bDAI
     *
     * Requirements :
     * - `amount` cannot be zero
     * - `account` must have at least `amount` of bDAI.
     * - the caller must have an allowance of at least `amount` over the `account` address
     *
     * Emits {Transfer} event
     */
    function _exit(address account, uint256 amount) internal {
        require(amount > 0, "bDai : zero amount");

        uint256 c = _chi();
        uint256 bal2 = _balances[account].sub(
            amount,
            "bDai: not enougth funds"
        );
        uint256 pie2 = bal2.rdiv(c);
        uint256 pieDiff = _pies[account].sub(pie2, "bDai: not enougth funds");
        uint256 totalDai = pieDiff.rmul(c);
        uint256 interestToken = totalDai.subOrZero(amount);

        _balances[account] = bal2;
        totalSupply = totalSupply.sub(amount, "bDai: totalSupply underflow");
        _pies[account] = pie2;

        pot.exit(pieDiff);
        daiJoin.exit(address(this), totalDai);
        dai.transfer(account, amount);

        if (interestToken > 0) {
            swapper.fromDaiToBTU(account, interestToken);
        }

        emit Transfer(account, address(0), amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dai_","type":"address"},{"internalType":"address","name":"daiJoin_","type":"address"},{"internalType":"address","name":"pot_","type":"address"},{"internalType":"address","name":"vat_","type":"address"},{"internalType":"address","name":"swapper_","type":"address"},{"internalType":"uint256","name":"chainId_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"CLAIM_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dest","type":"address"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"address","name":"dest","type":"address"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"claimFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dai","outputs":[{"internalType":"contract ERC20Like","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract JoinLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dsr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"exitFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"freeze_","type":"bool"}],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"join","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dest","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"joinFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pieOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pot","outputs":[{"internalType":"contract PotLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rho","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"swapper_","type":"address"}],"name":"setSwapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"swapper","outputs":[{"internalType":"contract SwapperLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200382838038062003828833981810160405260c08110156200003757600080fd5b50805160208201516040808401516060850151608086015160a090960151600b8054336001600160a01b0319918216179091556000805460ff191660011781556006805483166001600160a01b03808b1691909117909155600780548416828a169081179091556008805485168389161790556009805485168388161790819055600a8054909516838d161790945587517fa3b22fc40000000000000000000000000000000000000000000000000000000081526004810191909152965198999798959794969495939492169263a3b22fc492602480820193929182900301818387803b1580156200012857600080fd5b505af11580156200013d573d6000803e3d6000fd5b5050600954604080517fa3b22fc40000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152915191909216935063a3b22fc49250602480830192600092919082900301818387803b158015620001a957600080fd5b505af1158015620001be573d6000803e3d6000fd5b5050600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038a811660048301526000196024830152915191909216935063095ea7b3925060448083019260209291908290030181600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506040513d60208110156200025f57600080fd5b5050600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b158015620002d257600080fd5b505af1158015620002e7573d6000803e3d6000fd5b505050506040513d6020811015620002fe57600080fd5b5050604051806052620037d68239604080519182900360520182208282018252601483527f42545520496e63656e746976697a65642044414900000000000000000000000060209384015281518083018352600181527f3100000000000000000000000000000000000000000000000000000000000000908401528151808401919091527f6df285f914475a59735e7c286b3e02b582af5e7018b6ee9c5413e3f5a5aba8e5818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c090940190528251920191909120600c555050505050506133c580620004116000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c806362570b6e1161017b5780639c82f2a4116100d8578063cf8948201161008c578063ee69e66611610071578063ee69e66614610865578063f4b9fa751461086d578063ffc3a76914610875576102ad565b8063cf8948201461080b578063dd62ed3e14610837576102ad565b8063b5bf15e5116100bd578063b5bf15e5146107dc578063c11645bc146107fb578063c92aecc414610803576102ad565b80639c82f2a41461078a578063a9059cbb146107b0576102ad565b806388787f2b1161012f5780638fcbaf0c116101145780638fcbaf0c14610720578063957aa58c1461077a57806395d89b4114610782576102ad565b806388787f2b146106f25780638da5cb5b14610718576102ad565b806370a082311161016057806370a08231146106895780637ecebe00146106af5780637f8661a1146106d5576102ad565b806362570b6e146106305780636b0509b114610681576102ad565b80632b3297f91161022957806346091499116101dd5780634ba2363a116101c25780634ba2363a146106185780634e71d92d1461062057806354fd4d5014610628576102ad565b806346091499146104d9578063487bf08214610610576102ad565b8063313ce5671161020e578063313ce567146104ab5780633644e515146104c957806336569e77146104d1576102ad565b80632b3297f91461047f57806330adf81f146104a3576102ad565b806318160ddd1161028057806320aba08b1161026557806320aba08b146103f457806323b872dd146103fc57806326679f8014610432576102ad565b806318160ddd146103b45780631e83409a146103ce576102ad565b8063049878f3146102b257806306fdde03146102d1578063095ea7b31461034e57806313af40351461038e575b600080fd5b6102cf600480360360208110156102c857600080fd5b503561099c565b005b6102d96109a9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103135781810151838201526020016102fb565b50505050905090810190601f1680156103405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61037a6004803603604081101561036457600080fd5b506001600160a01b0381351690602001356109e2565b604080519115158252519081900360200190f35b6102cf600480360360208110156103a457600080fd5b50356001600160a01b0316610aa7565b6103bc610b9b565b60408051918252519081900360200190f35b6102cf600480360360208110156103e457600080fd5b50356001600160a01b0316610ba1565b6103bc610c06565b61037a6004803603606081101561041257600080fd5b506001600160a01b03813581169160208101359091169060400135610c95565b6102cf600480360360e081101561044857600080fd5b506001600160a01b038135169060208101359060408101359060608101359060ff6080820135169060a08101359060c00135610cb7565b610487610f6b565b604080516001600160a01b039092168252519081900360200190f35b6103bc610f7a565b6104b3610f9e565b6040805160ff9092168252519081900360200190f35b6103bc610fa3565b610487610fa9565b61037a600480360360608110156104ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561059e57600080fd5b8201836020820111156105b057600080fd5b803590602001918460208302840111640100000000831117156105d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fb8945050505050565b6103bc611019565b610487611077565b6102cf611086565b6102d9611092565b6102cf600480360360e081101561064657600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060ff6080820135169060a08101359060c001356110cb565b6103bc6113d4565b6103bc6004803603602081101561069f57600080fd5b50356001600160a01b03166113f8565b6103bc600480360360208110156106c557600080fd5b50356001600160a01b0316611413565b6102cf600480360360208110156106eb57600080fd5b503561142e565b6103bc6004803603602081101561070857600080fd5b50356001600160a01b0316611438565b610487611453565b6102cf600480360361010081101561073757600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135611462565b61037a6117e4565b6102d96117ed565b6102cf600480360360208110156107a057600080fd5b50356001600160a01b0316611826565b61037a600480360360408110156107c657600080fd5b506001600160a01b038135169060200135611a4f565b6102cf600480360360208110156107f257600080fd5b50351515611a65565b610487611af4565b6103bc611b03565b6102cf6004803603604081101561082157600080fd5b506001600160a01b038135169060200135611b61565b6103bc6004803603604081101561084d57600080fd5b506001600160a01b0381358116916020013516611bca565b6103bc611bf5565b610487611c19565b61037a6004803603604081101561088b57600080fd5b8101906020810181356401000000008111156108a657600080fd5b8201836020820111156108b857600080fd5b803590602001918460208302840111640100000000831117156108da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184602083028401116401000000008311171561095e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c28945050505050565b6109a63382611c35565b50565b6040518060400160405280601481526020017f42545520496e63656e746976697a65642044414900000000000000000000000081525081565b60006001600160a01b038316610a3f576040805162461bcd60e51b815260206004820152601460248201527f426461693a20617070726f766520746f20307830000000000000000000000000604482015290519081900360640190fd5b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600b546001600160a01b03163314610b06576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b61576040805162461bcd60e51b815260206004820152601960248201527f624461693a206f776e65722063616e6e6f742062652030783000000000000000604482015290519081900360640190fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60015481565b6001600160a01b038116610bfc576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b6109a63382611f1a565b600854604080517f20aba08b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916320aba08b916004808301926020929190829003018186803b158015610c6457600080fd5b505afa158015610c78573d6000803e3d6000fd5b505050506040513d6020811015610c8e57600080fd5b5051905090565b6000610ca28433846120f0565b610cad84848461221f565b5060019392505050565b6001600160a01b038716610d12576040805162461bcd60e51b815260206004820152601360248201527f624461693a20657869742066726f6d2030783000000000000000000000000000604482015290519081900360640190fd5b841580610d1f5750844211155b610d70576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526004602052604090208054600181019091558614610de4576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517f703d2576480f8b8746c2232693aae93ab2bda9c8b68427bce6eff0c6238807ed6020808301919091526001600160a01b038b1682840152336060830152608082018a905260a0820189905260c08083018990528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa158015610ee8573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b031614610f57576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b610f618886612646565b5050505050505050565b600a546001600160a01b031681565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b600c5481565b6009546001600160a01b031681565b60008060005b8451811015610ff757610fed848281518110610fd657fe5b602002602001015183612a4f90919063ffffffff16565b9150600101610fbe565b506110038533836120f0565b61100e858585612aa7565b506001949350505050565b600854604080517f487bf08200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163487bf082916004808301926020929190829003018186803b158015610c6457600080fd5b6008546001600160a01b031681565b6110903333611f1a565b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6001600160a01b038416611126576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b6001600160a01b038716611181576040805162461bcd60e51b815260206004820152601460248201527f624461693a20636c61696d2066726f6d20307830000000000000000000000000604482015290519081900360640190fd5b84158061118e5750844211155b6111df576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526004602052604090208054600181019091558614611253576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517fcbd06f2e482e52538ba0a2e3b1ec074c1ff826895448b9cf7b33c0abbbe904b36020808301919091526001600160a01b03808c1683850152336060840152608083018b905260a083018a9052881660c0808401919091528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa15801561135b573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b0316146113ca576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b610f618886611f1a565b7fcbd06f2e482e52538ba0a2e3b1ec074c1ff826895448b9cf7b33c0abbbe904b381565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b031660009081526004602052604090205490565b6109a63382612646565b6001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031681565b6001600160a01b0388166114bd576040805162461bcd60e51b815260206004820152601660248201527f624461693a20617070726f76652066726f6d2030783000000000000000000000604482015290519081900360640190fd5b6001600160a01b038716611518576040805162461bcd60e51b815260206004820152601460248201527f624461693a20617070726f766520746f20307830000000000000000000000000604482015290519081900360640190fd5b8415806115255750844211155b611576576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038816600090815260046020526040902080546001810190915586146115ea576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501528b166060830152608082018a905260a0820189905287151560c0808401919091528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa1580156116f4573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614611763576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b600085611771576000611775565b6000195b6001600160a01b03808c166000818152600560209081526040808320948f168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a350505050505050505050565b60005460ff1681565b6040518060400160405280600481526020017f624441490000000000000000000000000000000000000000000000000000000081525081565b600b546001600160a01b03163314611885576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166118e0576040805162461bcd60e51b815260206004820152601760248201527f624461693a2063616e6e6f742073657420746f20307830000000000000000000604482015290519081900360640190fd5b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617909255600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081529284166004840181905260006024850181905291519094929092169263095ea7b39260448083019360209383900390910190829087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d60208110156119ad57600080fd5b5050600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b505050506040513d6020811015611a4957600080fd5b50505050565b6000611a5c33848461221f565b50600192915050565b600b546001600160a01b03163314611ac4576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115919091179055565b6007546001600160a01b031681565b600854604080517fc92aecc400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163c92aecc4916004808301926020929190829003018186803b158015610c6457600080fd5b6001600160a01b038216611bbc576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b611bc68282611c35565b5050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b7f703d2576480f8b8746c2232693aae93ab2bda9c8b68427bce6eff0c6238807ed81565b6006546001600160a01b031681565b6000611a5c338484612aa7565b60005460ff16611c8c576040805162461bcd60e51b815260206004820152601660248201527f624461693a2073797374656d2069732066726f7a656e00000000000000000000604482015290519081900360640190fd5b6000611c96612fff565b90506000611caa838363ffffffff61317716565b600154909150611cc0908463ffffffff612a4f16565b6001556001600160a01b038416600090815260026020526040902054611cec908463ffffffff612a4f16565b6001600160a01b038516600090815260026020908152604080832093909355600390522054611d21908263ffffffff612a4f16565b6001600160a01b0380861660009081526003602090815260408083209490945560065484517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810189905294519316936323b872dd9360648083019491928390030190829087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050506040513d6020811015611dcf57600080fd5b5050600754604080517f3b4da69f0000000000000000000000000000000000000000000000000000000081523060048201526024810186905290516001600160a01b0390921691633b4da69f9160448082019260009290919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600854604080517f049878f30000000000000000000000000000000000000000000000000000000081526004810186905290516001600160a01b03909216935063049878f3925060248082019260009290919082900301818387803b158015611ebb57600080fd5b505af1158015611ecf573d6000803e3d6000fd5b50506040805186815290516001600160a01b0388169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b6000611f24612fff565b6001600160a01b03841660009081526002602052604081205491925090611f51908363ffffffff6131f316565b6001600160a01b03851660009081526003602052604081205491925090611f7e908363ffffffff61325516565b905080156120e9576000611f98828563ffffffff61327016565b6001600160a01b038088166000908152600360205260408082208790556008548151637f8661a160e01b815260048101889052915194955090921692637f8661a192602480820193929182900301818387803b158015611ff757600080fd5b505af115801561200b573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b15801561206257600080fd5b505af1158015612076573d6000803e3d6000fd5b5050600a546040805163544e462760e11b81526001600160a01b038a8116600483015260248201879052915191909216935063a89c8c4e9250604480830192600092919082900301818387803b1580156120cf57600080fd5b505af11580156120e3573d6000803e3d6000fd5b50505050505b5050505050565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205480612168576040805162461bcd60e51b815260206004820152601360248201527f624441493a2062616420616c6c6f77616e636500000000000000000000000000604482015290519081900360640190fd5b6000198114611a495760408051808201909152601381527f624441493a2062616420616c6c6f77616e63650000000000000000000000000060208201526121b8908290849063ffffffff61328916565b6001600160a01b0385811660008181526005602090815260408083209489168084529482529182902085905581519485529051929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350505050565b6001600160a01b03831661227a576040805162461bcd60e51b815260206004820152601760248201527f426461693a207472616e736665722066726f6d20307830000000000000000000604482015290519081900360640190fd5b6001600160a01b0382166122d5576040805162461bcd60e51b815260206004820152601560248201527f426461693a207472616e7366657220746f203078300000000000000000000000604482015290519081900360640190fd5b60006122df612fff565b6001600160a01b03851660009081526002602090815260408083205460039092528220549293509190612318838563ffffffff6131f316565b9050600061232c838363ffffffff61325516565b90506000612340878763ffffffff6131f316565b905061238c876040518060400160405280601781526020017f624461693a206e6f7420656e6f756774682066756e6473000000000000000000815250876132899092919063ffffffff16565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546123c1908863ffffffff612a4f16565b6001600160a01b0389166000908152600260205260409020556123ea828263ffffffff612a4f16565b925083831115612446576001600160a01b03808a16600090815260036020526040808220829055918a1681522054612428908563ffffffff612a4f16565b6001600160a01b038916600090815260036020526040902055612496565b6001600160a01b03808a166000908152600360205260408082208688039055918a168152205461247c908263ffffffff612a4f16565b6001600160a01b0389166000908152600360205260409020555b81156125f05760006124ae838863ffffffff61327016565b60085460408051637f8661a160e01b81526004810187905290519293506001600160a01b0390911691637f8661a19160248082019260009290919082900301818387803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b5050600a546040805163544e462760e11b81526001600160a01b038f8116600483015260248201879052915191909216935063a89c8c4e9250604480830192600092919082900301818387803b1580156125d657600080fd5b505af11580156125ea573d6000803e3d6000fd5b50505050505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a3505050505050505050565b6000811161269b576040805162461bcd60e51b815260206004820152601260248201527f62446169203a207a65726f20616d6f756e740000000000000000000000000000604482015290519081900360640190fd5b60006126a5612fff565b604080518082018252601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020808301919091526001600160a01b0387166000908152600290915291822054929350909161270a91859063ffffffff61328916565b9050600061271e828463ffffffff61317716565b604080518082018252601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020808301919091526001600160a01b0389166000908152600390915291822054929350909161278391849063ffffffff61328916565b90506000612797828663ffffffff61327016565b905060006127ab828863ffffffff61325516565b6001600160a01b0389166000908152600260209081526040918290208890558151808301909252601b82527f624461693a20746f74616c537570706c7920756e646572666c6f770000000000908201526001549192506128139190899063ffffffff61328916565b6001556001600160a01b038089166000908152600360205260408082208790556008548151637f8661a160e01b8152600481018890529151931692637f8661a19260248084019391929182900301818387803b15801561287257600080fd5b505af1158015612886573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b1580156128dd57600080fd5b505af11580156128f1573d6000803e3d6000fd5b5050600654604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038d81166004830152602482018d9052915191909216935063a9059cbb925060448083019260209291908290030181600087803b15801561296457600080fd5b505af1158015612978573d6000803e3d6000fd5b505050506040513d602081101561298e57600080fd5b50508015612a0457600a546040805163544e462760e11b81526001600160a01b038b81166004830152602482018590529151919092169163a89c8c4e91604480830192600092919082900301818387803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b505050505b6040805188815290516000916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050505050565b81810182811015610aa1576040805162461bcd60e51b815260206004820152600e60248201527f426461693a206f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316612b02576040805162461bcd60e51b815260206004820152601760248201527f426461693a207472616e736665722066726f6d20307830000000000000000000604482015290519081900360640190fd5b6000612b0c612fff565b6001600160a01b03851660009081526002602090815260408083205460039092528220549293509190612b45838563ffffffff6131f316565b90506000612b59838363ffffffff61325516565b905060008084815b8a51811015612e095760006001600160a01b03168b8281518110612b8157fe5b60200260200101516001600160a01b03161415612be5576040805162461bcd60e51b815260206004820152601560248201527f426461693a207472616e7366657220746f203078300000000000000000000000604482015290519081900360640190fd5b612c0b8a8281518110612bf457fe5b602002602001015184612a4f90919063ffffffff16565b9250612c33898b8381518110612c1d57fe5b60200260200101516131f390919063ffffffff16565b9350612c938a8281518110612c4457fe5b6020026020010151600260008e8581518110612c5c57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612a4f90919063ffffffff16565b600260008d8481518110612ca357fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055612cd7858563ffffffff612a4f16565b955086861115612d3a5760009150612cf987600360008e8581518110612c5c57fe5b600360008d8481518110612d0957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550612d90565b8587039150612d5384600360008e8581518110612c5c57fe5b600360008d8481518110612d6357fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b8a8181518110612d9c57fe5b60200260200101516001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c8481518110612de457fe5b60200260200101516040518082815260200191505060405180910390a3600101612b61565b5060408051808201909152601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020820152612e51908890849063ffffffff61328916565b6001600160a01b038c1660009081526002602090815260408083209390935560039052208190558315612ff2576000612e90858a63ffffffff61327016565b60085460408051637f8661a160e01b81526004810189905290519293506001600160a01b0390911691637f8661a19160248082019260009290919082900301818387803b158015612ee057600080fd5b505af1158015612ef4573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b158015612f4b57600080fd5b505af1158015612f5f573d6000803e3d6000fd5b50505050600a60009054906101000a90046001600160a01b03166001600160a01b031663a89c8c4e8d836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612fd857600080fd5b505af1158015612fec573d6000803e3d6000fd5b50505050505b5050505050505050505050565b600854604080517f20aba08b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916320aba08b916004808301926020929190829003018186803b15801561305d57600080fd5b505afa158015613071573d6000803e3d6000fd5b505050506040513d602081101561308757600080fd5b5051421161310e57600860009054906101000a90046001600160a01b03166001600160a01b031663c92aecc46040518163ffffffff1660e01b815260040160206040518083038186803b1580156130dd57600080fd5b505afa1580156130f1573d6000803e3d6000fd5b505050506040513d602081101561310757600080fd5b5051613172565b600860009054906101000a90046001600160a01b03166001600160a01b0316639f678cca6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561315e57600080fd5b505af1158015610c78573d6000803e3d6000fd5b905090565b60008082116131cd576040805162461bcd60e51b815260206004820152601360248201527f624461693a206469766973696f6e206279203000000000000000000000000000604482015290519081900360640190fd5b816131e4846b033b2e3c9fd0803ce8000000613320565b816131eb57fe5b049392505050565b6000816131e461320f856b033b2e3c9fd0803ce8000000613320565b6132508560016040518060400160405280601381526020017f624461693a206469766973696f6e206279203000000000000000000000000000815250613289565b612a4f565b60008282111561326757506000610aa1565b50808203610aa1565b60006b033b2e3c9fd0803ce80000006131e48484613320565b600081848411156133185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132dd5781810151838201526020016132c5565b50505050905090810190601f16801561330a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008261332f57506000610aa1565b508181028183828161333d57fe5b0414610aa1576040805162461bcd60e51b815260206004820152601d60248201527f624461693a206d756c7469706c69636174696f6e206f766572666c6f77000000604482015290519081900360640190fdfea265627a7a723158200393be7c3b5ab2037e88e0dee20d88ed4adba8e53af7d1f6a002507d5e6f203864736f6c634300050c0032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374290000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf700000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b00000000000000000000000013a36fef375cb8f3fdb776fea090e3016a7c3c600000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c806362570b6e1161017b5780639c82f2a4116100d8578063cf8948201161008c578063ee69e66611610071578063ee69e66614610865578063f4b9fa751461086d578063ffc3a76914610875576102ad565b8063cf8948201461080b578063dd62ed3e14610837576102ad565b8063b5bf15e5116100bd578063b5bf15e5146107dc578063c11645bc146107fb578063c92aecc414610803576102ad565b80639c82f2a41461078a578063a9059cbb146107b0576102ad565b806388787f2b1161012f5780638fcbaf0c116101145780638fcbaf0c14610720578063957aa58c1461077a57806395d89b4114610782576102ad565b806388787f2b146106f25780638da5cb5b14610718576102ad565b806370a082311161016057806370a08231146106895780637ecebe00146106af5780637f8661a1146106d5576102ad565b806362570b6e146106305780636b0509b114610681576102ad565b80632b3297f91161022957806346091499116101dd5780634ba2363a116101c25780634ba2363a146106185780634e71d92d1461062057806354fd4d5014610628576102ad565b806346091499146104d9578063487bf08214610610576102ad565b8063313ce5671161020e578063313ce567146104ab5780633644e515146104c957806336569e77146104d1576102ad565b80632b3297f91461047f57806330adf81f146104a3576102ad565b806318160ddd1161028057806320aba08b1161026557806320aba08b146103f457806323b872dd146103fc57806326679f8014610432576102ad565b806318160ddd146103b45780631e83409a146103ce576102ad565b8063049878f3146102b257806306fdde03146102d1578063095ea7b31461034e57806313af40351461038e575b600080fd5b6102cf600480360360208110156102c857600080fd5b503561099c565b005b6102d96109a9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103135781810151838201526020016102fb565b50505050905090810190601f1680156103405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61037a6004803603604081101561036457600080fd5b506001600160a01b0381351690602001356109e2565b604080519115158252519081900360200190f35b6102cf600480360360208110156103a457600080fd5b50356001600160a01b0316610aa7565b6103bc610b9b565b60408051918252519081900360200190f35b6102cf600480360360208110156103e457600080fd5b50356001600160a01b0316610ba1565b6103bc610c06565b61037a6004803603606081101561041257600080fd5b506001600160a01b03813581169160208101359091169060400135610c95565b6102cf600480360360e081101561044857600080fd5b506001600160a01b038135169060208101359060408101359060608101359060ff6080820135169060a08101359060c00135610cb7565b610487610f6b565b604080516001600160a01b039092168252519081900360200190f35b6103bc610f7a565b6104b3610f9e565b6040805160ff9092168252519081900360200190f35b6103bc610fa3565b610487610fa9565b61037a600480360360608110156104ef57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561059e57600080fd5b8201836020820111156105b057600080fd5b803590602001918460208302840111640100000000831117156105d257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610fb8945050505050565b6103bc611019565b610487611077565b6102cf611086565b6102d9611092565b6102cf600480360360e081101561064657600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060ff6080820135169060a08101359060c001356110cb565b6103bc6113d4565b6103bc6004803603602081101561069f57600080fd5b50356001600160a01b03166113f8565b6103bc600480360360208110156106c557600080fd5b50356001600160a01b0316611413565b6102cf600480360360208110156106eb57600080fd5b503561142e565b6103bc6004803603602081101561070857600080fd5b50356001600160a01b0316611438565b610487611453565b6102cf600480360361010081101561073757600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135611462565b61037a6117e4565b6102d96117ed565b6102cf600480360360208110156107a057600080fd5b50356001600160a01b0316611826565b61037a600480360360408110156107c657600080fd5b506001600160a01b038135169060200135611a4f565b6102cf600480360360208110156107f257600080fd5b50351515611a65565b610487611af4565b6103bc611b03565b6102cf6004803603604081101561082157600080fd5b506001600160a01b038135169060200135611b61565b6103bc6004803603604081101561084d57600080fd5b506001600160a01b0381358116916020013516611bca565b6103bc611bf5565b610487611c19565b61037a6004803603604081101561088b57600080fd5b8101906020810181356401000000008111156108a657600080fd5b8201836020820111156108b857600080fd5b803590602001918460208302840111640100000000831117156108da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184602083028401116401000000008311171561095e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c28945050505050565b6109a63382611c35565b50565b6040518060400160405280601481526020017f42545520496e63656e746976697a65642044414900000000000000000000000081525081565b60006001600160a01b038316610a3f576040805162461bcd60e51b815260206004820152601460248201527f426461693a20617070726f766520746f20307830000000000000000000000000604482015290519081900360640190fd5b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b600b546001600160a01b03163314610b06576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b61576040805162461bcd60e51b815260206004820152601960248201527f624461693a206f776e65722063616e6e6f742062652030783000000000000000604482015290519081900360640190fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60015481565b6001600160a01b038116610bfc576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b6109a63382611f1a565b600854604080517f20aba08b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916320aba08b916004808301926020929190829003018186803b158015610c6457600080fd5b505afa158015610c78573d6000803e3d6000fd5b505050506040513d6020811015610c8e57600080fd5b5051905090565b6000610ca28433846120f0565b610cad84848461221f565b5060019392505050565b6001600160a01b038716610d12576040805162461bcd60e51b815260206004820152601360248201527f624461693a20657869742066726f6d2030783000000000000000000000000000604482015290519081900360640190fd5b841580610d1f5750844211155b610d70576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526004602052604090208054600181019091558614610de4576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517f703d2576480f8b8746c2232693aae93ab2bda9c8b68427bce6eff0c6238807ed6020808301919091526001600160a01b038b1682840152336060830152608082018a905260a0820189905260c08083018990528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa158015610ee8573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b031614610f57576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b610f618886612646565b5050505050505050565b600a546001600160a01b031681565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b600c5481565b6009546001600160a01b031681565b60008060005b8451811015610ff757610fed848281518110610fd657fe5b602002602001015183612a4f90919063ffffffff16565b9150600101610fbe565b506110038533836120f0565b61100e858585612aa7565b506001949350505050565b600854604080517f487bf08200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163487bf082916004808301926020929190829003018186803b158015610c6457600080fd5b6008546001600160a01b031681565b6110903333611f1a565b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6001600160a01b038416611126576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b6001600160a01b038716611181576040805162461bcd60e51b815260206004820152601460248201527f624461693a20636c61696d2066726f6d20307830000000000000000000000000604482015290519081900360640190fd5b84158061118e5750844211155b6111df576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526004602052604090208054600181019091558614611253576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517fcbd06f2e482e52538ba0a2e3b1ec074c1ff826895448b9cf7b33c0abbbe904b36020808301919091526001600160a01b03808c1683850152336060840152608083018b905260a083018a9052881660c0808401919091528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa15801561135b573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b0316146113ca576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b610f618886611f1a565b7fcbd06f2e482e52538ba0a2e3b1ec074c1ff826895448b9cf7b33c0abbbe904b381565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b031660009081526004602052604090205490565b6109a63382612646565b6001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031681565b6001600160a01b0388166114bd576040805162461bcd60e51b815260206004820152601660248201527f624461693a20617070726f76652066726f6d2030783000000000000000000000604482015290519081900360640190fd5b6001600160a01b038716611518576040805162461bcd60e51b815260206004820152601460248201527f624461693a20617070726f766520746f20307830000000000000000000000000604482015290519081900360640190fd5b8415806115255750844211155b611576576040805162461bcd60e51b815260206004820152601460248201527f624461693a207065726d69742d65787069726564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038816600090815260046020526040902080546001810190915586146115ea576040805162461bcd60e51b815260206004820152601360248201527f624461693a20696e76616c69642d6e6f6e636500000000000000000000000000604482015290519081900360640190fd5b600c54604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501528b166060830152608082018a905260a0820189905287151560c0808401919091528351808403909101815260e08301845280519082012061190160f01b610100840152610102830194909452610122808301949094528251808303909401845261014282018084528451948201949094206000909452610162820180845284905260ff87166101828301526101a282018690526101c2820185905291516001926101e2808401939192601f1981019281900390910190855afa1580156116f4573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b031614611763576040805162461bcd60e51b815260206004820152601460248201527f624461693a20696e76616c69642d7065726d6974000000000000000000000000604482015290519081900360640190fd5b600085611771576000611775565b6000195b6001600160a01b03808c166000818152600560209081526040808320948f168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a350505050505050505050565b60005460ff1681565b6040518060400160405280600481526020017f624441490000000000000000000000000000000000000000000000000000000081525081565b600b546001600160a01b03163314611885576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166118e0576040805162461bcd60e51b815260206004820152601760248201527f624461693a2063616e6e6f742073657420746f20307830000000000000000000604482015290519081900360640190fd5b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617909255600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081529284166004840181905260006024850181905291519094929092169263095ea7b39260448083019360209383900390910190829087803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d60208110156119ad57600080fd5b5050600654604080517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b505050506040513d6020811015611a4957600080fd5b50505050565b6000611a5c33848461221f565b50600192915050565b600b546001600160a01b03163314611ac4576040805162461bcd60e51b815260206004820152601460248201527f624461693a206f70206e6f7420616c6c6f776564000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115919091179055565b6007546001600160a01b031681565b600854604080517fc92aecc400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163c92aecc4916004808301926020929190829003018186803b158015610c6457600080fd5b6001600160a01b038216611bbc576040805162461bcd60e51b815260206004820152601860248201527f624461693a20646573742063616e6e6f74206265203078300000000000000000604482015290519081900360640190fd5b611bc68282611c35565b5050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b7f703d2576480f8b8746c2232693aae93ab2bda9c8b68427bce6eff0c6238807ed81565b6006546001600160a01b031681565b6000611a5c338484612aa7565b60005460ff16611c8c576040805162461bcd60e51b815260206004820152601660248201527f624461693a2073797374656d2069732066726f7a656e00000000000000000000604482015290519081900360640190fd5b6000611c96612fff565b90506000611caa838363ffffffff61317716565b600154909150611cc0908463ffffffff612a4f16565b6001556001600160a01b038416600090815260026020526040902054611cec908463ffffffff612a4f16565b6001600160a01b038516600090815260026020908152604080832093909355600390522054611d21908263ffffffff612a4f16565b6001600160a01b0380861660009081526003602090815260408083209490945560065484517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810189905294519316936323b872dd9360648083019491928390030190829087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050506040513d6020811015611dcf57600080fd5b5050600754604080517f3b4da69f0000000000000000000000000000000000000000000000000000000081523060048201526024810186905290516001600160a01b0390921691633b4da69f9160448082019260009290919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600854604080517f049878f30000000000000000000000000000000000000000000000000000000081526004810186905290516001600160a01b03909216935063049878f3925060248082019260009290919082900301818387803b158015611ebb57600080fd5b505af1158015611ecf573d6000803e3d6000fd5b50506040805186815290516001600160a01b0388169350600092507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b6000611f24612fff565b6001600160a01b03841660009081526002602052604081205491925090611f51908363ffffffff6131f316565b6001600160a01b03851660009081526003602052604081205491925090611f7e908363ffffffff61325516565b905080156120e9576000611f98828563ffffffff61327016565b6001600160a01b038088166000908152600360205260408082208790556008548151637f8661a160e01b815260048101889052915194955090921692637f8661a192602480820193929182900301818387803b158015611ff757600080fd5b505af115801561200b573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b15801561206257600080fd5b505af1158015612076573d6000803e3d6000fd5b5050600a546040805163544e462760e11b81526001600160a01b038a8116600483015260248201879052915191909216935063a89c8c4e9250604480830192600092919082900301818387803b1580156120cf57600080fd5b505af11580156120e3573d6000803e3d6000fd5b50505050505b5050505050565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205480612168576040805162461bcd60e51b815260206004820152601360248201527f624441493a2062616420616c6c6f77616e636500000000000000000000000000604482015290519081900360640190fd5b6000198114611a495760408051808201909152601381527f624441493a2062616420616c6c6f77616e63650000000000000000000000000060208201526121b8908290849063ffffffff61328916565b6001600160a01b0385811660008181526005602090815260408083209489168084529482529182902085905581519485529051929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350505050565b6001600160a01b03831661227a576040805162461bcd60e51b815260206004820152601760248201527f426461693a207472616e736665722066726f6d20307830000000000000000000604482015290519081900360640190fd5b6001600160a01b0382166122d5576040805162461bcd60e51b815260206004820152601560248201527f426461693a207472616e7366657220746f203078300000000000000000000000604482015290519081900360640190fd5b60006122df612fff565b6001600160a01b03851660009081526002602090815260408083205460039092528220549293509190612318838563ffffffff6131f316565b9050600061232c838363ffffffff61325516565b90506000612340878763ffffffff6131f316565b905061238c876040518060400160405280601781526020017f624461693a206e6f7420656e6f756774682066756e6473000000000000000000815250876132899092919063ffffffff16565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546123c1908863ffffffff612a4f16565b6001600160a01b0389166000908152600260205260409020556123ea828263ffffffff612a4f16565b925083831115612446576001600160a01b03808a16600090815260036020526040808220829055918a1681522054612428908563ffffffff612a4f16565b6001600160a01b038916600090815260036020526040902055612496565b6001600160a01b03808a166000908152600360205260408082208688039055918a168152205461247c908263ffffffff612a4f16565b6001600160a01b0389166000908152600360205260409020555b81156125f05760006124ae838863ffffffff61327016565b60085460408051637f8661a160e01b81526004810187905290519293506001600160a01b0390911691637f8661a19160248082019260009290919082900301818387803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b5050600a546040805163544e462760e11b81526001600160a01b038f8116600483015260248201879052915191909216935063a89c8c4e9250604480830192600092919082900301818387803b1580156125d657600080fd5b505af11580156125ea573d6000803e3d6000fd5b50505050505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a3505050505050505050565b6000811161269b576040805162461bcd60e51b815260206004820152601260248201527f62446169203a207a65726f20616d6f756e740000000000000000000000000000604482015290519081900360640190fd5b60006126a5612fff565b604080518082018252601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020808301919091526001600160a01b0387166000908152600290915291822054929350909161270a91859063ffffffff61328916565b9050600061271e828463ffffffff61317716565b604080518082018252601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020808301919091526001600160a01b0389166000908152600390915291822054929350909161278391849063ffffffff61328916565b90506000612797828663ffffffff61327016565b905060006127ab828863ffffffff61325516565b6001600160a01b0389166000908152600260209081526040918290208890558151808301909252601b82527f624461693a20746f74616c537570706c7920756e646572666c6f770000000000908201526001549192506128139190899063ffffffff61328916565b6001556001600160a01b038089166000908152600360205260408082208790556008548151637f8661a160e01b8152600481018890529151931692637f8661a19260248084019391929182900301818387803b15801561287257600080fd5b505af1158015612886573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b1580156128dd57600080fd5b505af11580156128f1573d6000803e3d6000fd5b5050600654604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038d81166004830152602482018d9052915191909216935063a9059cbb925060448083019260209291908290030181600087803b15801561296457600080fd5b505af1158015612978573d6000803e3d6000fd5b505050506040513d602081101561298e57600080fd5b50508015612a0457600a546040805163544e462760e11b81526001600160a01b038b81166004830152602482018590529151919092169163a89c8c4e91604480830192600092919082900301818387803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b505050505b6040805188815290516000916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050505050565b81810182811015610aa1576040805162461bcd60e51b815260206004820152600e60248201527f426461693a206f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316612b02576040805162461bcd60e51b815260206004820152601760248201527f426461693a207472616e736665722066726f6d20307830000000000000000000604482015290519081900360640190fd5b6000612b0c612fff565b6001600160a01b03851660009081526002602090815260408083205460039092528220549293509190612b45838563ffffffff6131f316565b90506000612b59838363ffffffff61325516565b905060008084815b8a51811015612e095760006001600160a01b03168b8281518110612b8157fe5b60200260200101516001600160a01b03161415612be5576040805162461bcd60e51b815260206004820152601560248201527f426461693a207472616e7366657220746f203078300000000000000000000000604482015290519081900360640190fd5b612c0b8a8281518110612bf457fe5b602002602001015184612a4f90919063ffffffff16565b9250612c33898b8381518110612c1d57fe5b60200260200101516131f390919063ffffffff16565b9350612c938a8281518110612c4457fe5b6020026020010151600260008e8581518110612c5c57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612a4f90919063ffffffff16565b600260008d8481518110612ca357fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055612cd7858563ffffffff612a4f16565b955086861115612d3a5760009150612cf987600360008e8581518110612c5c57fe5b600360008d8481518110612d0957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550612d90565b8587039150612d5384600360008e8581518110612c5c57fe5b600360008d8481518110612d6357fe5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b8a8181518110612d9c57fe5b60200260200101516001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c8481518110612de457fe5b60200260200101516040518082815260200191505060405180910390a3600101612b61565b5060408051808201909152601781527f624461693a206e6f7420656e6f756774682066756e64730000000000000000006020820152612e51908890849063ffffffff61328916565b6001600160a01b038c1660009081526002602090815260408083209390935560039052208190558315612ff2576000612e90858a63ffffffff61327016565b60085460408051637f8661a160e01b81526004810189905290519293506001600160a01b0390911691637f8661a19160248082019260009290919082900301818387803b158015612ee057600080fd5b505af1158015612ef4573d6000803e3d6000fd5b50506007546040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b03909216935063ef693bed925060448082019260009290919082900301818387803b158015612f4b57600080fd5b505af1158015612f5f573d6000803e3d6000fd5b50505050600a60009054906101000a90046001600160a01b03166001600160a01b031663a89c8c4e8d836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612fd857600080fd5b505af1158015612fec573d6000803e3d6000fd5b50505050505b5050505050505050505050565b600854604080517f20aba08b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916320aba08b916004808301926020929190829003018186803b15801561305d57600080fd5b505afa158015613071573d6000803e3d6000fd5b505050506040513d602081101561308757600080fd5b5051421161310e57600860009054906101000a90046001600160a01b03166001600160a01b031663c92aecc46040518163ffffffff1660e01b815260040160206040518083038186803b1580156130dd57600080fd5b505afa1580156130f1573d6000803e3d6000fd5b505050506040513d602081101561310757600080fd5b5051613172565b600860009054906101000a90046001600160a01b03166001600160a01b0316639f678cca6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561315e57600080fd5b505af1158015610c78573d6000803e3d6000fd5b905090565b60008082116131cd576040805162461bcd60e51b815260206004820152601360248201527f624461693a206469766973696f6e206279203000000000000000000000000000604482015290519081900360640190fd5b816131e4846b033b2e3c9fd0803ce8000000613320565b816131eb57fe5b049392505050565b6000816131e461320f856b033b2e3c9fd0803ce8000000613320565b6132508560016040518060400160405280601381526020017f624461693a206469766973696f6e206279203000000000000000000000000000815250613289565b612a4f565b60008282111561326757506000610aa1565b50808203610aa1565b60006b033b2e3c9fd0803ce80000006131e48484613320565b600081848411156133185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132dd5781810151838201526020016132c5565b50505050905090810190601f16801561330a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008261332f57506000610aa1565b508181028183828161333d57fe5b0414610aa1576040805162461bcd60e51b815260206004820152601d60248201527f624461693a206d756c7469706c69636174696f6e206f766572666c6f77000000604482015290519081900360640190fdfea265627a7a723158200393be7c3b5ab2037e88e0dee20d88ed4adba8e53af7d1f6a002507d5e6f203864736f6c634300050c0032

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

0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf700000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b00000000000000000000000013a36fef375cb8f3fdb776fea090e3016a7c3c600000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : dai_ (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : daiJoin_ (address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
Arg [2] : pot_ (address): 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7
Arg [3] : vat_ (address): 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B
Arg [4] : swapper_ (address): 0x13a36FEf375cB8f3FDB776FeA090E3016a7C3C60
Arg [5] : chainId_ (uint256): 1

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28
Arg [2] : 000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7
Arg [3] : 00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b
Arg [4] : 00000000000000000000000013a36fef375cb8f3fdb776fea090e3016a7c3c60
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed Bytecode Sourcemap

6171:22887:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6171:22887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12043:83;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12043:83:0;;:::i;:::-;;6336:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6336:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10649:278;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10649:278:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20429:155;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20429:155:0;-1:-1:-1;;;;;20429:155:0;;:::i;6301:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;13146:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13146:147:0;-1:-1:-1;;;;;13146:147:0;;:::i;9952:82::-;;;:::i;11506:244::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11506:244:0;;;;;;;;;;;;;;;;;:::i;18984:987::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;18984:987:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6820:26::-;;;:::i;:::-;;;;-1:-1:-1;;;;;6820:26:0;;;;;;;;;;;;;;7040:108;;;:::i;6259:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6884:31;;;:::i;6795:18::-;;;:::i;14759:412::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;14759:412:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14759:412:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14759:412:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14759:412:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14759:412:0;;;;;;;;-1:-1:-1;14759:412:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;14759:412:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14759:412:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14759:412:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14759:412:0;;-1:-1:-1;14759:412:0;;-1:-1:-1;;;;;14759:412:0:i;10127:82::-;;;:::i;6770:18::-;;;:::i;12837:75::-;;;:::i;6440:36::-;;;:::i;17373:1051::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17373:1051:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7259:107::-;;;:::i;8813:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8813:112:0;-1:-1:-1;;;;;8813:112:0;;:::i;15241:107::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15241:107:0;-1:-1:-1;;;;;15241:107:0;;:::i;13576:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13576:83:0;;:::i;9580:104::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9580:104:0;-1:-1:-1;;;;;9580:104:0;;:::i;6855:20::-;;;:::i;15866:1196::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;15866:1196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6236:16::-;;;:::i;6395:38::-;;;:::i;21092:317::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21092:317:0;-1:-1:-1;;;;;21092:317:0;;:::i;9275:181::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9275:181:0;;;;;;;;:::i;20795:83::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20795:83:0;;;;:::i;6740:23::-;;;:::i;9777:82::-;;;:::i;12516:160::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12516:160:0;;;;;;;;:::i;10326:178::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10326:178:0;;;;;;;;;;:::i;7478:106::-;;;:::i;6713:20::-;;;:::i;14016:201::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14016:201:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14016:201:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14016:201:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14016:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14016:201:0;;;;;;;;-1:-1:-1;14016:201:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;14016:201:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14016:201:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14016:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14016:201:0;;-1:-1:-1;14016:201:0;;-1:-1:-1;;;;;14016:201:0:i;12043:83::-;12093:25;12099:10;12111:6;12093:5;:25::i;:::-;12043:83;:::o;6336:52::-;;;;;;;;;;;;;;;;;;;:::o;10649:278::-;10717:4;-1:-1:-1;;;;;10742:21:0;;10734:54;;;;;-1:-1:-1;;;10734:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10813:10;10801:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10801:32:0;;;;;;;;;;;;:41;;;10858:37;;;;;;;10801:32;;10813:10;10858:37;;;;;;;;;;;-1:-1:-1;10915:4:0;10649:278;;;;;:::o;20429:155::-;20146:5;;-1:-1:-1;;;;;20146:5:0;20132:10;:19;20124:52;;;;;-1:-1:-1;;;20124:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20501:20:0;;20493:58;;;;;-1:-1:-1;;;20493:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20562:5;:14;;;;-1:-1:-1;;;;;20562:14:0;;;;;;;;;;20429:155::o;6301:26::-;;;;:::o;13146:147::-;-1:-1:-1;;;;;13203:18:0;;13195:55;;;;;-1:-1:-1;;;13195:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13261:24;13268:10;13280:4;13261:6;:24::i;9952:82::-;10017:3;;:9;;;;;;;;9990:7;;-1:-1:-1;;;;;10017:3:0;;:7;;:9;;;;;;;;;;;;;;:3;:9;;;5:2:-1;;;;30:1;27;20:12;5:2;10017:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10017:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10017:9:0;;-1:-1:-1;9952:82:0;:::o;11506:244::-;11615:4;11637:34;11644:6;11652:10;11664:6;11637;:34::i;:::-;11682:36;11692:6;11700:9;11711:6;11682:9;:36::i;:::-;-1:-1:-1;11738:4:0;11506:244;;;;;:::o;18984:987::-;-1:-1:-1;;;;;19193:20:0;;19185:52;;;;;-1:-1:-1;;;19185:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19256:11;;;:28;;;19278:6;19271:3;:13;;19256:28;19248:61;;;;;-1:-1:-1;;;19248:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19337:15:0;;;;;;:7;:15;;;;;:17;;;;;;;;19328:26;;19320:58;;;;;-1:-1:-1;;;19320:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19496:16;;19563:241;;;7518:66;19563:241;;;;;;;;-1:-1:-1;;;;;19563:241:0;;;;;;19673:10;19563:241;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19563:241:0;;;;;19531:292;;;;;;-1:-1:-1;;;19432:406:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19432:406:0;;;;;;19408:441;;;;;;;;;19391:14;19880:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19563:241;;-1:-1:-1;;19880:26:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19880:26:0;;;;;;;;-1:-1:-1;;;;;19870:36:0;:6;-1:-1:-1;;;;;19870:36:0;;19862:69;;;;;-1:-1:-1;;;19862:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19942:21;19948:6;19956;19942:5;:21::i;:::-;18984:987;;;;;;;;:::o;6820:26::-;;;-1:-1:-1;;;;;6820:26:0;;:::o;7040:108::-;7082:66;7040:108;:::o;6259:35::-;6292:2;6259:35;:::o;6884:31::-;;;;:::o;6795:18::-;;;-1:-1:-1;;;;;6795:18:0;;:::o;14759:412::-;14902:4;14919:13;14950:9;14945:100;14965:10;:17;14961:1;:21;14945:100;;;15012:21;15022:7;15030:1;15022:10;;;;;;;;;;;;;;15012:5;:9;;:21;;;;:::i;:::-;15004:29;-1:-1:-1;14984:3:0;;14945:100;;;;15057:33;15064:6;15072:10;15084:5;15057:6;:33::i;:::-;15101:38;15111:6;15119:10;15131:7;15101:9;:38::i;:::-;-1:-1:-1;15159:4:0;;14759:412;-1:-1:-1;;;;14759:412:0:o;10127:82::-;10192:3;;:9;;;;;;;;10165:7;;-1:-1:-1;;;;;10192:3:0;;:7;;:9;;;;;;;;;;;;;;:3;:9;;;5:2:-1;;;;30:1;27;20:12;6770:18:0;;;-1:-1:-1;;;;;6770:18:0;;:::o;12837:75::-;12874:30;12881:10;12893;12874:6;:30::i;:::-;12837:75::o;6440:36::-;;;;;;;;;;;;;;;;;;;:::o;17373:1051::-;-1:-1:-1;;;;;17581:18:0;;17573:55;;;;;-1:-1:-1;;;17573:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17647:20:0;;17639:53;;;;;-1:-1:-1;;;17639:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17711:11;;;:28;;;17733:6;17726:3;:13;;17711:28;17703:61;;;;;-1:-1:-1;;;17703:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17792:15:0;;;;;;:7;:15;;;;;:17;;;;;;;;17783:26;;17775:58;;;;;-1:-1:-1;;;17775:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17951:16;;18018:240;;;7300:66;18018:240;;;;;;;;-1:-1:-1;;;;;18018:240:0;;;;;;;18129:10;18018:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18018:240:0;;;;;17986:291;;;;;;-1:-1:-1;;;17887:405:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17887:405:0;;;;;;17863:440;;;;;;;;;17846:14;18334:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18018:240;;-1:-1:-1;;18334:26:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18334:26:0;;;;;;;;-1:-1:-1;;;;;18324:36:0;:6;-1:-1:-1;;;;;18324:36:0;;18316:69;;;;;-1:-1:-1;;;18316:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18396:20;18403:6;18411:4;18396:6;:20::i;7259:107::-;7300:66;7259:107;:::o;8813:112::-;-1:-1:-1;;;;;8899:18:0;8872:7;8899:18;;;:9;:18;;;;;;;8813:112::o;15241:107::-;-1:-1:-1;;;;;15324:16:0;15297:7;15324:16;;;:7;:16;;;;;;;15241:107::o;13576:83::-;13626:25;13632:10;13644:6;13626:5;:25::i;9580:104::-;-1:-1:-1;;;;;9662:14:0;9635:7;9662:14;;;:5;:14;;;;;;;9580:104::o;6855:20::-;;;-1:-1:-1;;;;;6855:20:0;;:::o;15866:1196::-;-1:-1:-1;;;;;16098:20:0;;16090:55;;;;;-1:-1:-1;;;16090:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16164:21:0;;16156:54;;;;;-1:-1:-1;;;16156:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16229:11;;;:28;;;16251:6;16244:3;:13;;16229:28;16221:61;;;;;-1:-1:-1;;;16221:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16310:15:0;;;;;;:7;:15;;;;;:17;;;;;;;;16301:26;;16293:58;;;;;-1:-1:-1;;;16293:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16469:16;;16536:241;;;7082:66;16536:241;;;;;;;;-1:-1:-1;;;;;16536:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16536:241:0;;;;;16504:292;;;;;;-1:-1:-1;;;16405:406:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16405:406:0;;;;;;16381:441;;;;;;;;;16364:14;16853:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16536:241;;-1:-1:-1;;16853:26:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16853:26:0;;;;;;;;-1:-1:-1;;;;;16843:36:0;:6;-1:-1:-1;;;;;16843:36:0;;16835:69;;;;;-1:-1:-1;;;16835:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16915:14;16932:7;:25;;16956:1;16932:25;;;-1:-1:-1;;16932:25:0;-1:-1:-1;;;;;16968:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;17021:33;;;;;;;16915:42;;-1:-1:-1;16968:28:0;;:19;;17021:33;;;;;;;;;15866:1196;;;;;;;;;;:::o;6236:16::-;;;;;;:::o;6395:38::-;;;;;;;;;;;;;;;;;;;:::o;21092:317::-;20146:5;;-1:-1:-1;;;;;20146:5:0;20132:10;:19;20124:52;;;;;-1:-1:-1;;;20124:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21168:22:0;;21160:58;;;;;-1:-1:-1;;;21160:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21258:7;;;-1:-1:-1;;;;;21277:31:0;;;;;;;;;;21321:3;;:35;;;;;;21258:7;;;21321:35;;;;;;21229:18;21321:35;;;;;;;;21258:7;;21321:3;;;;;:11;;:35;;;;;;;;;;;;;;;;:3;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;21321:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21321:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21367:3:0;;:34;;;;;;-1:-1:-1;;;;;21367:34:0;;;;;;;-1:-1:-1;;21367:34:0;;;;;;:3;;;;;:11;;:34;;;;;21321:35;;21367:34;;;;;;;:3;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;21367:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21367:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;21092:317:0:o;9275:181::-;9364:4;9386:40;9396:10;9408:9;9419:6;9386:9;:40::i;:::-;-1:-1:-1;9444:4:0;9275:181;;;;:::o;20795:83::-;20146:5;;-1:-1:-1;;;;;20146:5:0;20132:10;:19;20124:52;;;;;-1:-1:-1;;;20124:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20855:4;:15;;;;20862:8;;20855:15;;;;;;20795:83::o;6740:23::-;;;-1:-1:-1;;;;;6740:23:0;;:::o;9777:82::-;9842:3;;:9;;;;;;;;9815:7;;-1:-1:-1;;;;;9842:3:0;;:7;;:9;;;;;;;;;;;;;;:3;:9;;;5:2:-1;;;;30:1;27;20:12;12516:160:0;-1:-1:-1;;;;;12591:18:0;;12583:55;;;;;-1:-1:-1;;;12583:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12649:19;12655:4;12661:6;12649:5;:19::i;:::-;12516:160;;:::o;10326:178::-;-1:-1:-1;;;;;10464:23:0;;;10432:7;10464:23;;;:11;:23;;;;;;;;:32;;;;;;;;;;;;;10326:178::o;7478:106::-;7518:66;7478:106;:::o;6713:20::-;;;-1:-1:-1;;;;;6713:20:0;;:::o;14016:201::-;14123:4;14145:42;14155:10;14167;14179:7;14145:9;:42::i;26506:519::-;26579:4;;;;26571:39;;;;;-1:-1:-1;;;26571:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26623:9;26635:6;:4;:6::i;:::-;26623:18;-1:-1:-1;26652:11:0;26666:14;:6;26623:18;26666:14;:11;:14;:::i;:::-;26707:11;;26652:28;;-1:-1:-1;26707:23:0;;26723:6;26707:23;:15;:23;:::i;:::-;26693:11;:37;-1:-1:-1;;;;;26759:15:0;;;;;;:9;:15;;;;;;:27;;26779:6;26759:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;26741:15:0;;;;;;:9;:15;;;;;;;;:45;;;;26811:5;:11;;;;:20;;26827:3;26811:20;:15;:20;:::i;:::-;-1:-1:-1;;;;;26797:11:0;;;;;;;:5;:11;;;;;;;;:34;;;;26844:3;;:51;;;;;26861:10;26844:51;;;;26881:4;26844:51;;;;;;;;;;;;:3;;;:16;;:51;;;;;;;;;;;;;;:3;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;26844:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26844:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;26906:7:0;;:35;;;;;;26927:4;26906:35;;;;;;;;;;;;-1:-1:-1;;;;;26906:7:0;;;;:12;;:35;;;;;:7;;:35;;;;;;;;:7;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;26906:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26952:3:0;;:13;;;;;;;;;;;;;;-1:-1:-1;;;;;26952:3:0;;;;-1:-1:-1;26952:8:0;;-1:-1:-1;26952:13:0;;;;;:3;;:13;;;;;;;;:3;;:13;;;5:2:-1;;;;30:1;27;20:12;5:2;26952:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26983:34:0;;;;;;;;-1:-1:-1;;;;;26983:34:0;;;-1:-1:-1;27000:1:0;;-1:-1:-1;26983:34:0;;;;;;;;;26506:519;;;;:::o;27225:487::-;27292:9;27304:6;:4;:6::i;:::-;-1:-1:-1;;;;;27338:18:0;;27321:14;27338:18;;;:9;:18;;;;;;27292;;-1:-1:-1;27321:14:0;27338:28;;27292:18;27338:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;27395:14:0;;27377:15;27395:14;;;:5;:14;;;;;;27321:45;;-1:-1:-1;27377:15:0;27395:32;;27321:45;27395:32;:24;:32;:::i;:::-;27377:50;-1:-1:-1;27444:11:0;;27440:265;;27472:20;27495:15;:7;27508:1;27495:15;:12;:15;:::i;:::-;-1:-1:-1;;;;;27525:14:0;;;;;;;:5;:14;;;;;;:23;;;27565:3;;:17;;-1:-1:-1;;;27565:17:0;;;;;;;;;;27472:38;;-1:-1:-1;27565:3:0;;;;:8;;:17;;;;;27525:14;27565:17;;;;;;27525:14;27565:3;:17;;;5:2:-1;;;;30:1;27;20:12;5:2;27565:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27597:7:0;;:41;;;-1:-1:-1;;;27597:41:0;;27618:4;27597:41;;;;;;;;;;;;-1:-1:-1;;;;;27597:7:0;;;;-1:-1:-1;27597:12:0;;-1:-1:-1;27597:41:0;;;;;:7;;:41;;;;;;;;:7;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;27597:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27653:7:0;;:40;;;-1:-1:-1;;;27653:40:0;;-1:-1:-1;;;;;27653:40:0;;;;;;;;;;;;;;;:7;;;;;-1:-1:-1;27653:20:0;;-1:-1:-1;27653:40:0;;;;;:7;;:40;;;;;;;:7;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;27653:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27653:40:0;;;;27440:265;;27225:487;;;;;:::o;21809:377::-;-1:-1:-1;;;;;21905:19:0;;;21893:9;21905:19;;;:11;:19;;;;;;;;:27;;;;;;;;;;21951:5;21943:37;;;;;-1:-1:-1;;;21943:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21995:1:0;:16;21991:188;;22058:36;;;;;;;;;;;;;;;;;;;:1;;22064:6;;22058:36;:5;:36;:::i;:::-;-1:-1:-1;;;;;22028:19:0;;;;;;;:11;:19;;;;;;;;:27;;;;;;;;;;;;;:66;;;22114:53;;;;;;;22028:27;;:19;;22114:53;;;;;;;;;;21809:377;;;;:::o;22577:1371::-;-1:-1:-1;;;;;22689:20:0;;22681:56;;;;;-1:-1:-1;;;22681:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22756:23:0;;22748:57;;;;;-1:-1:-1;;;22748:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22818:9;22830:6;:4;:6::i;:::-;-1:-1:-1;;;;;22871:17:0;;22847:21;22871:17;;;:9;:17;;;;;;;;;22922:5;:13;;;;;;22818:18;;-1:-1:-1;22871:17:0;22922:13;22960:23;22871:17;22818:18;22960:23;:20;:23;:::i;:::-;22946:37;-1:-1:-1;23008:18:0;23029:27;:12;22946:37;23029:27;:22;:27;:::i;:::-;23008:48;-1:-1:-1;23067:25:0;23095:16;:6;23109:1;23095:16;:13;:16;:::i;:::-;23067:44;;23144:89;23176:6;23144:89;;;;;;;;;;;;;;;;;:13;:17;;:89;;;;;:::i;:::-;-1:-1:-1;;;;;23124:17:0;;;;;;;:9;:17;;;;;;:109;;;;23267:20;;;;;;;:32;;23292:6;23267:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23244:20:0;;;;;;:9;:20;;;;;:55;23318:33;:10;23333:17;23318:33;:14;:33;:::i;:::-;23312:39;;23372:12;23366:3;:18;23362:276;;;-1:-1:-1;;;;;23401:13:0;;;23417:1;23401:13;;;:5;:13;;;;;;:17;;;23452:16;;;;;;;:34;;23473:12;23452:34;:20;:34;:::i;:::-;-1:-1:-1;;;;;23433:16:0;;;;;;:5;:16;;;;;:53;23362:276;;;-1:-1:-1;;;;;23519:13:0;;;;;;;:5;:13;;;;;;23535:18;;;23519:34;;23587:16;;;;;;;:39;;23608:17;23587:39;:20;:39;:::i;:::-;-1:-1:-1;;;;;23568:16:0;;;;;;:5;:16;;;;;:58;23362:276;23654:14;;23650:238;;23685:20;23708:18;:10;23724:1;23708:18;:15;:18;:::i;:::-;23743:3;;:20;;;-1:-1:-1;;;23743:20:0;;;;;;;;;;23685:41;;-1:-1:-1;;;;;;23743:3:0;;;;:8;;:20;;;;;:3;;:20;;;;;;;;:3;;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;23743:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23778:7:0;;:41;;;-1:-1:-1;;;23778:41:0;;23799:4;23778:41;;;;;;;;;;;;-1:-1:-1;;;;;23778:7:0;;;;-1:-1:-1;23778:12:0;;-1:-1:-1;23778:41:0;;;;;:7;;:41;;;;;;;;:7;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;23778:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23834:7:0;;:42;;;-1:-1:-1;;;23834:42:0;;-1:-1:-1;;;;;23834:42:0;;;;;;;;;;;;;;;:7;;;;;-1:-1:-1;23834:20:0;;-1:-1:-1;23834:42:0;;;;;:7;;:42;;;;;;;:7;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;23834:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23834:42:0;;;;23650:238;;23922:9;-1:-1:-1;;;;;23905:35:0;23914:6;-1:-1:-1;;;;;23905:35:0;;23933:6;23905:35;;;;;;;;;;;;;;;;;;22577:1371;;;;;;;;;:::o;28135:920::-;28220:1;28211:6;:10;28203:41;;;;;-1:-1:-1;;;28203:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28257:9;28269:6;:4;:6::i;:::-;28301:94;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28301:18:0;;28286:12;28301:18;;;:9;:18;;;;;;;28257;;-1:-1:-1;28286:12:0;;28301:94;;28338:6;;28301:94;:22;:94;:::i;:::-;28286:109;-1:-1:-1;28406:12:0;28421;28286:109;28431:1;28421:12;:9;:12;:::i;:::-;28462:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28462:14:0;;28444:15;28462:14;;;:5;:14;;;;;;;28406:27;;-1:-1:-1;28444:15:0;;28462:51;;28406:27;;28462:51;:18;:51;:::i;:::-;28444:69;-1:-1:-1;28524:16:0;28543:15;28444:69;28556:1;28543:15;:12;:15;:::i;:::-;28524:34;-1:-1:-1;28569:21:0;28593:26;28524:34;28612:6;28593:26;:18;:26;:::i;:::-;-1:-1:-1;;;;;28632:18:0;;;;;;:9;:18;;;;;;;;;:25;;;28682:54;;;;;;;;;;;;;;;;:11;;28569:50;;-1:-1:-1;28682:54:0;;:11;28698:6;;28682:54;:15;:54;:::i;:::-;28668:11;:68;-1:-1:-1;;;;;28747:14:0;;;;;;;:5;:14;;;;;;:21;;;28781:3;;:17;;-1:-1:-1;;;28781:17:0;;;;;;;;;;:3;;;:8;;:17;;;;;28747:14;;28781:17;;;;;;28747:14;28781:3;:17;;;5:2:-1;;;;30:1;27;20:12;5:2;28781:17:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28809:7:0;;:37;;;-1:-1:-1;;;28809:37:0;;28830:4;28809:37;;;;;;;;;;;;-1:-1:-1;;;;;28809:7:0;;;;-1:-1:-1;28809:12:0;;-1:-1:-1;28809:37:0;;;;;:7;;:37;;;;;;;;:7;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;28809:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28857:3:0;;:29;;;;;;-1:-1:-1;;;;;28857:29:0;;;;;;;;;;;;;;;:3;;;;;-1:-1:-1;28857:12:0;;-1:-1:-1;28857:29:0;;;;;;;;;;;;;;:3;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28857:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28857:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;28903:17:0;;28899:94;;28937:7;;:44;;;-1:-1:-1;;;28937:44:0;;-1:-1:-1;;;;;28937:44:0;;;;;;;;;;;;;;;:7;;;;;:20;;:44;;;;;:7;;:44;;;;;;;:7;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;28937:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28937:44:0;;;;28899:94;29010:37;;;;;;;;29036:1;;-1:-1:-1;;;;;29010:37:0;;;;;;;;;;;;28135:920;;;;;;;;:::o;4365:162::-;4449:5;;;4473:6;;;;4465:33;;;;;-1:-1:-1;;;4465:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24423:1738;-1:-1:-1;;;;;24575:20:0;;24567:56;;;;;-1:-1:-1;;;24567:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24636:9;24648:6;:4;:6::i;:::-;-1:-1:-1;;;;;24689:17:0;;24665:21;24689:17;;;:9;:17;;;;;;;;;24740:5;:13;;;;;;24636:18;;-1:-1:-1;24689:17:0;24740:13;24778:23;24689:17;24636:18;24778:23;:20;:23;:::i;:::-;24764:37;-1:-1:-1;24826:18:0;24847:27;:12;24764:37;24847:27;:22;:27;:::i;:::-;24826:48;-1:-1:-1;24885:25:0;;24966:12;24885:25;24989:796;25009:10;:17;25005:1;:21;24989:796;;;25081:1;-1:-1:-1;;;;;25056:27:0;:10;25067:1;25056:13;;;;;;;;;;;;;;-1:-1:-1;;;;;25056:27:0;;;25048:61;;;;;-1:-1:-1;;;25048:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25132:21;25142:7;25150:1;25142:10;;;;;;;;;;;;;;25132:5;:9;;:21;;;;:::i;:::-;25124:29;;25190:20;25208:1;25190:7;25198:1;25190:10;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;25170:40;;25252;25281:7;25289:1;25281:10;;;;;;;;;;;;;;25252:9;:24;25262:10;25273:1;25262:13;;;;;;;;;;;;;;-1:-1:-1;;;;;25252:24:0;-1:-1:-1;;;;;25252:24:0;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;25225:9;:24;25235:10;25246:1;25235:13;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25225:24:0;;;;;;;;;;;-1:-1:-1;25225:24:0;:67;25315:33;:10;25330:17;25315:33;:14;:33;:::i;:::-;25309:39;;25373:12;25367:3;:18;25363:346;;;25417:1;25406:12;;25460:38;25485:12;25460:5;:20;25466:10;25477:1;25466:13;;;;;;;25460:38;25437:5;:20;25443:10;25454:1;25443:13;;;;;;;;;;;;;;-1:-1:-1;;;;;25437:20:0;-1:-1:-1;;;;;25437:20:0;;;;;;;;;;;;:61;;;;25363:346;;;25565:3;25550:12;:18;25539:29;;25610:83;25657:17;25610:5;:20;25616:10;25627:1;25616:13;;;;;;;25610:83;25587:5;:20;25593:10;25604:1;25593:13;;;;;;;;;;;;;;-1:-1:-1;;;;;25587:20:0;-1:-1:-1;;;;;25587:20:0;;;;;;;;;;;;:106;;;;25363:346;25747:10;25758:1;25747:13;;;;;;;;;;;;;;-1:-1:-1;;;;;25730:43:0;25739:6;-1:-1:-1;;;;;25730:43:0;;25762:7;25770:1;25762:10;;;;;;;;;;;;;;25730:43;;;;;;;;;;;;;;;;;;25028:3;;24989:796;;;-1:-1:-1;25817:51:0;;;;;;;;;;;;;;;;;;;:13;;25835:5;;25817:51;:17;:51;:::i;:::-;-1:-1:-1;;;;;25797:17:0;;;;;;:9;:17;;;;;;;;:71;;;;25879:5;:13;;;:24;;;25920:14;;25916:238;;25951:20;25974:18;:10;25990:1;25974:18;:15;:18;:::i;:::-;26009:3;;:20;;;-1:-1:-1;;;26009:20:0;;;;;;;;;;25951:41;;-1:-1:-1;;;;;;26009:3:0;;;;:8;;:20;;;;;:3;;:20;;;;;;;;:3;;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;26009:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26044:7:0;;:41;;;-1:-1:-1;;;26044:41:0;;26065:4;26044:41;;;;;;;;;;;;-1:-1:-1;;;;;26044:7:0;;;;-1:-1:-1;26044:12:0;;-1:-1:-1;26044:41:0;;;;;:7;;:41;;;;;;;;:7;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;26044:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26044:41:0;;;;26100:7;;;;;;;;;-1:-1:-1;;;;;26100:7:0;-1:-1:-1;;;;;26100:20:0;;26121:6;26129:12;26100:42;;;;;;;;;;;;;-1:-1:-1;;;;;26100:42:0;-1:-1:-1;;;;;26100:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26100:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26100:42:0;;;;25916:238;;24423:1738;;;;;;;;;;;:::o;21521:109::-;21588:3;;:9;;;;;;;;21555:7;;-1:-1:-1;;;;;21588:3:0;;:7;;:9;;;;;;;;;;;;;;:3;:9;;;5:2:-1;;;;30:1;27;20:12;5:2;21588:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21588:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21588:9:0;21582:3;:15;:40;;21613:3;;;;;;;;;-1:-1:-1;;;;;21613:3:0;-1:-1:-1;;;;;21613:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;21613:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21613:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21613:9:0;21582:40;;;21600:3;;;;;;;;;-1:-1:-1;;;;;21600:3:0;-1:-1:-1;;;;;21600:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21600:10:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;21582:40:0;21575:47;;21521:109;:::o;5370:163::-;5429:7;5461:1;5457;:5;5449:37;;;;;-1:-1:-1;;;5449:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5524:1;5506:15;5510:1;4350:6;5506:3;:15::i;:::-;:19;;;;;;;5370:163;-1:-1:-1;;;5370:163:0:o;5600:154::-;5661:7;5745:1;5688:54;5692:15;5696:1;4350:6;5692:3;:15::i;:::-;5709:32;5713:1;5716;5709:32;;;;;;;;;;;;;;;;;:3;:32::i;:::-;5688:3;:54::i;4731:191::-;4795:7;4823:1;4819;:5;4815:100;;;-1:-1:-1;4856:1:0;4841:17;;4815:100;-1:-1:-1;4898:5:0;;;4891:12;;5178:113;5237:7;4350:6;5264:9;5268:1;5271;5264:3;:9::i;4535:188::-;4642:7;4683:6;4675;;;;4667:23;;;;-1:-1:-1;;;4667:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4667:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4710:5:0;;;4535:188::o;4930:240::-;4988:9;5014:6;5010:47;;-1:-1:-1;5044:1:0;5037:8;;5010:47;-1:-1:-1;5073:5:0;;;5077:1;5073;:5;:1;5097:5;;;;;:10;5089:52;;;;;-1:-1:-1;;;5089:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://0393be7c3b5ab2037e88e0dee20d88ed4adba8e53af7d1f6a002507d5e6f2038
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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