ETH Price: $1,982.85 (-4.86%)

Contract

0x268C4bb57f18b04a7380e3EeEEcAeC377C31c850
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cast112431762020-11-12 14:00:101940 days ago1605189610IN
0x268C4bb5...77C31c850
0 ETH0.1664318764
Schedule112194462020-11-08 22:19:271944 days ago1604873967IN
0x268C4bb5...77C31c850
0 ETH0.0015508918

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
-112050482020-11-06 17:08:451946 days ago1604682525
0x268C4bb5...77C31c850
 Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DssSpell

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2020-11-06
*/

// hevm: flattened sources of src/DssSpell.sol
pragma solidity =0.5.12 >=0.5.12;

////// lib/dss-interfaces/src/dapp/DSPauseAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/dapphub/ds-pause
interface DSPauseAbstract {
    function setOwner(address) external;
    function setAuthority(address) external;
    function setDelay(uint256) external;
    function plans(bytes32) external view returns (bool);
    function proxy() external view returns (address);
    function delay() external view returns (uint256);
    function plot(address, bytes32, bytes calldata, uint256) external;
    function drop(address, bytes32, bytes calldata, uint256) external;
    function exec(address, bytes32, bytes calldata, uint256) external returns (bytes memory);
}

////// lib/dss-interfaces/src/dss/CatAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/cat.sol
interface CatAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function box() external view returns (uint256);
    function litter() external view returns (uint256);
    function ilks(bytes32) external view returns (address, uint256, uint256);
    function live() external view returns (uint256);
    function vat() external view returns (address);
    function vow() external view returns (address);
    function file(bytes32, address) external;
    function file(bytes32, uint256) external;
    function file(bytes32, bytes32, uint256) external;
    function file(bytes32, bytes32, address) external;
    function bite(bytes32, address) external returns (uint256);
    function claw(uint256) external;
    function cage() external;
}
////// lib/dss-interfaces/src/dss/ChainlogAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss-chain-log
interface ChainlogAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function keys() external view returns (bytes32[] memory);
    function version() external view returns (string memory);
    function ipfs() external view returns (string memory);
    function setVersion(string calldata) external;
    function setSha256sum(string calldata) external;
    function setIPFS(string calldata) external;
    function setAddress(bytes32,address) external;
    function removeAddress(bytes32) external;
    function count() external view returns (uint256);
    function get(uint256) external view returns (bytes32,address);
    function list() external view returns (bytes32[] memory);
    function getAddress(bytes32) external view returns (address);
}

////// lib/dss-interfaces/src/dss/FlipAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/flip.sol
interface FlipAbstract {
    function wards(address) external view returns (uint256);
    function rely(address usr) external;
    function deny(address usr) external;
    function bids(uint256) external view returns (uint256, uint256, address, uint48, uint48, address, address, uint256);
    function vat() external view returns (address);
    function cat() external view returns (address);
    function ilk() external view returns (bytes32);
    function beg() external view returns (uint256);
    function ttl() external view returns (uint48);
    function tau() external view returns (uint48);
    function kicks() external view returns (uint256);
    function file(bytes32, uint256) external;
    function kick(address, address, uint256, uint256, uint256) external returns (uint256);
    function tick(uint256) external;
    function tend(uint256, uint256, uint256) external;
    function dent(uint256, uint256, uint256) external;
    function deal(uint256) external;
    function yank(uint256) external;
}

////// lib/dss-interfaces/src/dss/GemJoinAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/join.sol
interface GemJoinAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function vat() external view returns (address);
    function ilk() external view returns (bytes32);
    function gem() external view returns (address);
    function dec() external view returns (uint256);
    function live() external view returns (uint256);
    function cage() external;
    function join(address, uint256) external;
    function exit(address, uint256) external;
}

////// lib/dss-interfaces/src/dss/IlkRegistryAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/ilk-registry
interface IlkRegistryAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function vat() external view returns (address);
    function cat() external view returns (address);
    function spot() external view returns (address);
    function ilkData(bytes32) external view returns (
        uint256, address, address, address, address, uint256, string memory, string memory
    );
    function ilks() external view returns (bytes32[] memory);
    function ilks(uint) external view returns (bytes32);
    function add(address) external;
    function remove(bytes32) external;
    function update(bytes32) external;
    function removeAuth(bytes32) external;
    function file(bytes32, address) external;
    function file(bytes32, bytes32, address) external;
    function file(bytes32, bytes32, uint256) external;
    function file(bytes32, bytes32, string calldata) external;
    function count() external view returns (uint256);
    function list() external view returns (bytes32[] memory);
    function list(uint256, uint256) external view returns (bytes32[] memory);
    function get(uint256) external view returns (bytes32);
    function info(bytes32) external view returns (
        string memory, string memory, uint256, address, address, address, address
    );
    function pos(bytes32) external view returns (uint256);
    function gem(bytes32) external view returns (address);
    function pip(bytes32) external view returns (address);
    function join(bytes32) external view returns (address);
    function flip(bytes32) external view returns (address);
    function dec(bytes32) external view returns (uint256);
    function symbol(bytes32) external view returns (string memory);
    function name(bytes32) external view returns (string memory);
}

////// lib/dss-interfaces/src/dss/JugAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/jug.sol
interface JugAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function ilks(bytes32) external view returns (uint256, uint256);
    function vat() external view returns (address);
    function vow() external view returns (address);
    function base() external view returns (address);
    function init(bytes32) external;
    function file(bytes32, bytes32, uint256) external;
    function file(bytes32, uint256) external;
    function file(bytes32, address) external;
    function drip(bytes32) external returns (uint256);
}

////// lib/dss-interfaces/src/dss/MedianAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/median
interface MedianAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function age() external view returns (uint32);
    function wat() external view returns (bytes32);
    function bar() external view returns (uint256);
    function orcl(address) external view returns (uint256);
    function bud(address) external view returns (uint256);
    function slot(uint8) external view returns (address);
    function read() external view returns (uint256);
    function peek() external view returns (uint256, bool);
    function lift(address[] calldata) external;
    function drop(address[] calldata) external;
    function setBar(uint256) external;
    function kiss(address) external;
    function diss(address) external;
    function kiss(address[] calldata) external;
    function diss(address[] calldata) external;
    function poke(uint256[] calldata, uint256[] calldata, uint8[] calldata, bytes32[] calldata, bytes32[] calldata) external;
}

////// lib/dss-interfaces/src/dss/OsmAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/osm
interface OsmAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function stopped() external view returns (uint256);
    function src() external view returns (address);
    function hop() external view returns (uint16);
    function zzz() external view returns (uint64);
    function cur() external view returns (uint128, uint128);
    function nxt() external view returns (uint128, uint128);
    function bud(address) external view returns (uint256);
    function stop() external;
    function start() external;
    function change(address) external;
    function step(uint16) external;
    function void() external;
    function pass() external view returns (bool);
    function poke() external;
    function peek() external view returns (bytes32, bool);
    function peep() external view returns (bytes32, bool);
    function read() external view returns (bytes32);
    function kiss(address) external;
    function diss(address) external;
    function kiss(address[] calldata) external;
    function diss(address[] calldata) external;
}

////// lib/dss-interfaces/src/dss/OsmMomAbstract.sol
/* pragma solidity >=0.5.12; */


// https://github.com/makerdao/osm-mom
interface OsmMomAbstract {
    function owner() external view returns (address);
    function authority() external view returns (address);
    function osms(bytes32) external view returns (address);
    function setOsm(bytes32, address) external;
    function setOwner(address) external;
    function setAuthority(address) external;
    function stop(bytes32) external;
}

