{"file_path":"lib/chief/src/Chief.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: GPL-3.0-or-later\n\n// Chief.sol - select an authority by consensus\n\n// Copyright (C) 2017 DappHub, LLC\n// Copyright (C) 2023 Dai Foundation\n\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\npragma solidity ^0.8.21;\n\ninterface DSAuthority {\n    function canCall(address src, address dst, bytes4 sig) external view returns (bool);\n}\n\ninterface GemLike {\n    function transfer(address, uint256) external;\n    function transferFrom(address, address, uint256) external;\n}\n\ncontract Chief is DSAuthority {\n    uint256                                  public live;\n    address                                  public hat;\n    mapping(bytes32 slate => address[] yays) public slates;\n    mapping(address usr   => bytes32 slate)  public votes;\n    mapping(address yay   => uint256 amt)    public approvals;\n    mapping(address usr   => uint256 amt)    public deposits;\n    uint256                                  public last;\n\n    GemLike public immutable gov;\n    uint256 public immutable maxYays;\n    uint256 public immutable launchThreshold;\n    uint256 public immutable liftCooldown;\n\n    bytes32 public constant EMPTY_SLATE   = keccak256(abi.encodePacked(new address[](0)));\n\n    event Launch();\n    event Lock(address indexed usr, uint256 wad);\n    event Free(address indexed usr, uint256 wad);\n    event Etch(bytes32 indexed slate, address[] yays);\n    event Vote(address indexed usr, bytes32 indexed slate);\n    event Lift(address indexed whom);\n\n    constructor(address gov_, uint256 maxYays_, uint256 launchThreshold_, uint256 liftCooldown_) {\n        gov = GemLike(gov_);\n        maxYays = maxYays_;\n        launchThreshold = launchThreshold_;\n        liftCooldown = liftCooldown_;\n    }\n\n    function _addWeight(uint256 weight, bytes32 slate) internal {\n        address[] memory yays = slates[slate];\n        for (uint256 i = 0; i < yays.length;) {\n            approvals[yays[i]] += weight;\n            unchecked { ++i; } // bounded by max array length\n        }\n    }\n\n    function _subWeight(uint256 weight, bytes32 slate) internal {\n        address[] memory yays = slates[slate];\n        for (uint256 i = 0; i < yays.length;) {\n            approvals[yays[i]] -= weight;\n            unchecked { ++i; } // bounded by max array length\n        }\n    }\n\n    function length(bytes32 slate) external view returns (uint256) {\n        return slates[slate].length;\n    }\n\n    function canCall(address caller, address, bytes4) external view returns (bool ok) {\n        ok = live == 1 && caller == hat;\n    }\n\n    function launch() external {\n        require(live == 0, \"Chief/already-live\");\n        require(hat == address(0), \"Chief/not-address-zero\");\n        require(approvals[address(0)] >= launchThreshold, \"Chief/less-than-threshold\");\n        live = 1;\n        last = block.number;\n        emit Launch();\n    }\n\n    function lock(uint256 wad) external {\n        gov.transferFrom(msg.sender, address(this), wad);\n        deposits[msg.sender] += wad;\n        _addWeight(wad, votes[msg.sender]);\n        emit Lock(msg.sender, wad);\n    }\n\n    function free(uint256 wad) external {\n        require(block.number > last, \"Chief/cant-free-same-block\");\n        deposits[msg.sender] -= wad;\n        _subWeight(wad, votes[msg.sender]);\n        gov.transfer(msg.sender, wad);\n        emit Free(msg.sender, wad);\n    }\n\n    function etch(address[] calldata yays) public returns (bytes32 slate) {\n        require(yays.length <= maxYays, \"Chief/greater-max-yays\");\n        if (yays.length > 1) {\n            unchecked { // bounded by min and max array length\n                for (uint256 i = 0; i < yays.length - 1;) {\n                    // strict inequality ensures both ordering and uniqueness\n                    require(yays[i] < yays[i + 1], \"Chief/yays-not-ordered\");\n                    ++i;\n                }\n            }\n        }\n        slate = keccak256(abi.encodePacked(yays));\n        slates[slate] = yays;\n        emit Etch(slate, yays);\n    }\n\n    function vote(address[] calldata yays) external returns (bytes32 slate) {\n        slate = etch(yays);\n        vote(slate);\n    }\n\n    function vote(bytes32 slate) public {\n        require(slates[slate].length > 0 || slate == EMPTY_SLATE, \"Chief/invalid-slate\");\n        uint256 weight = deposits[msg.sender];\n        _subWeight(weight, votes[msg.sender]);\n        votes[msg.sender] = slate;\n        _addWeight(weight, slate);\n        emit Vote(msg.sender, slate);\n    }\n\n    function lift(address whom) external {\n        require(block.number == last || block.number > last + liftCooldown, \"Chief/cant-lift-again-yet\");\n        require(approvals[whom] > approvals[hat], \"Chief/not-higher-current-hat\");\n        hat = whom;\n        last = block.number;\n        emit Lift(whom);\n    }\n\n    // Compatibility with old getters\n\n    function GOV() external view returns (address) {\n        return address(gov);\n    }\n\n    function MAX_YAYS() external view returns (uint256) {\n        return maxYays;\n    }\n}\n","deployed_bytecode":"0x608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a69beaba116100bf578063d8ccd0f311610079578063d8ccd0f314610327578063dd4670641461033a578063ed0813291461034d578063f8b17a1514610360578063fc7e286d14610387578063fe95a5ce146103a6575f80fd5b8063a69beaba14610279578063a9dbaf251461028c578063b404edbc146102ab578063b7009613146102d2578063c2ffc7bb146102f5578063d8bff5a514610308575f80fd5b80633c278bd5116101105780633c278bd5146101fc57806347799da81461020f5780635123e1fa146102185780635d0341ba1461022b5780637189cae81461024a578063957aa58c14610271575f80fd5b806301339c211461014c57806312d43a5114610156578063180cb47f1461019a578063266f69e3146101c0578063362344b8146101d6575b5f80fd5b6101546103b9565b005b61017d7f00000000000000000000000056072c95faa701256059aa122697b133aded927981565b6040516001600160a01b0390911681526020015b60405180910390f35b7f00000000000000000000000056072c95faa701256059aa122697b133aded927961017d565b6101c8610520565b604051908152602001610191565b7f00000000000000000000000000000000000000000000000000000000000000056101c8565b61015461020a366004610e18565b610551565b6101c860065481565b6101c8610226366004610e38565b610698565b6101c8610239366004610e18565b60046020525f908152604090205481565b6101c87f000000000000000000000000000000000000000000000000000000000000000a81565b6101c85f5481565b610154610287366004610ea7565b610850565b6101c861029a366004610ea7565b5f9081526002602052604090205490565b6101c87f000000000000000000000000000000000000000000000000000000000000000581565b6102e56102e0366004610ebe565b61094a565b6040519015158152602001610191565b61017d610303366004610f0e565b610971565b6101c8610316366004610e18565b60036020525f908152604090205481565b610154610335366004610ea7565b6109a5565b610154610348366004610ea7565b610ae7565b6101c861035b366004610e38565b610bd8565b6101c87f000000000000000000000000000000000000000007c13bc4b2c133c56000000081565b6101c8610395366004610e18565b60056020525f908152604090205481565b60015461017d906001600160a01b031681565b5f54156104025760405162461bcd60e51b815260206004820152601260248201527143686965662f616c72656164792d6c69766560701b60448201526064015b60405180910390fd5b6001546001600160a01b0316156104545760405162461bcd60e51b815260206004820152601660248201527543686965662f6e6f742d616464726573732d7a65726f60501b60448201526064016103f9565b5f805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec547f000000000000000000000000000000000000000007c13bc4b2c133c56000000011156104ed5760405162461bcd60e51b815260206004820152601960248201527f43686965662f6c6573732d7468616e2d7468726573686f6c640000000000000060448201526064016103f9565b60015f908155436006556040517f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e26699190a1565b604080515f8152602081018252610538918101610f2e565b6040516020818303038152906040528051906020012081565b60065443148061058d57507f000000000000000000000000000000000000000000000000000000000000000a60065461058a9190610f80565b43115b6105d95760405162461bcd60e51b815260206004820152601960248201527f43686965662f63616e742d6c6966742d616761696e2d7965740000000000000060448201526064016103f9565b6001546001600160a01b039081165f908152600460205260408082205492841682529020541161064b5760405162461bcd60e51b815260206004820152601c60248201527f43686965662f6e6f742d6869676865722d63757272656e742d6861740000000060448201526064016103f9565b600180546001600160a01b0319166001600160a01b038316908117909155436006556040517f2b07094bdf192088dc9d18c2c3a2b11b7f1df5d6f3460343964c059221e3f048905f90a250565b5f7f00000000000000000000000000000000000000000000000000000000000000058211156107025760405162461bcd60e51b815260206004820152601660248201527543686965662f677265617465722d6d61782d7961797360501b60448201526064016103f9565b60018211156107cb575f5b5f1983018110156107c95783838260010181811061072d5761072d610f93565b90506020020160208101906107429190610e18565b6001600160a01b031684848381811061075d5761075d610f93565b90506020020160208101906107729190610e18565b6001600160a01b0316106107c15760405162461bcd60e51b815260206004820152601660248201527510da1a59598bde585e5ccb5b9bdd0b5bdc99195c995960521b60448201526064016103f9565b60010161070d565b505b82826040516020016107de929190610fa7565b60408051601f1981840301815291815281516020928301205f8181526002909352912090915061080f908484610d88565b50807fbde4476d3fa00c45be48daa5d230f4dbcd5d571237f236d9e24793a4468edbc78484604051610842929190610fe6565b60405180910390a292915050565b5f818152600260205260409020541515806108975750604080515f815260208101825261087e918101610f2e565b6040516020818303038152906040528051906020012081145b6108d95760405162461bcd60e51b815260206004820152601360248201527243686965662f696e76616c69642d736c61746560681b60448201526064016103f9565b335f908152600560209081526040808320546003909252909120546108ff908290610bf4565b335f90815260036020526040902082905561091a8183610cc1565b604051829033907fc1eff9d9e2ab8a2b29706e0c2818cd78972e60f1ce84c268a77005b0bece97c4905f90a35050565b5f8054600114801561096957506001546001600160a01b038581169116145b949350505050565b6002602052815f5260405f20818154811061098a575f80fd5b5f918252602090912001546001600160a01b03169150829050565b60065443116109f65760405162461bcd60e51b815260206004820152601a60248201527f43686965662f63616e742d667265652d73616d652d626c6f636b00000000000060448201526064016103f9565b335f9081526005602052604081208054839290610a14908490611031565b9091555050335f90815260036020526040902054610a33908290610bf4565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000056072c95faa701256059aa122697b133aded92796001600160a01b03169063a9059cbb906044015f604051808303815f87803b158015610a98575f80fd5b505af1158015610aaa573d5f803e3d5ffd5b50506040518381523392507fce6c5af8fd109993cb40da4d5dc9e4dd8e61bc2e48f1e3901472141e4f56f29391506020015b60405180910390a250565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000056072c95faa701256059aa122697b133aded92796001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610b52575f80fd5b505af1158015610b64573d5f803e3d5ffd5b5050335f9081526005602052604081208054859450909250610b87908490610f80565b9091555050335f90815260036020526040902054610ba6908290610cc1565b60405181815233907f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d42790602001610adc565b5f610be38383610698565b9050610bee81610850565b92915050565b5f81815260026020908152604080832080548251818502810185019093528083529192909190830182828015610c5157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c33575b505050505090505f5b8151811015610cbb578360045f848481518110610c7957610c79610f93565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610cae9190611031565b9091555050600101610c5a565b50505050565b5f81815260026020908152604080832080548251818502810185019093528083529192909190830182828015610d1e57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d00575b505050505090505f5b8151811015610cbb578360045f848481518110610d4657610d46610f93565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d7b9190610f80565b9091555050600101610d27565b828054828255905f5260205f20908101928215610dd9579160200282015b82811115610dd95781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190610da6565b50610de5929150610de9565b5090565b5b80821115610de5575f8155600101610dea565b80356001600160a01b0381168114610e13575f80fd5b919050565b5f60208284031215610e28575f80fd5b610e3182610dfd565b9392505050565b5f8060208385031215610e49575f80fd5b823567ffffffffffffffff80821115610e60575f80fd5b818501915085601f830112610e73575f80fd5b813581811115610e81575f80fd5b8660208260051b8501011115610e95575f80fd5b60209290920196919550909350505050565b5f60208284031215610eb7575f80fd5b5035919050565b5f805f60608486031215610ed0575f80fd5b610ed984610dfd565b9250610ee760208501610dfd565b915060408401356001600160e01b031981168114610f03575f80fd5b809150509250925092565b5f8060408385031215610f1f575f80fd5b50508035926020909101359150565b81515f9082906020808601845b83811015610f605781516001600160a01b031685529382019390820190600101610f3b565b50929695505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bee57610bee610f6c565b634e487b7160e01b5f52603260045260245ffd5b5f8184825b85811015610fdb576001600160a01b03610fc583610dfd565b1683526020928301929190910190600101610fac565b509095945050505050565b60208082528181018390525f908460408401835b86811015611026576001600160a01b0361101384610dfd565b1682529183019190830190600101610ffa565b509695505050505050565b81810381811115610bee57610bee610f6c56fea2646970667358221220e4779f394687a6ee1e4d5d56e0ba81ff73749f3e38d78499ea4596493ea831cf64736f6c63430008150033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"shanghai","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"optimization_runs":200,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/partial_match/1/0x929d9A1435662357F54AdcF64DcEE4d6b867a6f9/","decoded_constructor_args":[["0x56072C95FAA701256059aa122697B133aDEd9279",{"internalType":"address","name":"gov_","type":"address"}],["5",{"internalType":"uint256","name":"maxYays_","type":"uint256"}],["2400000000000000000000000000",{"internalType":"uint256","name":"launchThreshold_","type":"uint256"}],["10",{"internalType":"uint256","name":"liftCooldown_","type":"uint256"}]],"compiler_version":"0.8.21+commit.d9974bed","is_verified_via_verifier_alliance":false,"verified_at":"2025-04-30T17:51:29.900029Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x610100604052348015610010575f80fd5b5060405161117338038061117383398101604081905261002f9161004e565b6001600160a01b0390931660805260a09190915260c05260e052610095565b5f805f8060808587031215610061575f80fd5b84516001600160a01b0381168114610077575f80fd5b60208601516040870151606090970151919890975090945092505050565b60805160a05160c05160e05161107a6100f95f395f818161024f015261055e01525f8181610365015261048001525f81816101d8015281816102b0015261069b01525f818161015b0152818161019c01528181610a4f0152610b09015261107a5ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063a69beaba116100bf578063d8ccd0f311610079578063d8ccd0f314610327578063dd4670641461033a578063ed0813291461034d578063f8b17a1514610360578063fc7e286d14610387578063fe95a5ce146103a6575f80fd5b8063a69beaba14610279578063a9dbaf251461028c578063b404edbc146102ab578063b7009613146102d2578063c2ffc7bb146102f5578063d8bff5a514610308575f80fd5b80633c278bd5116101105780633c278bd5146101fc57806347799da81461020f5780635123e1fa146102185780635d0341ba1461022b5780637189cae81461024a578063957aa58c14610271575f80fd5b806301339c211461014c57806312d43a5114610156578063180cb47f1461019a578063266f69e3146101c0578063362344b8146101d6575b5f80fd5b6101546103b9565b005b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000061017d565b6101c8610520565b604051908152602001610191565b7f00000000000000000000000000000000000000000000000000000000000000006101c8565b61015461020a366004610e18565b610551565b6101c860065481565b6101c8610226366004610e38565b610698565b6101c8610239366004610e18565b60046020525f908152604090205481565b6101c87f000000000000000000000000000000000000000000000000000000000000000081565b6101c85f5481565b610154610287366004610ea7565b610850565b6101c861029a366004610ea7565b5f9081526002602052604090205490565b6101c87f000000000000000000000000000000000000000000000000000000000000000081565b6102e56102e0366004610ebe565b61094a565b6040519015158152602001610191565b61017d610303366004610f0e565b610971565b6101c8610316366004610e18565b60036020525f908152604090205481565b610154610335366004610ea7565b6109a5565b610154610348366004610ea7565b610ae7565b6101c861035b366004610e38565b610bd8565b6101c87f000000000000000000000000000000000000000000000000000000000000000081565b6101c8610395366004610e18565b60056020525f908152604090205481565b60015461017d906001600160a01b031681565b5f54156104025760405162461bcd60e51b815260206004820152601260248201527143686965662f616c72656164792d6c69766560701b60448201526064015b60405180910390fd5b6001546001600160a01b0316156104545760405162461bcd60e51b815260206004820152601660248201527543686965662f6e6f742d616464726573732d7a65726f60501b60448201526064016103f9565b5f805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec547f000000000000000000000000000000000000000000000000000000000000000011156104ed5760405162461bcd60e51b815260206004820152601960248201527f43686965662f6c6573732d7468616e2d7468726573686f6c640000000000000060448201526064016103f9565b60015f908155436006556040517f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e26699190a1565b604080515f8152602081018252610538918101610f2e565b6040516020818303038152906040528051906020012081565b60065443148061058d57507f000000000000000000000000000000000000000000000000000000000000000060065461058a9190610f80565b43115b6105d95760405162461bcd60e51b815260206004820152601960248201527f43686965662f63616e742d6c6966742d616761696e2d7965740000000000000060448201526064016103f9565b6001546001600160a01b039081165f908152600460205260408082205492841682529020541161064b5760405162461bcd60e51b815260206004820152601c60248201527f43686965662f6e6f742d6869676865722d63757272656e742d6861740000000060448201526064016103f9565b600180546001600160a01b0319166001600160a01b038316908117909155436006556040517f2b07094bdf192088dc9d18c2c3a2b11b7f1df5d6f3460343964c059221e3f048905f90a250565b5f7f00000000000000000000000000000000000000000000000000000000000000008211156107025760405162461bcd60e51b815260206004820152601660248201527543686965662f677265617465722d6d61782d7961797360501b60448201526064016103f9565b60018211156107cb575f5b5f1983018110156107c95783838260010181811061072d5761072d610f93565b90506020020160208101906107429190610e18565b6001600160a01b031684848381811061075d5761075d610f93565b90506020020160208101906107729190610e18565b6001600160a01b0316106107c15760405162461bcd60e51b815260206004820152601660248201527510da1a59598bde585e5ccb5b9bdd0b5bdc99195c995960521b60448201526064016103f9565b60010161070d565b505b82826040516020016107de929190610fa7565b60408051601f1981840301815291815281516020928301205f8181526002909352912090915061080f908484610d88565b50807fbde4476d3fa00c45be48daa5d230f4dbcd5d571237f236d9e24793a4468edbc78484604051610842929190610fe6565b60405180910390a292915050565b5f818152600260205260409020541515806108975750604080515f815260208101825261087e918101610f2e565b6040516020818303038152906040528051906020012081145b6108d95760405162461bcd60e51b815260206004820152601360248201527243686965662f696e76616c69642d736c61746560681b60448201526064016103f9565b335f908152600560209081526040808320546003909252909120546108ff908290610bf4565b335f90815260036020526040902082905561091a8183610cc1565b604051829033907fc1eff9d9e2ab8a2b29706e0c2818cd78972e60f1ce84c268a77005b0bece97c4905f90a35050565b5f8054600114801561096957506001546001600160a01b038581169116145b949350505050565b6002602052815f5260405f20818154811061098a575f80fd5b5f918252602090912001546001600160a01b03169150829050565b60065443116109f65760405162461bcd60e51b815260206004820152601a60248201527f43686965662f63616e742d667265652d73616d652d626c6f636b00000000000060448201526064016103f9565b335f9081526005602052604081208054839290610a14908490611031565b9091555050335f90815260036020526040902054610a33908290610bf4565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044015f604051808303815f87803b158015610a98575f80fd5b505af1158015610aaa573d5f803e3d5ffd5b50506040518381523392507fce6c5af8fd109993cb40da4d5dc9e4dd8e61bc2e48f1e3901472141e4f56f29391506020015b60405180910390a250565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064015f604051808303815f87803b158015610b52575f80fd5b505af1158015610b64573d5f803e3d5ffd5b5050335f9081526005602052604081208054859450909250610b87908490610f80565b9091555050335f90815260036020526040902054610ba6908290610cc1565b60405181815233907f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d42790602001610adc565b5f610be38383610698565b9050610bee81610850565b92915050565b5f81815260026020908152604080832080548251818502810185019093528083529192909190830182828015610c5157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610c33575b505050505090505f5b8151811015610cbb578360045f848481518110610c7957610c79610f93565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610cae9190611031565b9091555050600101610c5a565b50505050565b5f81815260026020908152604080832080548251818502810185019093528083529192909190830182828015610d1e57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d00575b505050505090505f5b8151811015610cbb578360045f848481518110610d4657610d46610f93565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d7b9190610f80565b9091555050600101610d27565b828054828255905f5260205f20908101928215610dd9579160200282015b82811115610dd95781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190610da6565b50610de5929150610de9565b5090565b5b80821115610de5575f8155600101610dea565b80356001600160a01b0381168114610e13575f80fd5b919050565b5f60208284031215610e28575f80fd5b610e3182610dfd565b9392505050565b5f8060208385031215610e49575f80fd5b823567ffffffffffffffff80821115610e60575f80fd5b818501915085601f830112610e73575f80fd5b813581811115610e81575f80fd5b8660208260051b8501011115610e95575f80fd5b60209290920196919550909350505050565b5f60208284031215610eb7575f80fd5b5035919050565b5f805f60608486031215610ed0575f80fd5b610ed984610dfd565b9250610ee760208501610dfd565b915060408401356001600160e01b031981168114610f03575f80fd5b809150509250925092565b5f8060408385031215610f1f575f80fd5b50508035926020909101359150565b81515f9082906020808601845b83811015610f605781516001600160a01b031685529382019390820190600101610f3b565b50929695505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bee57610bee610f6c565b634e487b7160e01b5f52603260045260245ffd5b5f8184825b85811015610fdb576001600160a01b03610fc583610dfd565b1683526020928301929190910190600101610fac565b509095945050505050565b60208082528181018390525f908460408401835b86811015611026576001600160a01b0361101384610dfd565b1682529183019190830190600101610ffa565b509695505050505050565b81810381811115610bee57610bee610f6c56fea2646970667358221220e4779f394687a6ee1e4d5d56e0ba81ff73749f3e38d78499ea4596493ea831cf64736f6c6343000815003300000000000000000000000056072c95faa701256059aa122697b133aded92790000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000000000000000000000000000a","name":"Chief","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"shanghai","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":true,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address","name":"gov_","type":"address"},{"internalType":"uint256","name":"maxYays_","type":"uint256"},{"internalType":"uint256","name":"launchThreshold_","type":"uint256"},{"internalType":"uint256","name":"liftCooldown_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"slate","type":"bytes32"},{"indexed":false,"internalType":"address[]","name":"yays","type":"address[]"}],"name":"Etch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Free","type":"event"},{"anonymous":false,"inputs":[],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"whom","type":"address"}],"name":"Lift","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"slate","type":"bytes32"}],"name":"Vote","type":"event"},{"inputs":[],"name":"EMPTY_SLATE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_YAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"yay","type":"address"}],"name":"approvals","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"ok","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"yays","type":"address[]"}],"name":"etch","outputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"free","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hat","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"last","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"}],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"lift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liftCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxYays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"slates","outputs":[{"internalType":"address","name":"yays","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"yays","type":"address[]"}],"name":"vote","outputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"votes","outputs":[{"internalType":"bytes32","name":"slate","type":"bytes32"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"0x00000000000000000000000056072c95faa701256059aa122697b133aded92790000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000000000000000000000000000a"}