contract SpellAction {
    // Provides a descriptive tag for bot consumption
    // This should be modified weekly to provide a summary of the actions
    string constant public description = "2020-07-20   MakerDAO Executive Spell";

    // 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.0.8/contracts.json
    address constant MCD_VAT = 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B;
    address constant MCD_JUG = 0x19c0976f590D67707E62397C87829d896Dc0f1F1;
    address constant MCD_POT = 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7;

    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) )'

    function execute() external {
        // Perform drips
        PotAbstract(MCD_POT).drip();

        JugAbstract(MCD_JUG).drip("ETH-A");
        JugAbstract(MCD_JUG).drip("BAT-A");
        JugAbstract(MCD_JUG).drip("USDC-A");
        JugAbstract(MCD_JUG).drip("USDC-B");
        JugAbstract(MCD_JUG).drip("TUSD-A");
        JugAbstract(MCD_JUG).drip("WBTC-A");
        JugAbstract(MCD_JUG).drip("KNC-A");
        JugAbstract(MCD_JUG).drip("ZRX-A");

        // Set the global debt ceiling
        // Existing Line: 265m
        // New Line: 345m
        VatAbstract(MCD_VAT).file("Line", 345 * MILLION * RAD);

        // Set the ETH-A debt ceiling
        // Existing Line: 180m
        // New Line: 220m
        VatAbstract(MCD_VAT).file("ETH-A", "line", 220 * MILLION * RAD);

        // Set the USDC-A debt ceiling
        // Existing Line: 40m
        // New Line: 80m
        VatAbstract(MCD_VAT).file("USDC-A", "line", 80 * MILLION * RAD);
    }
}
function execute() external {
    // Perform drips
    PotAbstract(MCD_POT).drip();

    JugAbstract(MCD_JUG).drip("ETH-A");
    JugAbstract(MCD_JUG).drip("BAT-A");
    JugAbstract(MCD_JUG).drip("USDC-A");
    JugAbstract(MCD_JUG).drip("USDC-B");
    JugAbstract(MCD_JUG).drip("TUSD-A");
    JugAbstract(MCD_JUG).drip("WBTC-A");
    JugAbstract(MCD_JUG).drip("KNC-A");
    JugAbstract(MCD_JUG).drip("ZRX-A");

    // Set the global debt ceiling
    // Existing Line: 265m
    // New Line: 345m
    VatAbstract(MCD_VAT).file("Line", 345 * MILLION * RAD);

    // Set the ETH-A debt ceiling
    // Existing Line: 180m
    // New Line: 220m
    VatAbstract(MCD_VAT).file("ETH-A", "line", 220 * MILLION * RAD);

    // Set the USDC-A debt ceiling
    // Existing Line: 40m
    // New Line: 80m
    VatAbstract(MCD_VAT).file("USDC-A", "line", 80 * MILLION * RAD);
}

// 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) )'