////// lib/dss-interfaces/src/dss/SpotAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/spot.sol
interface SpotAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function ilks(bytes32) external view returns (address, uint256);
    function vat() external view returns (address);
    function par() external view returns (uint256);
    function live() external view returns (uint256);
    function file(bytes32, bytes32, address) external;
    function file(bytes32, uint256) external;
    function file(bytes32, bytes32, uint256) external;
    function poke(bytes32) external;
    function cage() external;
}

////// lib/dss-interfaces/src/dss/VatAbstract.sol
/* pragma solidity >=0.5.12; */

// https://github.com/makerdao/dss/blob/master/src/vat.sol
interface VatAbstract {
    function wards(address) external view returns (uint256);
    function rely(address) external;
    function deny(address) external;
    function can(address, address) external view returns (uint256);
    function hope(address) external;
    function nope(address) external;
    function ilks(bytes32) external view returns (uint256, uint256, uint256, uint256, uint256);
    function urns(bytes32, address) external view returns (uint256, uint256);
    function gem(bytes32, address) external view returns (uint256);
    function dai(address) external view returns (uint256);
    function sin(address) external view returns (uint256);
    function debt() external view returns (uint256);
    function vice() external view returns (uint256);
    function Line() external view returns (uint256);
    function live() external view returns (uint256);
    function init(bytes32) external;
    function file(bytes32, uint256) external;
    function file(bytes32, bytes32, uint256) external;
    function cage() external;
    function slip(bytes32, address, int256) external;
    function flux(bytes32, address, address, uint256) external;
    function move(address, address, uint256) external;
    function frob(bytes32, address, address, address, int256, int256) external;
    function fork(bytes32, address, address, int256, int256) external;
    function grab(bytes32, address, address, address, int256, int256) external;
    function heal(uint256) external;
    function suck(address, address, uint256) external;
    function fold(bytes32, address, int256) external;
}

////// src/DssSpell.sol
// Copyright (C) 2020 Maker Ecosystem Growth Holdings, INC.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity 0.5.12; */

/* import "lib/dss-interfaces/src/dapp/DSPauseAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/CatAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/FlipAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/IlkRegistryAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/GemJoinAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/JugAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/MedianAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/OsmAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/OsmMomAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/SpotAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/VatAbstract.sol"; */
/* import "lib/dss-interfaces/src/dss/ChainlogAbstract.sol"; */

