0 txs
4 calls
constructor
constructor((address treasuryPayoutAddress, address[] billOperators) _billDefaultConfig, (address feeTo, address automationAddress, address billNft) _defaultBillAccounts, address _factoryStorage, address _billImplementationAddress, address _treasuryImplementationAddress, address[] _billCreators)
functions
BILL_CREATOR_ROLE
viewfunction BILL_CREATOR_ROLE() view returns (bytes32)
billDefaultConfig
viewfunction billDefaultConfig() view returns (address treasuryPayoutAddress)
billImplementationAddress
viewfunction billImplementationAddress() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deployedBills
viewfunction deployedBills(uint256) view returns (address)
deployedTreasuries
viewfunction deployedTreasuries(uint256) view returns (address)
factoryStorage
viewfunction factoryStorage() view returns (address)
getBondCreationDetails
purefunction getBondCreationDetails(address _payoutToken, address _principalToken, address _initialOwner, address _vestingCurve, uint256[] _tierCeilings, uint256[] _fees, uint256 _startVestingTimestamp, bool _feeInPayout) pure returns (tuple)
getBondDefaultAccounts
viewfunction getBondDefaultAccounts() view returns (address feeTo, address automationAddress, address billNft)
getBondDefaultConfig
viewfunction getBondDefaultConfig() view returns (address _treasuryPayoutAddress, address _billFeeTo, address _automationAddress, address _billNft, address[] _billOperators)
getBondTerms
purefunction getBondTerms(uint256 _endTime, uint256 _startTime, uint256 _vestingTerm, uint256 _refundPeriod, uint256 _refundFee, uint256 _price, uint256 _maxRaise, uint16 _initialRelease, uint256 _maxTotalPayout, bool _oversubscription) pure returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
owner
viewfunction owner() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalDeployed
viewfunction totalDeployed() view returns (uint256 _billsDeployed, uint256 _treasuriesDeployed)
treasuryImplementationAddress
viewfunction treasuryImplementationAddress() view returns (address)
VERSION
viewfunction VERSION() view returns (string)
createBill_CustomConfig
nonpayablefunction createBill_CustomConfig(tuple _billCreationDetails, tuple _billTerms, tuple _billAccounts, address[] _billOperators, address _customTreasury, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _treasury, address _bill)
createBill_Explorer
nonpayablefunction createBill_Explorer(address _payoutToken, address _principalToken, address _initialOwner, address _vestingCurve, uint256[] _tierCeilings, uint256[] _fees, uint256 _startVestingTimestamp, bool _feeInPayout, tuple _billTerms, address _customTreasury, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _treasury, address _bill)
createBill
nonpayablefunction createBill(tuple _billCreationDetails, tuple _billTerms, address _customTreasury, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _treasury, address _bill)
createBillAndTreasury_CustomConfig
nonpayablefunction createBillAndTreasury_CustomConfig(tuple _billCreationDetails, tuple _billTerms, tuple _billAccounts, address[] _billOperators, address _payoutAddress, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _customTreasury, address _bill)
createBillAndTreasury_Explorer
nonpayablefunction createBillAndTreasury_Explorer(address _payoutToken, address _principalToken, address _initialOwner, address _vestingCurve, uint256[] _tierCeilings, uint256[] _fees, uint256 _startVestingTimestamp, bool _feeInPayout, tuple _billTerms, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _customTreasury, address _bill)
createBillAndTreasury
nonpayablefunction createBillAndTreasury(tuple _billCreationDetails, tuple _billTerms, uint256 _minPoints, uint256 _maxPoints, address _pointsLens) returns (address _customTreasury, address _bill)
createTreasury_CustomConfig
nonpayablefunction createTreasury_CustomConfig(address _payoutToken, address _initialOwner, address _payoutAddress) returns (address _customTreasury)
grantBillCreatorRole
nonpayablefunction grantBillCreatorRole(address[] _billCreators)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeBillCreatorRole
nonpayablefunction revokeBillCreatorRole(address[] _billCreators)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAutomationAddress
nonpayablefunction setAutomationAddress(address _automationAddress)
setBillImplementation
nonpayablefunction setBillImplementation(address _billImplementation)
setBillOperators
nonpayablefunction setBillOperators(address[] _billOperators)
setBondNft
nonpayablefunction setBondNft(address _billNft)
setFactoryStorage
nonpayablefunction setFactoryStorage(address _factoryStorage)
setFeeTo
nonpayablefunction setFeeTo(address _feeTo)
setTreasuryImplementation
nonpayablefunction setTreasuryImplementation(address _treasuryImplementation)
setTreasuryPayoutAddress
nonpayablefunction setTreasuryPayoutAddress(address _treasuryPayoutAddress)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
CreatedBill
event CreatedBill((address payoutToken, address principalToken, address initialOwner, address vestingCurve, uint256[] tierCeilings, uint256[] fees, uint256 startVestingTimestamp, bool feeInPayout) billCreationDetails, address customTreasury, address bill, address billNft)
CreatedTreasury
event CreatedTreasury(address customTreasury, address payoutToken, address owner, address payoutAddress)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetAutomationAddress
event SetAutomationAddress(address newAutomationAddress)
SetBillImplementation
event SetBillImplementation(address newBillImplementation)
SetBondNft
event SetBondNft(address newBondNftAddress)
SetFactoryStorage
event SetFactoryStorage(address newFactoryStorage)
SetFeeTo
event SetFeeTo(address newFeeTo)
SetTreasuryImplementation
event SetTreasuryImplementation(address newTreasuryImplementation)
SetTreasuryPayout
event SetTreasuryPayout(address newTreasuryPayout)
errors
No errors.
creation bytecode
0x604060808152346200056f57620031db90813803806200001f8162000574565b9384398201918083039261010084126200056f5781516001600160401b0393908481116200056f5783019181838203126200056f57815193828501858110878211176200043857835262000073846200059a565b8552602093848101518781116200056f5783620000949160609301620005af565b86860190815297601f1901126200056f57825191606083018381108882111762000438578452620000c78583016200059a565b8352620000d68483016200059a565b91858401928352620000eb606082016200059a565b98858501998a5262000100608083016200059a565b976200010f60a084016200059a565b926200011e60c082016200059a565b9460e08201518c81116200056f57620001389201620005af565b9a620001443362000621565b6200014f3362000621565b86516001600160a01b0397908816156200052b578782511615620004e75787875116156200049257908780809351169760018060a01b0319988960055416176005555116876006541617600655511685600754161760075585815116156200044e578590511684600354161760035551968751988911620004385768010000000000000000891162000438578660049889548b8b55808c106200040a575b5090869291019960009a8a8c52898c208c5b838110620003f25750505050168015620003af579084918460085416176008551680156200036e57908391836009541617600955169081156200032d57600a541617600a55845b86518110156200031e57620002ae82858360051b8a010151167f18527a1dc729a066c7898d2de2171aeeccaea343b55b31ff93a5dfe39c4c98a28089526001808852868a20838b52885260ff878b20541615620002d5575b5088526002865284882062000668565b506000198114620002c25760010162000246565b634e487b7160e01b865260118552602486fd5b818a52808852868a20838b528852868a209060ff198254161790553382827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8c80a4386200029e565b8251612ae59081620006f68239f35b606486868087519262461bcd60e51b845283015260248201527f7472656173757279496d706c656d656e7461206e6f74203020616464726573736044820152fd5b606487878088519262461bcd60e51b845283015260248201527f62696c6c496d706c656d656e746174696f6e206e6f74203020616464726573736044820152fd5b855162461bcd60e51b8152808901889052601c60248201527f666163746f727953746f72616765206e6f7420302061646472657373000000006044820152606490fd5b8251909516858201558894918b0191600101620001ff565b60008b81528c84822092830192015b82811062000429575050620001ed565b8181558b945060010162000419565b634e487b7160e01b600052604160045260246000fd5b865162461bcd60e51b815260048101899052601b60248201527f7061796f757441646472657373206e6f742030206164647265737300000000006044820152606490fd5b885162461bcd60e51b8152600481018b9052602860248201527f6175746f6d6174696f6e416464726573732063616e6e6f74206265207a65726f604482015267206164647265737360c01b6064820152608490fd5b885162461bcd60e51b8152600481018b9052601e60248201527f62696c6c4e66742063616e6e6f74206265207a65726f206164647265737300006044820152606490fd5b885162461bcd60e51b8152600481018b9052601f60248201527f54726561737572792063616e6e6f74206265207a65726f2061646472657373006044820152606490fd5b600080fd5b6040519190601f01601f191682016001600160401b038111838210176200043857604052565b51906001600160a01b03821682036200056f57565b81601f820112156200056f578051916001600160401b03831162000438578260051b6020928380620005e381850162000574565b8097815201928201019283116200056f578301905b82821062000607575050505090565b83809162000615846200059a565b815201910190620005f8565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3565b91906001830160009082825280602052604082205415600014620006ef5784549468010000000000000000861015620006db5760018601808255861015620006c757836040949596828552602085200155549382526020522055600190565b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b83526041600452602483fd5b5092505056fe60806040908082526004918236101561001757600080fd5b600091823560e01c90816301ffc9a714611610575080630cfb14b0146115eb578063111ce4ca1461154457806317c9855d146114555780631ae35dac146113e7578063248a9ca3146113bd5780632f2ff15d146113015780633261fd681461129357806332ae39f41461125857806335c3f0ec146111a057806336568abe1461110f5780633779748f146110e75780633a0303ba14610ff35780633c48794b14610f3d5780634fe115e914610ec95780636699aec214610ddb578063697bee9514610d46578063698357ac14610d1e578063715018a614610cc45780637e08902814610c0b5780638da5cb5b14610be45780639010d07c14610ba3578063918d469614610b7b57806391d1485414610b345780639675612014610ad85780639851108a14610a315780639878aadc14610a09578063a1a0b6881461099b578063a217fddf14610981578063ae2f05b114610925578063c06e1ae2146108fd578063ca15c873146108d5578063d547741f14610897578063d932527a14610799578063e68cf90a146106b2578063e7d3941914610663578063e7dd96d21461059c578063f14068e6146104b8578063f2fde38b146103f5578063f46901ed1461033f578063fd6da0f01461025b5763ffa1ad74146101f357600080fd5b34610257578160031936011261025757805191818301908382106001600160401b0383111761024457506102409350815260058252640322e342e360dc1b60208301525191829182611a06565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b828434610257576020908160031936011261033b576001600160401b039181358381116103375736602382011215610337576102a0903690602481860135910161198d565b6102a8611dca565b805193841161032457600160401b841161032457819083548585558086106102fc575b500191845280842090845b8481106102e1578580f35b83516001600160a01b031683820155928101926001016102d6565b8487528583882091820191015b81811061031657506102cb565b878155849350600101610309565b634e487b7160e01b855260418352602485fd5b8480fd5b8280fd5b5082903461033b57602036600319011261033b5761035b6116ca565b610363611dca565b6001600160a01b03169182156103b35750600580546001600160a01b03191683179055519081527ff6b59ffc88fbb27f33470b919e00b41139ee340eb349521f0cbbc1504ce29c3e90602090a180f35b6020606492519162461bcd60e51b8352820152601c60248201527f666565546f2063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b50823461033b57602036600319011261033b576104106116ca565b90610419611dca565b6001600160a01b0391821692831561046657505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b50823461033b5761014091826003193601126105985760e43561ffff811680910361033757610124359081151580920361059457946105929394958351926104ff846118d9565b82845282602085015282858501528260608501528260808501528260a08501528260c08501528260e085015261010092808486015261012080950152845196610547886118d9565b35875260243560208801526044358588015260a4356060880152608087015260a086015260c43560c08601526101043560e08601526064359085015260843590840152518092611872565bf35b8580fd5b8380fd5b5082903461033b57602036600319011261033b576105b86116ca565b6105c0611dca565b6001600160a01b03169182156106105750600680546001600160a01b03191683179055519081527fb8e4c57da967081ef5f308045e91828b1c3a7f169e3c33ddd8d71a66ee011dee90602090a180f35b6020608492519162461bcd60e51b8352820152602860248201527f6175746f6d6174696f6e416464726573732063616e6e6f74206265207a65726f604482015267206164647265737360c01b6064820152fd5b5034610257576060366003190112610257576020906106a16106836116ca565b61068b6116e0565b61069361170d565b9161069c611a32565b6124af565b90516001600160a01b039091168152f35b50823461033b5760031961026036820112610598578135936001600160401b0391828611610257576101009086360301126107965761014036602319011261079657606036610163190112610796576101c43591821161079657509261077691610722610240953690830161169a565b909161074961072f6116f6565b9161073861167e565b95610741611a32565b369101612138565b610752366121fd565b61075b3661230b565b9061077061022435966102043596369161198d565b926126e1565b91516001600160a01b039182168152911660208201529081906040820190565b80fd5b50823461033b5760209081600319360112610598578035906001600160401b038211610337576107cb9136910161169a565b6107d6939193611dca565b845b8181106107e3578580f35b806108446107fd6107f861084a94868a61249f565b6120b8565b600080516020612a90833981519152808a526001808952878b206001600160a01b03909316808c52928952878b205460ff161561084f575b50895260028752858920611f41565b5061247a565b6107d8565b818b52808952878b20838c528952878b209060ff198254161790553382827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8d80a48a610835565b5082903461033b578060031936011261033b576108d291356108cd60016108bc6116e0565b938387528160205286200154611c37565b611d41565b80f35b50823461033b57602036600319011261033b5760209282913581526002845220549051908152f35b503461025757816003193601126102575760085490516001600160a01b039091168152602090f35b50823461033b57602036600319011261033b5735600c5481101561033b57600c9092527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79091015490516001600160a01b039091168152602090f35b503461025757816003193601126102575751908152602090f35b50346102575760203660031901126102575760207f8c264331caf0a7dd7a5ddc4f9f6f00f8a7b9ae22c8724810ddcd8ca0d96ced3f916109d96116ca565b6109e1611dca565b600a80546001600160a01b0319166001600160a01b039290921691821790559051908152a180f35b5034610257578160031936011261025757600a5490516001600160a01b039091168152602090f35b5090346107965761010036600319011261079657610a4d6116ca565b90610a566116e0565b93610a5f61170d565b90610a68611737565b926001600160401b039160843583811161033b57610a89903690830161169a565b93909260a435918211610796575091610ab061024099969492610ac598969436910161169a565b949093610abb61174d565b9760c43597612372565b90519182916020835260208301906117fb565b50823461033b57602036600319011261033b5735600b5481101561033b57600b9092527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99091015490516001600160a01b039091168152602090f35b50823461033b578160031936011261033b578160209360ff92610b556116e0565b90358252600186528282206001600160a01b039091168252855220549151911615158152f35b503461025757816003193601126102575760035490516001600160a01b039091168152602090f35b50823461033b578160031936011261033b57602092610bce9135815260028452826024359120611799565b905491519160018060a01b039160031b1c168152f35b5034610257578160031936011261025757905490516001600160a01b039091168152602090f35b5082903461033b57602036600319011261033b5781356001600160a01b038116929083900361059857610c3c611dca565b8215610c825750600780546001600160a01b03191683179055519081527f5aa84cdd22a073387038c5856d82bc2e1584488d7a65d7c788d770eb6a449c2c90602090a180f35b6020606492519162461bcd60e51b8352820152601e60248201527f62696c6c4e66742063616e6e6f74206265207a65726f206164647265737300006044820152fd5b8234610796578060031936011261079657610cdd611dca565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461025757816003193601126102575760095490516001600160a01b039091168152602090f35b50823461033b57600319906101e036830112610598578035916001600160401b0383116103375761010090833603011261059857610140366023190112610598576001600160a01b03936101643592908584168403610796576101c4359586168603610796575091610dc2610240959261077694610741611a32565b6101a435916101843591610dd5366121fd565b90612666565b50823461033b576102c036600319011261033b57610df76116ca565b90610e006116e0565b91610e0961170d565b91610e12611737565b6001600160401b03608435818111610ec557610e31903690850161169a565b91909360a435918211610ec157610e4a9136910161169a565b939092610e5561174d565b9661014036610103190112610ebd57610e6c61167e565b6102a4359b9099906001600160a01b038d168d036107965750926102409b9895926107769a989592610eaa9895610ea1611a32565b60c43597612372565b61028435916102643591610dd536612280565b8a80fd5b8980fd5b8880fd5b5090346107965780600319360112610796575060035481516001600160a01b0392918316916102409190610f0782610f0081612416565b0383611955565b8460055416948060065416906007541691805196879687526020870152850152606084015260a0608084015260a083019061175c565b5082903461033b57602036600319011261033b57610f596116ca565b610f61611dca565b6001600160a01b0316918215610fb15750600380546001600160a01b03191683179055519081527f5f1fdafd647ddd388001c80cf24dc9d0a3ec88a2e541e390793b0730eaffcba490602090a180f35b6020606492519162461bcd60e51b8352820152601c60248201527f74726561737572795061796f7574206e6f7420302061646472657373000000006044820152fd5b509034610796576102a03660031901126107965761100f6116ca565b926110186116e0565b9361102161170d565b9161102a611737565b6001600160401b03916084358381116110e35761104a903690830161169a565b91909360a4359081116110df576110639136910161169a565b93909261106e61174d565b9661014036610103190112610ec557610284359a6001600160a01b03998a8d168d036107965750926102409b9895926107769a9895926110b19895610ea1611a32565b9080825116916110d5828783015116936102643594610244359460035416916124af565b90610dd536612280565b8780fd5b8680fd5b503461025757816003193601126102575760209051600080516020612a908339815191528152f35b5091346102575782600319360112610257576111296116e0565b90336001600160a01b0383160361114557906108d29135611d41565b608490602085519162461bcd60e51b8352820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152fd5b50823461033b576003199061026036830112610598578035936001600160401b0390818611610796576101008684019487360301126107965761014036602319011261079657606036610163190112610796576101c43591821161079657509161121461024095926107769436910161169a565b90916107496112506112246116f6565b61122c61167e565b96611235611a32565b61124a6044611243876120b8565b92016120b8565b906124af565b913690612138565b503461025757816003193601126102575760609060018060a01b03806005541691816006541691600754169181519384526020840152820152f35b50823461033b57602036600319011261033b57356001600160a01b038116919082900361033b577f1e6216cbf0bd14457f0ea37a88a7244f47acbbd80b6449368d45fe90a8e348d0916020916112e7611dca565b600980546001600160a01b0319168317905551908152a180f35b5082903461033b578060031936011261033b5761137091359060026113246116e0565b928086526020906001825261133e60018589200154611c37565b808752600182528387206001600160a01b039095168088529482528387205460ff1615611374575b8652528320611f41565b5080f35b808752600182528387208588528252838720600160ff198254161790553385827f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8a80a4611366565b50823461033b57602036600319011261033b57816020936001923581528285522001549051908152f35b50346102575760203660031901126102575760207fb149c5465cd76f9add23bf764dad5b2fc86b61831d914da0d008417026e733cd916114256116ca565b61142d611dca565b600880546001600160a01b0319166001600160a01b039290921691821790559051908152a180f35b50823461033b5760209081600319360112610598578035906001600160401b038211610337576114879136910161169a565b611492939193611dca565b845b81811061149f578580f35b806108446114b46107f86114fa94868a61249f565b600080516020612a90833981519152808a526001808952878b206001600160a01b03909316808c52928952878b205460ff166114ff575b50895260028752858920611fc8565b611494565b818b528852868a20828b528852868a20805460ff191690553382827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8d80a48a6114eb565b50823461033b57600319906101c036830112610598578035906001600160401b0382116103375781610100910192823603011261059857610140366023190112610598576101a435936001600160a01b039081861686036107965750916115d86112506102409693610776956115b8611a32565b6115cd60446115c6876120b8565b93016120b8565b9060035416916124af565b61018435916101643591610dd5366121fd565b50903461079657806003193601126107965750600b54600c5482519182526020820152f35b8390853461033b57602036600319011261033b573563ffffffff60e01b811680910361033b5760209250635a05180f60e01b8114908115611653575b5015158152f35b637965db0b60e01b81149150811561166d575b508361164c565b6301ffc9a760e01b14905083611666565b61024435906001600160a01b038216820361169557565b600080fd5b9181601f84011215611695578235916001600160401b038311611695576020808501948460051b01011161169557565b600435906001600160a01b038216820361169557565b602435906001600160a01b038216820361169557565b6101e435906001600160a01b038216820361169557565b604435906001600160a01b038216820361169557565b35906001600160a01b038216820361169557565b606435906001600160a01b038216820361169557565b60e43590811515820361169557565b90815180825260208080930193019160005b82811061177c575050505090565b83516001600160a01b03168552938101939281019260010161176e565b80548210156117b15760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b90815180825260208080930193019160005b8281106117e7575050505090565b8351855293810193928101926001016117d9565b9060018060a01b03808351168252806020840151166020830152806040840151166040830152606083015116606082015260e08061185d61184b60808601516101008060808801528601906117c7565b60a086015185820360a08701526117c7565b9360c081015160c08501520151151591015290565b8051825260208101516020830152604081015160408301526060810151606083015260808101511515608083015261ffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080910151910152565b61014081019081106001600160401b038211176118f557604052565b634e487b7160e01b600052604160045260246000fd5b61010081019081106001600160401b038211176118f557604052565b6001600160401b0381116118f557604052565b608081019081106001600160401b038211176118f557604052565b90601f801991011681019081106001600160401b038211176118f557604052565b6001600160401b0381116118f55760051b60200190565b929161199882611976565b916119a66040519384611955565b829481845260208094019160051b810192831161169557905b8282106119cc5750505050565b8380916119d884611723565b8152019101906119bf565b60005b8381106119f65750506000910152565b81810151838201526020016119e6565b60409160208252611a2681518092816020860152602086860191016119e3565b601f01601f1916010190565b3360009081527f8775359c90df1c66b8ab6215bbc218536cfc158f42ed73db895309bc2cf8bacb6020908152604080832054909290600190600080516020612a908339815191529060ff1615611a89575050505050565b611a9233611e33565b90855192611a9f8461193a565b60428452858401946060368737845115611c2357603086538451821015611c235790607860218601536041915b818311611bb557505050611b7357611b21938593611b5993611b4a604894611b6f9951988576020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8b9788015282519283916037890191016119e3565b8401917001034b99036b4b9b9b4b733903937b6329607d1b6037840152518093868401906119e3565b01036028810185520183611955565b5162461bcd60e51b815291829160048301611a06565b0390fd5b60648486519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015611c0f576f181899199a1a9b1b9c1cb0b131b232b360811b901a611be58588611e22565b5360041c928015611bfb57600019019190611acc565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b6000818152600190602091808352604093848320338452845260ff858420541615611c63575050505050565b611c6c33611e33565b90855192611c798461193a565b60428452858401946060368737845115611c2357603086538451821015611c235790607860218601536041915b818311611cfb57505050611b7357611b21938593611b5993611b4a604894611b6f9951988576020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8b9788015282519283916037890191016119e3565b909192600f81166010811015611c0f576f181899199a1a9b1b9c1cb0b131b232b360811b901a611d2b8588611e22565b5360041c928015611bfb57600019019190611ca6565b906040611d7f9260009080825260016020528282209360018060a01b03169384835260205260ff8383205416611d82575b8152600260205220611fc8565b50565b808252600160205282822084835260205282822060ff1981541690553384827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8580a4611d72565b6000546001600160a01b03163303611dde57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9081518110156117b1570160200190565b60405190606082018281106001600160401b038211176118f557604052602a82526020820160403682378251156117b1576030905381516001908110156117b157607860218401536029905b808211611ed3575050611e8f5790565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b9091600f81166010811015611f2c576f181899199a1a9b1b9c1cb0b131b232b360811b901a611f028486611e22565b5360041c918015611f17576000190190611e7f565b60246000634e487b7160e01b81526011600452fd5b60246000634e487b7160e01b81526032600452fd5b91906001830160009082825280602052604082205415600014611fc257845494600160401b861015611fae5783611f9e611f85886001604098999a01855584611799565b819391549060031b600019811b9283911b169119161790565b9055549382526020522055600190565b634e487b7160e01b83526041600452602483fd5b50925050565b906001820190600092818452826020526040842054908115156000146120b1576000199180830181811161209d5782549084820191821161208957808203612054575b50505080548015612040578201916120238383611799565b909182549160031b1b191690555582526020526040812055600190565b634e487b7160e01b86526031600452602486fd5b612074612064611f859386611799565b90549060031b1c92839286611799565b9055865284602052604086205538808061200b565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b87526011600452602487fd5b5050505090565b356001600160a01b03811681036116955790565b92916120d782611976565b916120e56040519384611955565b829481845260208094019160051b810192831161169557905b82821061210b5750505050565b813581529083019083016120fe565b9080601f8301121561169557816020612135933591016120cc565b90565b919061010090818482031261169557604051918201936001600160401b0394838110868211176118f557604052829461217082611723565b845261217e60208301611723565b602085015261218f60408301611723565b60408501526121a060608301611723565b6060850152608082013581811161169557836121bd91840161211a565b608085015260a08201359081116116955760e0926121dc91830161211a565b60a084015260c081013560c084015201359081151582036116955760e00152565b6101409060231901126116955760405190612217826118d9565b81602435815260443560208201526064356040820152608435606082015260a435801515810361169557608082015260c43561ffff811681036116955760a082015260e43560c08201526101043560e08201526101243561010082015261012061014435910152565b61014090610103190112611695576040519061229b826118d9565b816101043581526101243560208201526101443560408201526101643560608201526101843580151581036116955760808201526101a43561ffff811681036116955760a08201526101c43560c08201526101e43560e08201526102043561010082015261012061022435910152565b6060906101631901126116955760405190606082018281106001600160401b038211176118f5576040526001600160a01b03826101643582811681036116955781526101843582811681036116955760208201526101a43591821682036116955760400152565b906123f6936124029796929a999895939a60405161238f8161190b565b60e060009182815282602082015282604082015282606082015260606080820152606060a08201528260c082015201526040519b6123cc8d61190b565b6001600160a01b039182168d5292811660208d015291821660408c01521660608a015236916120cc565b608087015236916120cc565b60a084015260c0830152151560e082015290565b6004805480835260009182526020928301927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b92905b82821061245a575050505090565b83546001600160a01b03168552938401936001938401939091019061244c565b60001981146124895760010190565b634e487b7160e01b600052601160045260246000fd5b91908110156117b15760051b0190565b600a546001600160a01b03949392600092909186906124cf9082166125d2565b1695863b1561059857808060405193631cd7f7fb60e31b85521693846004850152169485602484015216908160448201526080606482015283818061251660848201612416565b0381838b5af180156125c7576125b4575b50600c5492600160401b8410156125a057506001830180600c558310156117b1577fc2e4361e1c4df34325e130fc802df07757639590137fd9e13d8258cfc46864c493608093600c6000526020600020018760018060a01b031982541617905560405192878452602084015260408301526060820152a1565b634e487b7160e01b81526041600452602490fd5b6125c090939193611927565b9138612527565b6040513d86823e3d90fd5b6e5af43d82803e903d91602b57fd5bf390763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c161760005260781b17602052603760096000f0906001600160a01b0382161561262857565b60405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606490fd5b6040516060810196959493926001600160401b038811828910176118f5576126c99760405260018060a01b038060055416835280600654166020840152600754166040830152604051926126c4846126bd81612416565b0385611955565b6126e1565b9091565b51906001600160a01b038216820361169557565b6040805163277d415b60e11b81529499989597600096919592946001600160a01b038a16949093919291602081600481895afa908115612a85578991612a4b575b5086516001600160a01b03908116911603612a0f576009546001600160a01b039061274e9082166125d2565b169b8c3b15610ec5578c878a888d6127a2976127de84988f988d8a6127979b519d8e9c8d9b8c9a631cd03bb360e11b8c5260048c015261026060248c01526102648b01906117fb565b9460448a0190611872565b81516001600160a01b039081166101848a0152602083015181166101a48a0152910151166101c4870152858203600319016101e487015261175c565b61020484019290925261022483018a90526001600160a01b031661024483015203925af180156129f2576129fc575b50818501516001600160a01b0316803b156110e35786809160248d89519485938492634c1d96ab60e11b845260048401525af180156129f2579087916129de575b5050600b54600160401b8110156129ca576001810180600b558110156117b157600b6000527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319168b179055818501518551608080825287968d9661294c958b959294919390927f7d9826eed92d54d9de3758f19470a0cd599c001b8ead994a3d6fefba54a2d59c929182916001600160a01b0316906128fb908301886117fb565b908660208401528b8d84015260608301520390a16008549588015188516303c9abd360e61b815260c060048201529b8c986001600160a01b03988916988a98899793949091169260c48801906117fb565b94602487015260448601526064850152608484015260a483015203925af180156129bf5761297c575b5050509190565b82813d83116129b8575b6129908183611955565b8101031261079657506020816129a86129af936126cd565b50016126cd565b50388080612975565b503d612986565b5051903d90823e3d90fd5b634e487b7160e01b87526041600452602487fd5b6129e790611927565b61059457853861284e565b86513d89823e3d90fd5b612a0890969196611927565b943861280d565b865162461bcd60e51b81526020600482015260156024820152740e0c2f2deeae840e8ded6cadc40dad2e6dac2e8c6d605b1b6044820152606490fd5b90506020813d602011612a7d575b81612a6660209383611955565b81010312610ec557612a77906126cd565b38612722565b3d9150612a59565b88513d8b823e3d90fdfe18527a1dc729a066c7898d2de2171aeeccaea343b55b31ff93a5dfe39c4c98a2a2646970667358221220348072e198f66ef71d75f795077266f331bf8ca9f9811c5aaa766ea01ec17fdb64736f6c634300081100330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000f947eadb4619c27a19e124f5dce9f23be81360cd000000000000000000000000e5571cb2536e7c5b5a2520e0c579e2e9e67b8305000000000000000000000000b75be16984a27d3023e1cf744e2587e9aa8750c900000000000000000000000021c43d7578b38c1a16a7956c0ab28a98e504e8de000000000000000000000000f5de712ad6b55cc62de4d789c30098d3583b88e2000000000000000000000000bd3bb560971ff929f6704760e35505e5a53eb38a00000000000000000000000000000000000000000000000000000000000002600000000000000000000000003f5bedd3baef93aa4f8aa1891967a8027b82b7f500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a50d2f756692acbf9b9c0f22b98a6ba02fa8ad800000000000000000000000006c905b4108a87499ced1e0498721f2b831c6ab13000000000000000000000000558195ac96e7bdb96bc85382e4bfc2c9e6b22a0900000000000000000000000054e7b27a434249177d939b43abf68ebae8b0e519000000000000000000000000346bf25831698b27046f59210505f70f5391a1970000000000000000000000005c7c7246bd8a18df5f6ee422f9f8ccdf716a6ad20000000000000000000000001724ebd282c7cdb114d4a6c540cd00a815e68bde000000000000000000000000e5edea54596b385c3c8dfd5010c3cf892d547acb0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000a50d2f756692acbf9b9c0f22b98a6ba02fa8ad800000000000000000000000006c905b4108a87499ced1e0498721f2b831c6ab13000000000000000000000000558195ac96e7bdb96bc85382e4bfc2c9e6b22a0900000000000000000000000054e7b27a434249177d939b43abf68ebae8b0e519000000000000000000000000346bf25831698b27046f59210505f70f5391a1970000000000000000000000005c7c7246bd8a18df5f6ee422f9f8ccdf716a6ad20000000000000000000000001724ebd282c7cdb114d4a6c540cd00a815e68bde000000000000000000000000e5edea54596b385c3c8dfd5010c3cf892d547acb