{"file_path":"ESM.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: AGPL-3.0-or-later\r\npragma solidity >=0.6.12;\r\n\r\n////// src/ESM.sol\r\n\r\n/// ESM.sol\r\n\r\n// Copyright (C) 2019-2022 Dai Foundation\r\n\r\n// This program is free software: you can redistribute it and/or modify\r\n// it under the terms of the GNU Affero General Public License as published by\r\n// the Free Software Foundation, either version 3 of the License, or\r\n// (at your option) any later version.\r\n//\r\n// This program is distributed in the hope that it will be useful,\r\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n// GNU Affero General Public License for more details.\r\n//\r\n// You should have received a copy of the GNU Affero General Public License\r\n// along with this program.  If not, see <https://www.gnu.org/licenses/>.\r\n\r\n/* pragma solidity >=0.6.12; */\r\n\r\ninterface GemLike {\r\n    function balanceOf(address) external view returns (uint256);\r\n\r\n    function burn(uint256) external;\r\n\r\n    function transfer(address, uint256) external returns (bool);\r\n\r\n    function transferFrom(address, address, uint256) external returns (bool);\r\n}\r\n\r\ninterface EndLike {\r\n    function live() external view returns (uint256);\r\n\r\n    function vat() external view returns (address);\r\n\r\n    function cage() external;\r\n}\r\n\r\ninterface DenyLike {\r\n    function deny(address) external;\r\n}\r\n\r\ncontract ESM {\r\n\r\n    uint256 constant WAD = 10 ** 18;\r\n\r\n    GemLike public immutable gem;   // collateral (MKR token)\r\n    address public immutable proxy; // Pause proxy\r\n\r\n    mapping(address => uint256) public wards; // auth\r\n    mapping(address => uint256) public sum;   // per-address balance\r\n\r\n    uint256 public Sum;  // total balance\r\n    uint256 public min;  // minimum activation threshold [wad]\r\n    EndLike public end;  // cage module\r\n    uint256 public live; // active flag\r\n\r\n    event Fire();\r\n    event Join(address indexed usr, uint256 wad);\r\n    event File(bytes32 indexed what, uint256 data);\r\n    event File(bytes32 indexed what, address data);\r\n    event Rely(address indexed usr);\r\n    event Deny(address indexed usr);\r\n    event DenyProxy(address indexed base, address indexed pause);\r\n\r\n    constructor(address gem_, address end_, address proxy_, uint256 min_) public {\r\n        gem = GemLike(gem_);\r\n        end = EndLike(end_);\r\n        proxy = proxy_;\r\n        min = min_;\r\n        live = 1;\r\n\r\n        wards[msg.sender] = 1;\r\n        emit Rely(msg.sender);\r\n    }\r\n\r\n    function revokesGovernanceAccess() external view returns (bool ret) {\r\n        ret = proxy != address(0);\r\n    }\r\n\r\n    // -- math --\r\n    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\r\n        z = x + y;\r\n        require(z >= x);\r\n    }\r\n\r\n    // --- Auth ---\r\n    function rely(address usr) external auth {\r\n        wards[usr] = 1;\r\n\r\n        emit Rely(usr);\r\n    }\r\n\r\n    function deny(address usr) external auth {\r\n        wards[usr] = 0;\r\n\r\n        emit Deny(usr);\r\n    }\r\n    modifier auth {\r\n        require(wards[msg.sender] == 1, \"ESM/not-authorized\");\r\n        _;\r\n    }\r\n\r\n    // -- admin --\r\n    function file(bytes32 what, uint256 data) external auth {\r\n        if (what == \"min\") {\r\n            require(data > WAD, \"ESM/min-too-small\");\r\n            min = data;\r\n        } else {\r\n            revert(\"ESM/file-unrecognized-param\");\r\n        }\r\n\r\n        emit File(what, data);\r\n    }\r\n\r\n    function file(bytes32 what, address data) external auth {\r\n        if (what == \"end\") {\r\n            end = EndLike(data);\r\n        } else {\r\n            revert(\"ESM/file-unrecognized-param\");\r\n        }\r\n\r\n        emit File(what, data);\r\n    }\r\n\r\n    function cage() external auth {\r\n        live = 0;\r\n    }\r\n\r\n    function fire() external {\r\n        require(live == 1, \"ESM/permanently-disabled\");\r\n        require(Sum >= min, \"ESM/min-not-reached\");\r\n\r\n        if (proxy != address(0)) {\r\n            DenyLike(end.vat()).deny(proxy);\r\n        }\r\n        end.cage();\r\n\r\n        emit Fire();\r\n    }\r\n\r\n    function denyProxy(address target) external {\r\n        require(live == 1, \"ESM/permanently-disabled\");\r\n        require(Sum >= min, \"ESM/min-not-reached\");\r\n\r\n        DenyLike(target).deny(proxy);\r\n        emit DenyProxy(target, proxy);\r\n    }\r\n\r\n    function join(uint256 wad) external {\r\n        require(live == 1, \"ESM/permanently-disabled\");\r\n        require(end.live() == 1, \"ESM/system-already-shutdown\");\r\n\r\n        sum[msg.sender] = add(sum[msg.sender], wad);\r\n        Sum = add(Sum, wad);\r\n\r\n        require(gem.transferFrom(msg.sender, address(this), wad), \"ESM/transfer-failed\");\r\n        emit Join(msg.sender, wad);\r\n    }\r\n\r\n    function burn() external {\r\n        gem.burn(gem.balanceOf(address(this)));\r\n    }\r\n}","deployed_bytecode":"0x608060405234801561001057600080fd5b50600436106101165760003560e01c80637bd2bea7116100a2578063bf353dbb11610071578063bf353dbb14610353578063d4e8be83146103ab578063ec556889146103f9578063efbe1c1c1461042d578063f88979451461046157610116565b80637bd2bea7146102655780637e459c6014610299578063957aa58c146102f15780639c52a7f11461030f57610116565b806337be827d116100e957806337be827d146101e557806344df8e7014610203578063457094cc1461020d57806365fae35e14610217578063692450091461025b57610116565b8063049878f31461011b5780630715940e1461014957806314c7bbd51461018d57806329ae8114146101ad575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061047f565b005b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061085a565b005b610195610a6a565b60405180821515815260200191505060405180910390f35b6101e3600480360360408110156101c357600080fd5b810190808035906020019092919080359060200190929190505050610ac1565b005b6101ed610cd0565b6040518082815260200191505060405180910390f35b61020b610cd6565b005b610215610e24565b005b6102596004803603602081101561022d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115e565b005b61026361129c565b005b61026d61135a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b6040518082815260200191505060405180910390f35b6102f9611396565b6040518082815260200191505060405180910390f35b6103516004803603602081101561032557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061139c565b005b6103956004803603602081101561036957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114da565b6040518082815260200191505060405180910390f35b6103f7600480360360408110156103c157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f2565b005b6104016116d4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104356116f8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61046961171e565b6040518082815260200191505060405180910390f35b6001600554146104f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663957aa58c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056157600080fd5b505afa158015610575573d6000803e3d6000fd5b505050506040513d602081101561058b57600080fd5b81019080805190602001909291905050501461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f73797374656d2d616c72656164792d73687574646f776e000000000081525060200191505060405180910390fd5b610658600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611724565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106a760025482611724565b6002819055507f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b8101908080519060200190929190505050610809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f7472616e736665722d6661696c65640000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb4e09949657f21548b58afe74e7b86cd2295da5ff1598ae1e5faecb1cf19ca95826040518082815260200191505060405180910390a250565b6001600554146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b600354600254101561094c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f6d696e2d6e6f742d726561636865640000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16639c52a7f17f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156109d557600080fd5b505af11580156109e9573d6000803e3d6000fd5b505050507f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f74269424d52f84560e5738dd2769b61b0e04d5c87c87ca043a1e005e0722a67860405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb73ffffffffffffffffffffffffffffffffffffffff161415905090565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f6d696e0000000000000000000000000000000000000000000000000000000000821415610c2657670de0b6b3a76400008111610c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f45534d2f6d696e2d746f6f2d736d616c6c00000000000000000000000000000081525060200191505060405180910390fd5b80600381905550610c94565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7826040518082815260200191505060405180910390a25050565b60025481565b7f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff166342966c687f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e0a57600080fd5b505af1158015610e1e573d6000803e3d6000fd5b50505050565b600160055414610e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b6003546002541015610f16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f6d696e2d6e6f742d726561636865640000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb73ffffffffffffffffffffffffffffffffffffffff16146110ae57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16639c52a7f17f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b505050507f14c539ef1ff6ef515371448cd46419fd75ebb8698b7f6644c4f66b03b032708560405160405180910390a1565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600581905550565b7f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a281565b60016020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f656e6400000000000000000000000000000000000000000000000000000000008214156116145780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611682565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b817f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b7f000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb81565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600081830190508281101561173857600080fd5b9291505056fea2646970667358221220f73118f1bab39dd398899b11ce3c935cf17c6c504942c0e6ddee6fc7205144a764736f6c634300060c0033","optimization_enabled":false,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"istanbul","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"optimization_runs":null,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/partial_match/1/0x09e05fF6142F2f9de8B6B65855A1d56B6cfE4c58/","decoded_constructor_args":[["0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2",{"internalType":"address","name":"gem_","type":"address"}],["0xBB856d1742fD182a90239D7AE85706C2FE4e5922",{"internalType":"address","name":"end_","type":"address"}],["0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB",{"internalType":"address","name":"proxy_","type":"address"}],["100000000000000000000000",{"internalType":"uint256","name":"min_","type":"uint256"}]],"compiler_version":"0.6.12+commit.27d51765","is_verified_via_verifier_alliance":false,"verified_at":"2024-11-30T14:35:55.300561Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60c060405234801561001057600080fd5b506040516119703803806119708339818101604052608081101561003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600381905550600160058190555060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a25050505060805160601c60a05160601c6117746101fc6000398061096a52806109ef5280610a855280610f30528061102a52806116d65250806106af5280610cd85280610d14528061135c52506117746000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80637bd2bea7116100a2578063bf353dbb11610071578063bf353dbb14610353578063d4e8be83146103ab578063ec556889146103f9578063efbe1c1c1461042d578063f88979451461046157610116565b80637bd2bea7146102655780637e459c6014610299578063957aa58c146102f15780639c52a7f11461030f57610116565b806337be827d116100e957806337be827d146101e557806344df8e7014610203578063457094cc1461020d57806365fae35e14610217578063692450091461025b57610116565b8063049878f31461011b5780630715940e1461014957806314c7bbd51461018d57806329ae8114146101ad575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061047f565b005b61018b6004803603602081101561015f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061085a565b005b610195610a6a565b60405180821515815260200191505060405180910390f35b6101e3600480360360408110156101c357600080fd5b810190808035906020019092919080359060200190929190505050610ac1565b005b6101ed610cd0565b6040518082815260200191505060405180910390f35b61020b610cd6565b005b610215610e24565b005b6102596004803603602081101561022d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061115e565b005b61026361129c565b005b61026d61135a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102db600480360360208110156102af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061137e565b6040518082815260200191505060405180910390f35b6102f9611396565b6040518082815260200191505060405180910390f35b6103516004803603602081101561032557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061139c565b005b6103956004803603602081101561036957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114da565b6040518082815260200191505060405180910390f35b6103f7600480360360408110156103c157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f2565b005b6104016116d4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104356116f8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61046961171e565b6040518082815260200191505060405180910390f35b6001600554146104f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b6001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663957aa58c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056157600080fd5b505afa158015610575573d6000803e3d6000fd5b505050506040513d602081101561058b57600080fd5b81019080805190602001909291905050501461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f73797374656d2d616c72656164792d73687574646f776e000000000081525060200191505060405180910390fd5b610658600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611724565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106a760025482611724565b6002819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050506040513d602081101561078657600080fd5b8101908080519060200190929190505050610809576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f7472616e736665722d6661696c65640000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fb4e09949657f21548b58afe74e7b86cd2295da5ff1598ae1e5faecb1cf19ca95826040518082815260200191505060405180910390a250565b6001600554146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b600354600254101561094c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f6d696e2d6e6f742d726561636865640000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16639c52a7f17f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156109d557600080fd5b505af11580156109e9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f74269424d52f84560e5738dd2769b61b0e04d5c87c87ca043a1e005e0722a67860405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415905090565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b75576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f6d696e0000000000000000000000000000000000000000000000000000000000821415610c2657670de0b6b3a76400008111610c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f45534d2f6d696e2d746f6f2d736d616c6c00000000000000000000000000000081525060200191505060405180910390fd5b80600381905550610c94565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7826040518082815260200191505060405180910390a25050565b60025481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342966c687f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d6020811015610dc357600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610e0a57600080fd5b505af1158015610e1e573d6000803e3d6000fd5b50505050565b600160055414610e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45534d2f7065726d616e656e746c792d64697361626c6564000000000000000081525060200191505060405180910390fd5b6003546002541015610f16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f45534d2f6d696e2d6e6f742d726561636865640000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146110ae57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d6020811015610ffc57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16639c52a7f17f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663692450096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561111857600080fd5b505af115801561112c573d6000803e3d6000fd5b505050507f14c539ef1ff6ef515371448cd46419fd75ebb8698b7f6644c4f66b03b032708560405160405180910390a1565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b6000600581905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b60016020528060005260406000206000915090505481565b60055481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60006020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146115a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f45534d2f6e6f742d617574686f72697a6564000000000000000000000000000081525060200191505060405180910390fd5b7f656e6400000000000000000000000000000000000000000000000000000000008214156116145780600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611682565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f45534d2f66696c652d756e7265636f676e697a65642d706172616d000000000081525060200191505060405180910390fd5b817f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600081830190508281101561173857600080fd5b9291505056fea2646970667358221220f73118f1bab39dd398899b11ce3c935cf17c6c504942c0e6ddee6fc7205144a764736f6c634300060c00330000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000bb856d1742fd182a90239d7ae85706c2fe4e5922000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb00000000000000000000000000000000000000000000152d02c7e14af6800000","name":"ESM","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"istanbul","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":true,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"gem_","type":"address"},{"internalType":"address","name":"end_","type":"address"},{"internalType":"address","name":"proxy_","type":"address"},{"internalType":"uint256","name":"min_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"base","type":"address"},{"indexed":true,"internalType":"address","name":"pause","type":"address"}],"name":"DenyProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[],"name":"Fire","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"inputs":[],"name":"Sum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"denyProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"end","outputs":[{"internalType":"contract EndLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gem","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokesGovernanceAccess","outputs":[{"internalType":"bool","name":"ret","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"0x0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000bb856d1742fd182a90239d7ae85706c2fe4e5922000000000000000000000000be8e3e3618f7474f8cb1d074a26affef007e98fb00000000000000000000000000000000000000000000152d02c7e14af6800000"}