contract SpellAction {
    // MAINNET ADDRESSES
    //
    // The contracts in this list should correspond to MCD core contracts, verify
    //  against the current release list at:
    //     https://changelog.makerdao.com/releases/mainnet/1.1.4/contracts.json
    address constant MCD_VAT         = 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B;
    address constant MCD_CAT         = 0xa5679C04fc3d9d8b0AaB1F0ab83555b301cA70Ea;
    address constant MCD_JUG         = 0x19c0976f590D67707E62397C87829d896Dc0f1F1;
    address constant MCD_SPOT        = 0x65C79fcB50Ca1594B025960e539eD7A9a6D434A3;
    address constant MCD_POT         = 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7;
    address constant MCD_END         = 0xaB14d3CE3F733CACB76eC2AbE7d2fcb00c99F3d5;
    address constant FLIPPER_MOM     = 0xc4bE7F74Ee3743bDEd8E0fA218ee5cf06397f472;
    address constant OSM_MOM         = 0x76416A4d5190d071bfed309861527431304aA14f;
    address constant ILK_REGISTRY    = 0x8b4ce5DCbb01e0e1f0521cd8dCfb31B308E52c24;
    address constant CHANGELOG       = 0xdA0Ab1e0017DEbCd72Be8599041a2aa3bA7e740F;

    address constant BAL            = 0xba100000625a3754423978a60c9317c58a424e3D;
    address constant MCD_JOIN_BAL_A = 0x4a03Aa7fb3973d8f0221B466EefB53D0aC195f55;
    address constant MCD_FLIP_BAL_A = 0xb2b9bd446eE5e58036D2876fce62b7Ab7334583e;
    address constant PIP_BAL        = 0x3ff860c0F28D69F392543A16A397D0dAe85D16dE;

    address constant YFI            = 0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e;
    address constant MCD_JOIN_YFI_A = 0x3ff33d9162aD47660083D7DC4bC02Fb231c81677;
    address constant MCD_FLIP_YFI_A = 0xEe4C9C36257afB8098059a4763A374a4ECFE28A7;
    address constant PIP_YFI        = 0x5F122465bCf86F45922036970Be6DD7F58820214;

    // Decimals & precision
    uint256 constant THOUSAND = 10 ** 3;
    uint256 constant MILLION  = 10 ** 6;
    uint256 constant WAD      = 10 ** 18;
    uint256 constant RAY      = 10 ** 27;
    uint256 constant RAD      = 10 ** 45;

    // Many of the settings that change weekly rely on the rate accumulator
    // described at https://docs.makerdao.com/smart-contract-modules/rates-module
    // To check this yourself, use the following rate calculation (example 8%):
    //
    // $ bc -l <<< 'scale=27; e( l(1.08)/(60 * 60 * 24 * 365) )'
    //
    // A table of rates can be found at
    //    https://ipfs.io/ipfs/QmefQMseb3AiTapiAKKexdKHig8wroKuZbmLtPLv4u2YwW
    uint256 constant FOUR_PERCENT_RATE = 1000000001243680656318820312;
    uint256 constant FIVE_PERCENT_RATE = 1000000001547125957863212448;

    function execute() external {
        // Set the global debt ceiling
        // 1476 (current DC) + 4 (BAL-A) + 7 (YFI-A) - 50 (ETH-A decrease) - 10 (ETH-B decrease)
        // + 40 (WBTC-A increase) + 5 (LINK-A increase) - 7.5 (USDT-A decrease) - 0.75 (MANA-A decrease)
        VatAbstract(MCD_VAT).file("Line", (1463 * MILLION + 750 * THOUSAND) * RAD);

        // Set the ETH-A debt ceiling
        //
        // Existing debt ceiling: 540 million
        // New debt ceiling: 490 million
        VatAbstract(MCD_VAT).file("ETH-A", "line", 490 * MILLION * RAD);

        // Set the ETH-B debt ceiling
        //
        // Existing debt ceiling: 20 million
        // New debt ceiling: 10 million
        VatAbstract(MCD_VAT).file("ETH-B", "line", 10 * MILLION * RAD);

        // Set the WBTC-A debt ceiling
        //
        // Existing debt ceiling: 120 million
        // New debt ceiling: 160 million
        VatAbstract(MCD_VAT).file("WBTC-A", "line", 160 * MILLION * RAD);

        // Set the MANA-A debt ceiling
        //
        // Existing debt ceiling: 1 million
        // New debt ceiling: 250 thousand
        VatAbstract(MCD_VAT).file("MANA-A", "line", 250 * THOUSAND * RAD);

        // Set the USDT-A debt ceiling
        //
        // Existing debt ceiling: 10 million
        // New debt ceiling: 2.5 million
        VatAbstract(MCD_VAT).file("USDT-A", "line", (2 * MILLION + 500 * THOUSAND) * RAD);

        // Set the LINK-A debt ceiling
        //
        // Existing debt ceiling: 5 million
        // New debt ceiling: 10 million
        VatAbstract(MCD_VAT).file("LINK-A", "line", 10 * MILLION * RAD);

        // Set the ETH-B stability fee
        //
        // Previous: 6%
        // New: 4%
        JugAbstract(MCD_JUG).drip("ETH-B");
        JugAbstract(MCD_JUG).file("ETH-B", "duty", FOUR_PERCENT_RATE);

        // Version bump chainlog (due new collateral types)
        ChainlogAbstract(CHANGELOG).setVersion("1.1.4");

        //
        // Add BAL-A
        //
        bytes32 ilk = "BAL-A";

        // Sanity checks
        require(GemJoinAbstract(MCD_JOIN_BAL_A).vat() == MCD_VAT, "join-vat-not-match");
        require(GemJoinAbstract(MCD_JOIN_BAL_A).ilk() == ilk, "join-ilk-not-match");
        require(GemJoinAbstract(MCD_JOIN_BAL_A).gem() == BAL, "join-gem-not-match");
        require(GemJoinAbstract(MCD_JOIN_BAL_A).dec() == 18, "join-dec-not-match");
        require(FlipAbstract(MCD_FLIP_BAL_A).vat() == MCD_VAT, "flip-vat-not-match");
        require(FlipAbstract(MCD_FLIP_BAL_A).cat() == MCD_CAT, "flip-cat-not-match");
        require(FlipAbstract(MCD_FLIP_BAL_A).ilk() == ilk, "flip-ilk-not-match");

        // Add the new flip and join to the Chainlog
        ChainlogAbstract(CHANGELOG).setAddress("BAL", BAL);
        ChainlogAbstract(CHANGELOG).setAddress("PIP_BAL", PIP_BAL);
        ChainlogAbstract(CHANGELOG).setAddress("MCD_JOIN_BAL_A", MCD_JOIN_BAL_A);
        ChainlogAbstract(CHANGELOG).setAddress("MCD_FLIP_BAL_A", MCD_FLIP_BAL_A);

        // Set the BAL PIP in the Spotter
        SpotAbstract(MCD_SPOT).file(ilk, "pip", PIP_BAL);

        // Set the BAL-A Flipper in the Cat
        CatAbstract(MCD_CAT).file(ilk, "flip", MCD_FLIP_BAL_A);

        // Init BAL-A ilk in Vat & Jug
        VatAbstract(MCD_VAT).init(ilk);
        JugAbstract(MCD_JUG).init(ilk);

        // Allow BAL-A Join to modify Vat registry
        VatAbstract(MCD_VAT).rely(MCD_JOIN_BAL_A);
        // Allow the BAL-A Flipper to reduce the Cat litterbox on deal()
        CatAbstract(MCD_CAT).rely(MCD_FLIP_BAL_A);
        // Allow Cat to kick auctions in BAL-A Flipper
        FlipAbstract(MCD_FLIP_BAL_A).rely(MCD_CAT);
        // Allow End to yank auctions in BAL-A Flipper
        FlipAbstract(MCD_FLIP_BAL_A).rely(MCD_END);
        // Allow FlipperMom to access to the BAL-A Flipper
        FlipAbstract(MCD_FLIP_BAL_A).rely(FLIPPER_MOM);
        // Disallow Cat to kick auctions in BAL-A Flipper
        // !!!!!!!! Only for certain collaterals that do not trigger liquidations like USDC-A)
        // FlipperMomAbstract(FLIPPER_MOM).deny(MCD_FLIP_BAL_A);

        // Allow OsmMom to access to the BAL Osm
        // !!!!!!!! Only if PIP_BAL = Osm and hasn't been already relied due a previous deployed ilk
        OsmAbstract(PIP_BAL).rely(OSM_MOM);
        // Whitelist Osm to read the Median data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_BAL = Osm, its src is a Median and hasn't been already whitelisted due a previous deployed ilk
        MedianAbstract(OsmAbstract(PIP_BAL).src()).kiss(PIP_BAL);
        // Whitelist Spotter to read the Osm data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_BAL = Osm or PIP_BAL = Median and hasn't been already whitelisted due a previous deployed ilk
        OsmAbstract(PIP_BAL).kiss(MCD_SPOT);
        // Whitelist End to read the Osm data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_BAL = Osm or PIP_BAL = Median and hasn't been already whitelisted due a previous deployed ilk
        OsmAbstract(PIP_BAL).kiss(MCD_END);
        // Set BAL Osm in the OsmMom for new ilk
        // !!!!!!!! Only if PIP_BAL = Osm
        OsmMomAbstract(OSM_MOM).setOsm(ilk, PIP_BAL);

        // Set the global debt ceiling (end of spell)
        // VatAbstract(MCD_VAT).file("Line", 1220 * MILLION * RAD);
        // Set the BAL-A debt ceiling
        VatAbstract(MCD_VAT).file(ilk, "line", 4 * MILLION * RAD);
        // Set the BAL-A dust
        VatAbstract(MCD_VAT).file(ilk, "dust", 100 * RAD);
        // Set the Lot size
        CatAbstract(MCD_CAT).file(ilk, "dunk", 50 * THOUSAND * RAD);
        // Set the BAL-A liquidation penalty (e.g. 13% => X = 113)
        CatAbstract(MCD_CAT).file(ilk, "chop", 113 * WAD / 100);
        // Set the BAL-A stability fee (e.g. 1% = 1000000000315522921573372069)
        JugAbstract(MCD_JUG).file(ilk, "duty", FIVE_PERCENT_RATE);
        // Set the BAL-A percentage between bids (e.g. 3% => X = 103)
        FlipAbstract(MCD_FLIP_BAL_A).file("beg", 103 * WAD / 100);
        // Set the BAL-A time max time between bids
        FlipAbstract(MCD_FLIP_BAL_A).file("ttl", 6 hours);
        // Set the BAL-A max auction duration to
        FlipAbstract(MCD_FLIP_BAL_A).file("tau", 6 hours);
        // Set the BAL-A min collateralization ratio (e.g. 150% => X = 150)
        SpotAbstract(MCD_SPOT).file(ilk, "mat", 175 * RAY / 100);

        // Update BAL-A spot value in Vat
        SpotAbstract(MCD_SPOT).poke(ilk);

        // Add new ilk to the IlkRegistry
        IlkRegistryAbstract(ILK_REGISTRY).add(MCD_JOIN_BAL_A);


        //
        // Add YFI-A
        //
        ilk = "YFI-A";

        // Sanity checks
        require(GemJoinAbstract(MCD_JOIN_YFI_A).vat() == MCD_VAT, "join-vat-not-match");
        require(GemJoinAbstract(MCD_JOIN_YFI_A).ilk() == ilk, "join-ilk-not-match");
        require(GemJoinAbstract(MCD_JOIN_YFI_A).gem() == YFI, "join-gem-not-match");
        require(GemJoinAbstract(MCD_JOIN_YFI_A).dec() == 18, "join-dec-not-match");
        require(FlipAbstract(MCD_FLIP_YFI_A).vat() == MCD_VAT, "flip-vat-not-match");
        require(FlipAbstract(MCD_FLIP_YFI_A).cat() == MCD_CAT, "flip-cat-not-match");
        require(FlipAbstract(MCD_FLIP_YFI_A).ilk() == ilk, "flip-ilk-not-match");

        // Add the new flip and join to the Chainlog
        ChainlogAbstract(CHANGELOG).setAddress("YFI", YFI);
        ChainlogAbstract(CHANGELOG).setAddress("PIP_YFI", PIP_YFI);
        ChainlogAbstract(CHANGELOG).setAddress("MCD_JOIN_YFI_A", MCD_JOIN_YFI_A);
        ChainlogAbstract(CHANGELOG).setAddress("MCD_FLIP_YFI_A", MCD_FLIP_YFI_A);

        // Set the YFI PIP in the Spotter
        SpotAbstract(MCD_SPOT).file(ilk, "pip", PIP_YFI);

        // Set the YFI-A Flipper in the Cat
        CatAbstract(MCD_CAT).file(ilk, "flip", MCD_FLIP_YFI_A);

        // Init YFI-A ilk in Vat & Jug
        VatAbstract(MCD_VAT).init(ilk);
        JugAbstract(MCD_JUG).init(ilk);

        // Allow YFI-A Join to modify Vat registry
        VatAbstract(MCD_VAT).rely(MCD_JOIN_YFI_A);
        // Allow the YFI-A Flipper to reduce the Cat litterbox on deal()
        CatAbstract(MCD_CAT).rely(MCD_FLIP_YFI_A);
        // Allow Cat to kick auctions in YFI-A Flipper
        FlipAbstract(MCD_FLIP_YFI_A).rely(MCD_CAT);
        // Allow End to yank auctions in YFI-A Flipper
        FlipAbstract(MCD_FLIP_YFI_A).rely(MCD_END);
        // Allow FlipperMom to access to the YFI-A Flipper
        FlipAbstract(MCD_FLIP_YFI_A).rely(FLIPPER_MOM);
        // Disallow Cat to kick auctions in YFI-A Flipper
        // !!!!!!!! Only for certain collaterals that do not trigger liquidations like USDC-A)
        // FlipperMomAbstract(FLIPPER_MOM).deny(MCD_FLIP_YFI_A);

        // Allow OsmMom to access to the YFI Osm
        // !!!!!!!! Only if PIP_YFI = Osm and hasn't been already relied due a previous deployed ilk
        OsmAbstract(PIP_YFI).rely(OSM_MOM);
        // Whitelist Osm to read the Median data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_YFI = Osm, its src is a Median and hasn't been already whitelisted due a previous deployed ilk
        MedianAbstract(OsmAbstract(PIP_YFI).src()).kiss(PIP_YFI);
        // Whitelist Spotter to read the Osm data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_YFI = Osm or PIP_YFI = Median and hasn't been already whitelisted due a previous deployed ilk
        OsmAbstract(PIP_YFI).kiss(MCD_SPOT);
        // Whitelist End to read the Osm data (only necessary if it is the first time the token is being added to an ilk)
        // !!!!!!!! Only if PIP_YFI = Osm or PIP_YFI = Median and hasn't been already whitelisted due a previous deployed ilk
        OsmAbstract(PIP_YFI).kiss(MCD_END);
        // Set YFI Osm in the OsmMom for new ilk
        // !!!!!!!! Only if PIP_YFI = Osm
        OsmMomAbstract(OSM_MOM).setOsm(ilk, PIP_YFI);

        // Set the global debt ceiling (end of spell)
        // VatAbstract(MCD_VAT).file("Line", 1227 * MILLION * RAD);
        // Set the YFI-A debt ceiling
        VatAbstract(MCD_VAT).file(ilk, "line", 7 * MILLION * RAD);
        // Set the YFI-A dust
        VatAbstract(MCD_VAT).file(ilk, "dust", 100 * RAD);
        // Set the Lot size
        CatAbstract(MCD_CAT).file(ilk, "dunk", 50 * THOUSAND * RAD);
        // Set the YFI-A liquidation penalty (e.g. 13% => X = 113)
        CatAbstract(MCD_CAT).file(ilk, "chop", 113 * WAD / 100);
        // Set the YFI-A stability fee (e.g. 1% = 1000000000315522921573372069)
        JugAbstract(MCD_JUG).file(ilk, "duty", FOUR_PERCENT_RATE);
        // Set the YFI-A percentage between bids (e.g. 3% => X = 103)
        FlipAbstract(MCD_FLIP_YFI_A).file("beg", 103 * WAD / 100);
        // Set the YFI-A time max time between bids
        FlipAbstract(MCD_FLIP_YFI_A).file("ttl", 6 hours);
        // Set the YFI-A max auction duration to
        FlipAbstract(MCD_FLIP_YFI_A).file("tau", 6 hours);
        // Set the YFI-A min collateralization ratio (e.g. 150% => X = 150)
        SpotAbstract(MCD_SPOT).file(ilk, "mat", 175 * RAY / 100);

        // Update YFI-A spot value in Vat
        SpotAbstract(MCD_SPOT).poke(ilk);

        // Add new ilk to the IlkRegistry
        IlkRegistryAbstract(ILK_REGISTRY).add(MCD_JOIN_YFI_A);
    }
}

contract DssSpell {
    DSPauseAbstract public pause =
        DSPauseAbstract(0xbE286431454714F511008713973d3B053A2d38f3);
    address         public action;
    bytes32         public tag;
    uint256         public eta;
    bytes           public sig;
    uint256         public expiration;
    bool            public done;

    // Provides a descriptive tag for bot consumption
    // This should be modified weekly to provide a summary of the actions
    // Hash: seth keccak -- "$(wget https://raw.githubusercontent.com/makerdao/community/8413dc97baa7b6ccb8eb8fb1a007c15741d8d7e4/governance/votes/Executive%20vote%20-%20November%206%2C%202020.md -q -O - 2>/dev/null)"
    string constant public description =
        "2020-11-06 MakerDAO Executive Spell | Hash: 0x958c24628791d50feb4a0c84fcbe4f88e20c8eefc3c1cb3c7e1af21e5388ebba";

    constructor() public {
        sig = abi.encodeWithSignature("execute()");
        action = address(new SpellAction());
        bytes32 _tag;
        address _action = action;
        assembly { _tag := extcodehash(_action) }
        tag = _tag;
        expiration = now + 30 days;
    }

    modifier officeHours {
        uint day = (now / 1 days + 3) % 7;
        require(day < 5, "Can only be cast on a weekday");
        uint hour = now / 1 hours % 24;
        require(hour >= 14 && hour < 21, "Outside office hours");
        _;
    }

    function schedule() public {
        require(now <= expiration, "This contract has expired");
        require(eta == 0, "This spell has already been scheduled");
        eta = now + DSPauseAbstract(pause).delay();
        pause.plot(action, tag, sig, eta);
    }

    function cast() public officeHours {
        require(!done, "spell-already-cast");
        done = true;
        pause.exec(action, tag, sig, eta);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"action","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cast","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"done","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"eta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pause","outputs":[{"internalType":"contract DSPauseAbstract","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"schedule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tag","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052600080546001600160a01b03191673be286431454714f511008713973d3b053a2d38f317905534801561003657600080fd5b50604080516004808252602482019092526020810180516001600160e01b03167f614619540000000000000000000000000000000000000000000000000000000017815290516100879291906100e2565b5060405161009490610160565b604051809103906000f0801580156100b0573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283161790819055163f6002554262278d000160055561018a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012357805160ff1916838001178555610150565b82800160010185558215610150579182015b82811115610150578251825591602001919060010190610135565b5061015c92915061016d565b5090565b612fa1806109f983390190565b61018791905b8082111561015c5760008155600101610173565b90565b610860806101996000396000f3fe608060405234801561001057600080fd5b506004361061008d5760003560e01c8062a7029b146100925780630a7a1c4d1461010f5780634665096d1461013357806351f910661461014d5780637284e416146101555780638456cb591461015d57806396d373e514610165578063ae8421e11461016f578063b0604a261461018b578063f7992d8514610193575b600080fd5b61009a61019b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100d45781810151838201526020016100bc565b50505050905090810190601f1680156101015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610117610229565b604080516001600160a01b039092168252519081900360200190f35b61013b610238565b60408051918252519081900360200190f35b61013b61023e565b61009a610244565b610117610260565b61016d61026f565b005b61017761056d565b604080519115158252519081900360200190f35b61016d610576565b61013b610792565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102215780601f106101f657610100808354040283529160200191610221565b820191906000526020600020905b81548152906001019060200180831161020457829003601f168201915b505050505081565b6001546001600160a01b031681565b60055481565b60025481565b6040518060a00160405280606e81526020016107be606e913981565b6000546001600160a01b031681565b600762015180420460030106600581106102d0576040805162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792062652063617374206f6e2061207765656b646179000000604482015290519081900360640190fd5b6018610e10420406600e81108015906102e95750601581105b610331576040805162461bcd60e51b81526020600482015260146024820152734f757473696465206f666669636520686f75727360601b604482015290519081900360640190fd5b60065460ff161561037e576040805162461bcd60e51b81526020600482015260126024820152711cdc195b1b0b585b1c9958591e4b58d85cdd60721b604482015290519081900360640190fd5b6006805460ff1916600190811790915560005481546002805460035460405163168ccd6760e01b81526001600160a01b039485166004828101828152602484018690526064840185905260806044850190815282546000199b811615610100029b909b01909a169690960460848401819052969097169763168ccd67979196949591949192909160a4909101908590801561045a5780601f1061042f5761010080835404028352916020019161045a565b820191906000526020600020905b81548152906001019060200180831161043d57829003601f168201915b505095505050505050600060405180830381600087803b15801561047d57600080fd5b505af1158015610491573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156104ba57600080fd5b8101908080516040519392919084600160201b8211156104d957600080fd5b9083019060208201858111156104ee57600080fd5b8251600160201b81118282018810171561050757600080fd5b82525081516020918201929091019080838360005b8381101561053457818101518382015260200161051c565b50505050905090810190601f1680156105615780820380516001836020036101000a031916815260200191505b50604052505050505050565b60065460ff1681565b6005544211156105c9576040805162461bcd60e51b8152602060048201526019602482015278151a1a5cc818dbdb9d1c9858dd081a185cc8195e1c1a5c9959603a1b604482015290519081900360640190fd5b600354156106085760405162461bcd60e51b81526004018080602001828103825260258152602001806107996025913960400191505060405180910390fd5b6000809054906101000a90046001600160a01b03166001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561065557600080fd5b505afa158015610669573d6000803e3d6000fd5b505050506040513d602081101561067f57600080fd5b50514201600381905560005460018054600280546040516346d2fbbb60e01b81526001600160a01b03938416600482810182815260248401859052606484018a90526080604485019081528254600019998116156101000299909901909816959095046084840181905295909716976346d2fbbb9791969395919490939092909160a490910190859080156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b505095505050505050600060405180830381600087803b15801561077857600080fd5b505af115801561078c573d6000803e3d6000fd5b50505050565b6003548156fe54686973207370656c6c2068617320616c7265616479206265656e207363686564756c6564323032302d31312d3036204d616b657244414f20457865637574697665205370656c6c207c20486173683a20307839353863323436323837393164353066656234613063383466636265346638386532306338656566633363316362336337653161663231653533383865626261a265627a7a723158200eb4c9cb3c36d081250c835a88b8fe3f28150c312dc9bc43a8095d04a7434ebe64736f6c634300050c0032608060405234801561001057600080fd5b50612f81806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636146195414610030575b600080fd5b61003861003a565b005b60408051630a6ba04560e21b8152634c696e6560e01b60048201527007a42132327cba2cbb88cd7fdcb43d80a360311b60248201529051600080516020612e6d833981519152916329ae811491604480830192600092919082900301818387803b1580156100a757600080fd5b505af11580156100bb573d6000803e3d6000fd5b505060408051630d05943f60e11b8152644554482d4160d81b6004820152636c696e6560e01b60248201526f51da79af09cf6327fbe2ff3aa4823ee160341b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561013957600080fd5b505af115801561014d573d6000803e3d6000fd5b505060408051630d05943f60e11b81526422aa2416a160d91b6004820152636c696e6560e01b60248201526f01aba4714957d300d0e549208b31adb160341b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b1580156101cb57600080fd5b505af11580156101df573d6000803e3d6000fd5b505060408051630d05943f60e11b815265574254432d4160d01b6004820152636c696e6560e01b60248201526f01aba4714957d300d0e549208b31adb160381b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561025e57600080fd5b505af1158015610272573d6000803e3d6000fd5b505060408051630d05943f60e11b8152654d414e412d4160d01b6004820152636c696e6560e01b60248201526e558749db77f70029c77506823d22bd60311b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505060408051630d05943f60e11b815265555344542d4160d01b6004820152636c696e6560e01b60248201526f01aba4714957d300d0e549208b31adb160321b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561038357600080fd5b505af1158015610397573d6000803e3d6000fd5b505060408051630d05943f60e11b8152654c494e4b2d4160d01b6004820152636c696e6560e01b60248201526f01aba4714957d300d0e549208b31adb160341b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b50506040805163089c54b560e31b81526422aa2416a160d91b600482015290517319c0976f590d67707e62397c87829d896dc0f1f193506344e2a5a8925060248083019260209291908290030181600087803b15801561048957600080fd5b505af115801561049d573d6000803e3d6000fd5b505050506040513d60208110156104b357600080fd5b505060408051630d05943f60e11b81526422aa2416a160d91b6004820152636475747960e01b60248201526b033b2e3cb112f1349de86fd8604482015290517319c0976f590d67707e62397c87829d896dc0f1f191631a0b287e91606480830192600092919082900301818387803b15801561052e57600080fd5b505af1158015610542573d6000803e3d6000fd5b505060408051631e22f1e360e21b81526020600482015260056024820152640c4b8c4b8d60da1b60448201529051600080516020612f0d833981519152935063788bc78c9250606480830192600092919082900301818387803b1580156105a857600080fd5b505af11580156105bc573d6000803e3d6000fd5b5050505060006442414c2d4160d81b9050600080516020612e6d8339815191526001600160a01b0316600080516020612e8d8339815191526001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561062c57600080fd5b505afa158015610640573d6000803e3d6000fd5b505050506040513d602081101561065657600080fd5b50516001600160a01b0316146106a8576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5aecc2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b80600080516020612e8d8339815191526001600160a01b031663c5ce281e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f057600080fd5b505afa158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505114610763576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5ad2d8d65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b73ba100000625a3754423978a60c9317c58a424e3d6001600160a01b0316600080516020612e8d8339815191526001600160a01b0316637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d60208110156107f257600080fd5b50516001600160a01b031614610844576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5acecada5adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612e8d8339815191526001600160a01b031663b3bcfa826040518163ffffffff1660e01b815260040160206040518083038186803b15801561088b57600080fd5b505afa15801561089f573d6000803e3d6000fd5b505050506040513d60208110156108b557600080fd5b5051601214610900576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5ac8cac65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612e6d8339815191526001600160a01b0316600080516020612e2d8339815191526001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561095f57600080fd5b505afa158015610973573d6000803e3d6000fd5b505050506040513d602081101561098957600080fd5b50516001600160a01b0316146109db576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05aecc2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612eed8339815191526001600160a01b0316600080516020612e2d8339815191526001600160a01b031663e48818136040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3a57600080fd5b505afa158015610a4e573d6000803e3d6000fd5b505050506040513d6020811015610a6457600080fd5b50516001600160a01b031614610ab6576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05ac6c2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b80600080516020612e2d8339815191526001600160a01b031663c5ce281e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610afe57600080fd5b505afa158015610b12573d6000803e3d6000fd5b505050506040513d6020811015610b2857600080fd5b505114610b71576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05ad2d8d65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b6040805163ca446dd960e01b81526210905360ea1b600482015273ba100000625a3754423978a60c9317c58a424e3d60248201529051600080516020612f0d8339815191529163ca446dd991604480830192600092919082900301818387803b158015610bdd57600080fd5b505af1158015610bf1573d6000803e3d6000fd5b50506040805163ca446dd960e01b81526614125417d0905360ca1b6004820152600080516020612ecd83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b158015610c5f57600080fd5b505af1158015610c73573d6000803e3d6000fd5b50506040805163ca446dd960e01b81526d4d43445f4a4f494e5f42414c5f4160901b6004820152600080516020612e8d83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b158015610ce857600080fd5b505af1158015610cfc573d6000803e3d6000fd5b50506040805163ca446dd960e01b81526d4d43445f464c49505f42414c5f4160901b6004820152600080516020612e2d83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b50506040805163ebecb39d60e01b8152600481018590526207069760ec1b6024820152600080516020612ecd83398151915260448201529051600080516020612f2d833981519152935063ebecb39d9250606480830192600092919082900301818387803b158015610df657600080fd5b505af1158015610e0a573d6000803e3d6000fd5b50506040805163ebecb39d60e01b815260048101859052630666c69760e41b6024820152600080516020612e2d83398151915260448201529051600080516020612eed833981519152935063ebecb39d9250606480830192600092919082900301818387803b158015610e7c57600080fd5b505af1158015610e90573d6000803e3d6000fd5b50505050600080516020612e6d8339815191526001600160a01b0316633b663195826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b505050507319c0976f590d67707e62397c87829d896dc0f1f16001600160a01b0316633b663195826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612e8d83398151915260048201529051600080516020612e6d83398151915293506365fae35e9250602480830192600092919082900301818387803b158015610fcc57600080fd5b505af1158015610fe0573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612e2d83398151915260048201529051600080516020612eed83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612eed83398151915260048201529051600080516020612e2d83398151915293506365fae35e9250602480830192600092919082900301818387803b1580156110b057600080fd5b505af11580156110c4573d6000803e3d6000fd5b5050604080516332fd71af60e11b815273ab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d560048201529051600080516020612e2d83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561112857600080fd5b505af115801561113c573d6000803e3d6000fd5b5050604080516332fd71af60e11b815273c4be7f74ee3743bded8e0fa218ee5cf06397f47260048201529051600080516020612e2d83398151915293506365fae35e9250602480830192600092919082900301818387803b1580156111a057600080fd5b505af11580156111b4573d6000803e3d6000fd5b5050604080516332fd71af60e11b81527376416a4d5190d071bfed309861527431304aa14f60048201529051600080516020612ecd83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561121857600080fd5b505af115801561122c573d6000803e3d6000fd5b50505050600080516020612ecd8339815191526001600160a01b0316632e7dc6af6040518163ffffffff1660e01b815260040160206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d60208110156112a157600080fd5b505160408051633ca70a7160e21b8152600080516020612ecd833981519152600482015290516001600160a01b039092169163f29c29c49160248082019260009290919082900301818387803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b505060408051633ca70a7160e21b8152600080516020612f2d83398151915260048201529051600080516020612ecd833981519152935063f29c29c49250602480830192600092919082900301818387803b15801561136c57600080fd5b505af1158015611380573d6000803e3d6000fd5b505060408051633ca70a7160e21b815273ab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d560048201529051600080516020612ecd833981519152935063f29c29c49250602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b5050604080516364c66fc360e11b815260048101859052600080516020612ecd833981519152602482015290517376416a4d5190d071bfed309861527431304aa14f935063c98cdf869250604480830192600092919082900301818387803b15801561146357600080fd5b505af1158015611477573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052636c696e6560e01b60248201526e558749db77f70029c77506823d22bd60351b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505060408051630d05943f60e11b81526004810185905263191d5cdd60e21b60248201526d23084f676940b7915149bd08b30d602f1b60448201529051600080516020612e6d8339815191529350631a0b287e9250606482810192600092919082900301818387803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b505060408051630d05943f60e11b8152600481018590526364756e6b60e01b60248201526e111b0ec57e6499a1f4b1014d3f6d5960311b60448201529051600080516020612eed8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b505060408051630d05943f60e11b81526004810185905263063686f760e41b6024820152670fae91035431000060448201529051600080516020612eed8339815191529350631a0b287e9250606482810192600092919082900301818387803b15801561168057600080fd5b505af1158015611694573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052636475747960e01b60248201526b033b2e3cb548ff197d3905a0604482015290517319c0976f590d67707e62397c87829d896dc0f1f19350631a0b287e9250606480830192600092919082900301818387803b15801561170a57600080fd5b505af115801561171e573d6000803e3d6000fd5b505060408051630a6ba04560e21b81526262656760e81b6004820152670e4b4b8af6a7000060248201529051600080516020612e2d83398151915293506329ae81149250604480830192600092919082900301818387803b15801561178257600080fd5b505af1158015611796573d6000803e3d6000fd5b505060408051630a6ba04560e21b8152621d1d1b60ea1b600482015261546060248201529051600080516020612e2d83398151915293506329ae81149250604480830192600092919082900301818387803b1580156117f457600080fd5b505af1158015611808573d6000803e3d6000fd5b505060408051630a6ba04560e21b81526274617560e81b600482015261546060248201529051600080516020612e2d83398151915293506329ae81149250604480830192600092919082900301818387803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052621b585d60ea1b60248201526b05a790ea17ace06a9600000060448201529051600080516020612f2d8339815191529350631a0b287e9250606482810192600092919082900301818387803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b50505050600080516020612f2d8339815191526001600160a01b0316631504460f826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505060408051630a3b0a4f60e01b8152600080516020612e8d83398151915260048201529051738b4ce5dcbb01e0e1f0521cd8dcfb31b308e52c249350630a3b0a4f9250602480830192600092919082900301818387803b1580156119cd57600080fd5b505af11580156119e1573d6000803e3d6000fd5b50505050645946492d4160d81b9050600080516020612e6d8339815191526001600160a01b0316600080516020612e4d8339815191526001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4f57600080fd5b505afa158015611a63573d6000803e3d6000fd5b505050506040513d6020811015611a7957600080fd5b50516001600160a01b031614611acb576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5aecc2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b80600080516020612e4d8339815191526001600160a01b031663c5ce281e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1357600080fd5b505afa158015611b27573d6000803e3d6000fd5b505050506040513d6020811015611b3d57600080fd5b505114611b86576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5ad2d8d65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b730bc529c00c6401aef6d220be8c6ea1667f6ad93e6001600160a01b0316600080516020612e4d8339815191526001600160a01b0316637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b50516001600160a01b031614611c67576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5acecada5adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612e4d8339815191526001600160a01b031663b3bcfa826040518163ffffffff1660e01b815260040160206040518083038186803b158015611cae57600080fd5b505afa158015611cc2573d6000803e3d6000fd5b505050506040513d6020811015611cd857600080fd5b5051601214611d23576040805162461bcd60e51b81526020600482015260126024820152710d4ded2dc5ac8cac65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612e6d8339815191526001600160a01b0316600080516020612ead8339815191526001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d6020811015611dac57600080fd5b50516001600160a01b031614611dfe576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05aecc2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b600080516020612eed8339815191526001600160a01b0316600080516020612ead8339815191526001600160a01b031663e48818136040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5d57600080fd5b505afa158015611e71573d6000803e3d6000fd5b505050506040513d6020811015611e8757600080fd5b50516001600160a01b031614611ed9576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05ac6c2e85adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b80600080516020612ead8339815191526001600160a01b031663c5ce281e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b505114611f94576040805162461bcd60e51b81526020600482015260126024820152710ccd8d2e05ad2d8d65adcdee85adac2e8c6d60731b604482015290519081900360640190fd5b6040805163ca446dd960e01b81526259464960e81b6004820152730bc529c00c6401aef6d220be8c6ea1667f6ad93e60248201529051600080516020612f0d8339815191529163ca446dd991604480830192600092919082900301818387803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b50506040805163ca446dd960e01b8152665049505f59464960c81b6004820152600080516020612e0d83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b50506040805163ca446dd960e01b81526d4d43445f4a4f494e5f5946495f4160901b6004820152600080516020612e4d83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b15801561210b57600080fd5b505af115801561211f573d6000803e3d6000fd5b50506040805163ca446dd960e01b81526d4d43445f464c49505f5946495f4160901b6004820152600080516020612ead83398151915260248201529051600080516020612f0d833981519152935063ca446dd99250604480830192600092919082900301818387803b15801561219457600080fd5b505af11580156121a8573d6000803e3d6000fd5b50506040805163ebecb39d60e01b8152600481018590526207069760ec1b6024820152600080516020612e0d83398151915260448201529051600080516020612f2d833981519152935063ebecb39d9250606480830192600092919082900301818387803b15801561221957600080fd5b505af115801561222d573d6000803e3d6000fd5b50506040805163ebecb39d60e01b815260048101859052630666c69760e41b6024820152600080516020612ead83398151915260448201529051600080516020612eed833981519152935063ebecb39d9250606480830192600092919082900301818387803b15801561229f57600080fd5b505af11580156122b3573d6000803e3d6000fd5b50505050600080516020612e6d8339815191526001600160a01b0316633b663195826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561230b57600080fd5b505af115801561231f573d6000803e3d6000fd5b505050507319c0976f590d67707e62397c87829d896dc0f1f16001600160a01b0316633b663195826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561237d57600080fd5b505af1158015612391573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612e4d83398151915260048201529051600080516020612e6d83398151915293506365fae35e9250602480830192600092919082900301818387803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612ead83398151915260048201529051600080516020612eed83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561246157600080fd5b505af1158015612475573d6000803e3d6000fd5b5050604080516332fd71af60e11b8152600080516020612eed83398151915260048201529051600080516020612ead83398151915293506365fae35e9250602480830192600092919082900301818387803b1580156124d357600080fd5b505af11580156124e7573d6000803e3d6000fd5b5050604080516332fd71af60e11b815273ab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d560048201529051600080516020612ead83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561254b57600080fd5b505af115801561255f573d6000803e3d6000fd5b5050604080516332fd71af60e11b815273c4be7f74ee3743bded8e0fa218ee5cf06397f47260048201529051600080516020612ead83398151915293506365fae35e9250602480830192600092919082900301818387803b1580156125c357600080fd5b505af11580156125d7573d6000803e3d6000fd5b5050604080516332fd71af60e11b81527376416a4d5190d071bfed309861527431304aa14f60048201529051600080516020612e0d83398151915293506365fae35e9250602480830192600092919082900301818387803b15801561263b57600080fd5b505af115801561264f573d6000803e3d6000fd5b50505050600080516020612e0d8339815191526001600160a01b0316632e7dc6af6040518163ffffffff1660e01b815260040160206040518083038186803b15801561269a57600080fd5b505afa1580156126ae573d6000803e3d6000fd5b505050506040513d60208110156126c457600080fd5b505160408051633ca70a7160e21b8152600080516020612e0d833981519152600482015290516001600160a01b039092169163f29c29c49160248082019260009290919082900301818387803b15801561271d57600080fd5b505af1158015612731573d6000803e3d6000fd5b505060408051633ca70a7160e21b8152600080516020612f2d83398151915260048201529051600080516020612e0d833981519152935063f29c29c49250602480830192600092919082900301818387803b15801561278f57600080fd5b505af11580156127a3573d6000803e3d6000fd5b505060408051633ca70a7160e21b815273ab14d3ce3f733cacb76ec2abe7d2fcb00c99f3d560048201529051600080516020612e0d833981519152935063f29c29c49250602480830192600092919082900301818387803b15801561280757600080fd5b505af115801561281b573d6000803e3d6000fd5b5050604080516364c66fc360e11b815260048101859052600080516020612e0d833981519152602482015290517376416a4d5190d071bfed309861527431304aa14f935063c98cdf869250604480830192600092919082900301818387803b15801561288657600080fd5b505af115801561289a573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052636c696e6560e01b60248201526f0256b3050047c1012474332d8fabf32b60331b60448201529051600080516020612e6d8339815191529350631a0b287e9250606480830192600092919082900301818387803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b505060408051630d05943f60e11b81526004810185905263191d5cdd60e21b60248201526d23084f676940b7915149bd08b30d602f1b60448201529051600080516020612e6d8339815191529350631a0b287e9250606482810192600092919082900301818387803b15801561299a57600080fd5b505af11580156129ae573d6000803e3d6000fd5b505060408051630d05943f60e11b8152600481018590526364756e6b60e01b60248201526e111b0ec57e6499a1f4b1014d3f6d5960311b60448201529051600080516020612eed8339815191529350631a0b287e9250606480830192600092919082900301818387803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b505060408051630d05943f60e11b81526004810185905263063686f760e41b6024820152670fae91035431000060448201529051600080516020612eed8339815191529350631a0b287e9250606482810192600092919082900301818387803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052636475747960e01b60248201526b033b2e3cb112f1349de86fd8604482015290517319c0976f590d67707e62397c87829d896dc0f1f19350631a0b287e9250606480830192600092919082900301818387803b158015612b2e57600080fd5b505af1158015612b42573d6000803e3d6000fd5b505060408051630a6ba04560e21b81526262656760e81b6004820152670e4b4b8af6a7000060248201529051600080516020612ead83398151915293506329ae81149250604480830192600092919082900301818387803b158015612ba657600080fd5b505af1158015612bba573d6000803e3d6000fd5b505060408051630a6ba04560e21b8152621d1d1b60ea1b600482015261546060248201529051600080516020612ead83398151915293506329ae81149250604480830192600092919082900301818387803b158015612c1857600080fd5b505af1158015612c2c573d6000803e3d6000fd5b505060408051630a6ba04560e21b81526274617560e81b600482015261546060248201529051600080516020612ead83398151915293506329ae81149250604480830192600092919082900301818387803b158015612c8a57600080fd5b505af1158015612c9e573d6000803e3d6000fd5b505060408051630d05943f60e11b815260048101859052621b585d60ea1b60248201526b05a790ea17ace06a9600000060448201529051600080516020612f2d8339815191529350631a0b287e9250606482810192600092919082900301818387803b158015612d0d57600080fd5b505af1158015612d21573d6000803e3d6000fd5b50505050600080516020612f2d8339815191526001600160a01b0316631504460f826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d7957600080fd5b505af1158015612d8d573d6000803e3d6000fd5b505060408051630a3b0a4f60e01b8152600080516020612e4d83398151915260048201529051738b4ce5dcbb01e0e1f0521cd8dcfb31b308e52c249350630a3b0a4f9250602480830192600092919082900301818387803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b505050505056fe0000000000000000000000005f122465bcf86f45922036970be6dd7f58820214000000000000000000000000b2b9bd446ee5e58036d2876fce62b7ab7334583e0000000000000000000000003ff33d9162ad47660083d7dc4bc02fb231c8167700000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b0000000000000000000000004a03aa7fb3973d8f0221b466eefb53d0ac195f55000000000000000000000000ee4c9c36257afb8098059a4763a374a4ecfe28a70000000000000000000000003ff860c0f28d69f392543a16a397d0dae85d16de000000000000000000000000a5679c04fc3d9d8b0aab1f0ab83555b301ca70ea000000000000000000000000da0ab1e0017debcd72be8599041a2aa3ba7e740f00000000000000000000000065c79fcb50ca1594b025960e539ed7a9a6d434a3a265627a7a7231582051db4002780dd971d8ab26e4d27b82690d4a3d4406f99abbb5abf95af8bfb4ba64736f6c634300050c0032

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061008d5760003560e01c8062a7029b146100925780630a7a1c4d1461010f5780634665096d1461013357806351f910661461014d5780637284e416146101555780638456cb591461015d57806396d373e514610165578063ae8421e11461016f578063b0604a261461018b578063f7992d8514610193575b600080fd5b61009a61019b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100d45781810151838201526020016100bc565b50505050905090810190601f1680156101015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610117610229565b604080516001600160a01b039092168252519081900360200190f35b61013b610238565b60408051918252519081900360200190f35b61013b61023e565b61009a610244565b610117610260565b61016d61026f565b005b61017761056d565b604080519115158252519081900360200190f35b61016d610576565b61013b610792565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102215780601f106101f657610100808354040283529160200191610221565b820191906000526020600020905b81548152906001019060200180831161020457829003601f168201915b505050505081565b6001546001600160a01b031681565b60055481565b60025481565b6040518060a00160405280606e81526020016107be606e913981565b6000546001600160a01b031681565b600762015180420460030106600581106102d0576040805162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c792062652063617374206f6e2061207765656b646179000000604482015290519081900360640190fd5b6018610e10420406600e81108015906102e95750601581105b610331576040805162461bcd60e51b81526020600482015260146024820152734f757473696465206f666669636520686f75727360601b604482015290519081900360640190fd5b60065460ff161561037e576040805162461bcd60e51b81526020600482015260126024820152711cdc195b1b0b585b1c9958591e4b58d85cdd60721b604482015290519081900360640190fd5b6006805460ff1916600190811790915560005481546002805460035460405163168ccd6760e01b81526001600160a01b039485166004828101828152602484018690526064840185905260806044850190815282546000199b811615610100029b909b01909a169690960460848401819052969097169763168ccd67979196949591949192909160a4909101908590801561045a5780601f1061042f5761010080835404028352916020019161045a565b820191906000526020600020905b81548152906001019060200180831161043d57829003601f168201915b505095505050505050600060405180830381600087803b15801561047d57600080fd5b505af1158015610491573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156104ba57600080fd5b8101908080516040519392919084600160201b8211156104d957600080fd5b9083019060208201858111156104ee57600080fd5b8251600160201b81118282018810171561050757600080fd5b82525081516020918201929091019080838360005b8381101561053457818101518382015260200161051c565b50505050905090810190601f1680156105615780820380516001836020036101000a031916815260200191505b50604052505050505050565b60065460ff1681565b6005544211156105c9576040805162461bcd60e51b8152602060048201526019602482015278151a1a5cc818dbdb9d1c9858dd081a185cc8195e1c1a5c9959603a1b604482015290519081900360640190fd5b600354156106085760405162461bcd60e51b81526004018080602001828103825260258152602001806107996025913960400191505060405180910390fd5b6000809054906101000a90046001600160a01b03166001600160a01b0316636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561065557600080fd5b505afa158015610669573d6000803e3d6000fd5b505050506040513d602081101561067f57600080fd5b50514201600381905560005460018054600280546040516346d2fbbb60e01b81526001600160a01b03938416600482810182815260248401859052606484018a90526080604485019081528254600019998116156101000299909901909816959095046084840181905295909716976346d2fbbb9791969395919490939092909160a490910190859080156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b505095505050505050600060405180830381600087803b15801561077857600080fd5b505af115801561078c573d6000803e3d6000fd5b50505050565b6003548156fe54686973207370656c6c2068617320616c7265616479206265656e207363686564756c6564323032302d31312d3036204d616b657244414f20457865637574697665205370656c6c207c20486173683a20307839353863323436323837393164353066656234613063383466636265346638386532306338656566633363316362336337653161663231653533383865626261a265627a7a723158200eb4c9cb3c36d081250c835a88b8fe3f28150c312dc9bc43a8095d04a7434ebe64736f6c634300050c0032

Deployed Bytecode Sourcemap

28964:1856:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28964:1856:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29197:26;;;:::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;29197:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29095:29;;;:::i;:::-;;;;-1:-1:-1;;;;;29095:29:0;;;;;;;;;;;;;;29230:33;;;:::i;:::-;;;;;;;;;;;;;;;;29131:26;;;:::i;29655:158::-;;;:::i;28989:99::-;;;:::i;30661:156::-;;;:::i;:::-;;29270:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;30386:267;;;:::i;29164:26::-;;;:::i;29197:::-;;;;;;;;;;;;;;;-1:-1:-1;;29197:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29095:29::-;;;-1:-1:-1;;;;;29095:29:0;;:::o;29230:33::-;;;;:::o;29131:26::-;;;;:::o;29655:158::-;;;;;;;;;;;;;;;;;;;:::o;28989:99::-;;;-1:-1:-1;;;;;28989:99:0;;:::o;30661:156::-;30189:1;30175:6;30169:3;:12;30184:1;30169:16;30168:22;30215:1;30209:7;;30201:49;;;;;-1:-1:-1;;;30201:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30289:2;30279:7;30273:3;:13;:18;30318:2;30310:10;;;;;:23;;;30331:2;30324:4;:9;30310:23;30302:56;;;;;-1:-1:-1;;;30302:56:0;;;;;;;;;;;;-1:-1:-1;;;30302:56:0;;;;;;;;;;;;;;;30716:4;;;;30715:5;30707:36;;;;;-1:-1:-1;;;30707:36:0;;;;;;;;;;;;-1:-1:-1;;;30707:36:0;;;;;;;;;;;;;;;30754:4;:11;;-1:-1:-1;;30754:11:0;30761:4;30754:11;;;;;;:4;30776:5;30787:6;;30795:3;;;30805;;30776:33;;-1:-1:-1;;;30776:33:0;;-1:-1:-1;;;;;30787:6:0;;;30800:3;30776:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30776:33:0;;;;30754:11;30776:33;;;;;;;;;;;;;;;;;;:5;;;;;:10;;30787:6;;30795:3;;30800;;30776:33;;;;;;;;;30800:3;;30776:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30776:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30776:33:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30776:33:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;30776:33:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;30776:33:0;;420:4:-1;411:14;;;;30776:33:0;;;;;411:14:-1;30776:33: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;30776:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30661:156;;:::o;29270:27::-;;;;;;:::o;30386:267::-;30439:10;;30432:3;:17;;30424:55;;;;;-1:-1:-1;;;30424:55:0;;;;;;;;;;;;-1:-1:-1;;;30424:55:0;;;;;;;;;;;;;;;30498:3;;:8;30490:58;;;;-1:-1:-1;;;30490:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30587:5;;;;;;;;;-1:-1:-1;;;;;30587:5:0;-1:-1:-1;;;;;30571:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30571:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30571:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30571:30:0;30565:3;:36;30559:3;:42;;;30612:5;;;30623:6;;30631:3;;;30612:33;;-1:-1:-1;;;30612:33:0;;-1:-1:-1;;;;;30623:6:0;;;30636:3;30612:33;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30612:33:0;;;;:5;:33;;;;;;;;;;;;;;;;;;:5;;;;;:10;;30623:6;;30631:3;;30636;;30565:36;;30612:33;;;;;;;;;30636:3;;30612:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30612:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30612:33:0;;;;30386:267::o;29164:26::-;;;;:::o

Swarm Source

bzzr://51db4002780dd971d8ab26e4d27b82690d4a3d4406f99abbb5abf95af8bfb4ba

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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