From c4f7f6f4a28edb5d1661c3cb4205789478521fcb Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Mon, 25 Sep 2023 17:36:48 +0100 Subject: [PATCH 1/7] manager contract --- hardhat/contracts/ILilypadController.sol | 53 +++++++++++++++ hardhat/contracts/ILilypadPayments.sol | 8 --- hardhat/contracts/ILilypadStorage.sol | 1 + hardhat/contracts/ILilypadToken.sol | 5 ++ hardhat/contracts/IOnChainJobClient.sol | 14 ++++ hardhat/contracts/IOnChainJobManager.sol | 18 +++++ hardhat/contracts/LilypadController.sol | 27 +++++--- hardhat/contracts/LilypadPayments.sol | 1 + hardhat/contracts/LilypadStorage.sol | 2 + hardhat/contracts/LilypadToken.sol | 11 +++ hardhat/contracts/OnChainJobManager.sol | 78 ++++++++++++++++++++++ hardhat/contracts/SharedStructs.sol | 10 +++ pkg/resourceprovider/controller.go | 1 + pkg/web3/api.go | 2 + pkg/web3/bindings/controller/controller.go | 28 ++++---- pkg/web3/bindings/mediation/mediation.go | 2 +- pkg/web3/bindings/storage/storage.go | 35 +++++----- pkg/web3/bindings/users/users.go | 2 +- 18 files changed, 246 insertions(+), 52 deletions(-) create mode 100644 hardhat/contracts/ILilypadController.sol create mode 100644 hardhat/contracts/IOnChainJobClient.sol create mode 100644 hardhat/contracts/IOnChainJobManager.sol create mode 100644 hardhat/contracts/OnChainJobManager.sol diff --git a/hardhat/contracts/ILilypadController.sol b/hardhat/contracts/ILilypadController.sol new file mode 100644 index 00000000..fcd5a187 --- /dev/null +++ b/hardhat/contracts/ILilypadController.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +import "./SharedStructs.sol"; + +interface ILilypadController { + + function agree( + string memory dealId, + SharedStructs.DealMembers memory members, + SharedStructs.DealTimeouts memory timeouts, + SharedStructs.DealPricing memory pricing + ) external returns (SharedStructs.Agreement memory); + + function addResult( + string memory dealId, + string memory resultsId, + string memory dataId, + uint256 instructionCount + ) external; + + function acceptResult( + string memory dealId + ) external; + + function checkResult( + string memory dealId + ) external; + + function mediationAcceptResult( + string memory dealId + ) external; + + function mediationRejectResult( + string memory dealId + ) external; + + function timeoutAgree( + string memory dealId + ) external; + + function timeoutSubmitResult( + string memory dealId + ) external; + + function timeoutJudgeResult( + string memory dealId + ) external; + + function timeoutMediateResult( + string memory dealId + ) external; +} diff --git a/hardhat/contracts/ILilypadPayments.sol b/hardhat/contracts/ILilypadPayments.sol index d47870f7..06cfc2a9 100644 --- a/hardhat/contracts/ILilypadPayments.sol +++ b/hardhat/contracts/ILilypadPayments.sol @@ -11,14 +11,6 @@ interface ILilypadPayments { address _tokenAddress ) external; - /** - * Escrow - */ - - function getEscrowBalance( - address _tokenAddress - ) external returns (uint256); - /** * Agreements */ diff --git a/hardhat/contracts/ILilypadStorage.sol b/hardhat/contracts/ILilypadStorage.sol index c0f5f60c..0a7a9777 100644 --- a/hardhat/contracts/ILilypadStorage.sol +++ b/hardhat/contracts/ILilypadStorage.sol @@ -51,6 +51,7 @@ interface ILilypadStorage { function addResult( string memory dealId, string memory resultsId, + string memory dataId, uint256 instructionCount ) external returns (SharedStructs.Result memory); diff --git a/hardhat/contracts/ILilypadToken.sol b/hardhat/contracts/ILilypadToken.sol index bf6a9ad3..dfa08ac2 100644 --- a/hardhat/contracts/ILilypadToken.sol +++ b/hardhat/contracts/ILilypadToken.sol @@ -12,6 +12,11 @@ interface ILilypadToken is IERC20 { uint256 amount ) external returns (bool); + function payOnChainManager( + address managerAddress, + uint256 amount + ) external returns (bool); + function refundEscrow( address toAddress, uint256 amount diff --git a/hardhat/contracts/IOnChainJobClient.sol b/hardhat/contracts/IOnChainJobClient.sol new file mode 100644 index 00000000..1647a9dd --- /dev/null +++ b/hardhat/contracts/IOnChainJobClient.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +// a smart contract that is running a job +// it will call the IOnChainJobManager with it's job +// which will end up with the resultsAdded function being called by the manager +interface IOnChainJobClient { + function resultsAdded( + string memory dealId, + string memory resultsId, + string memory dataId, + uint256 instructionCount + ) external; +} diff --git a/hardhat/contracts/IOnChainJobManager.sol b/hardhat/contracts/IOnChainJobManager.sol new file mode 100644 index 00000000..7ca83d0f --- /dev/null +++ b/hardhat/contracts/IOnChainJobManager.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +import "./SharedStructs.sol"; +import "./IOnChainJobClient.sol"; + +// the smart contract that is responsible for handling the life +// cycle of a job - it holds the escrow payment paid by client smart contracts +// which will be moved into the controller by the solver once a match +// has been made +// clients can withdraw their escrow at any time up until the agree tx has been posted +// the controller will then call "resultsAdded" once the RP has returned results +interface IOnChainJobManager is IOnChainJobClient { + function runJob( + string memory module, + SharedStructs.JobOfferInput[] memory inputs + ) external; +} diff --git a/hardhat/contracts/LilypadController.sol b/hardhat/contracts/LilypadController.sol index 9ffa9865..241ddd55 100644 --- a/hardhat/contracts/LilypadController.sol +++ b/hardhat/contracts/LilypadController.sol @@ -4,11 +4,12 @@ pragma solidity ^0.8.6; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./SharedStructs.sol"; +import "./ILilypadController.sol"; import "./ILilypadStorage.sol"; import "./ILilypadPayments.sol"; import "./ILilypadMediation.sol"; -contract LilypadController is Ownable, Initializable { +contract LilypadController is ILilypadController, Ownable, Initializable { /** * Types @@ -99,7 +100,7 @@ contract LilypadController is Ownable, Initializable { SharedStructs.DealMembers memory members, SharedStructs.DealTimeouts memory timeouts, SharedStructs.DealPricing memory pricing - ) public returns (SharedStructs.Agreement memory) { + ) public override returns (SharedStructs.Agreement memory) { SharedStructs.Deal memory deal = storageContract.ensureDeal( dealId, members, @@ -145,8 +146,11 @@ contract LilypadController is Ownable, Initializable { function addResult( string memory dealId, string memory resultsId, + // this is the CID of the actual data + // otherwise onchain clients cannot know the actual data they want to fetch + string memory dataId, uint256 instructionCount - ) public { + ) public override { require(storageContract.isState(dealId, SharedStructs.AgreementState.DealAgreed), "DealAgreed"); SharedStructs.Deal memory deal = storageContract.getDeal(dealId); require(deal.members.resourceProvider == tx.origin, "Only RP"); @@ -154,6 +158,7 @@ contract LilypadController is Ownable, Initializable { storageContract.addResult( dealId, resultsId, + dataId, instructionCount ); @@ -182,7 +187,7 @@ contract LilypadController is Ownable, Initializable { // * refund the JC the timeout collateral function acceptResult( string memory dealId - ) public { + ) public override { require(storageContract.isState(dealId, SharedStructs.AgreementState.ResultsSubmitted), "ResultsSubmitted"); SharedStructs.Deal memory deal = storageContract.getDeal(dealId); require(deal.members.jobCreator == tx.origin, "Only JC"); @@ -212,7 +217,7 @@ contract LilypadController is Ownable, Initializable { // * emit the Mediation event so the mediator kicks in function checkResult( string memory dealId - ) public { + ) public override { require(storageContract.isState(dealId, SharedStructs.AgreementState.ResultsSubmitted), "ResultsSubmitted"); SharedStructs.Deal memory deal = storageContract.getDeal(dealId); require(deal.members.jobCreator == tx.origin, "Only JC"); @@ -245,7 +250,7 @@ contract LilypadController is Ownable, Initializable { // * pay the mediator for mediating function mediationAcceptResult( string memory dealId - ) public { + ) public override { require(mediationAddress == _msgSender(), "Only mediation"); require(_canMediateResult(dealId), "Cannot mediate"); @@ -274,7 +279,7 @@ contract LilypadController is Ownable, Initializable { // * pay the mediator for mediating function mediationRejectResult( string memory dealId - ) public { + ) public override { // only the current mediation contract can call this require(mediationAddress == _msgSender(), "Only mediation"); require(_canMediateResult(dealId), "Cannot mediate"); @@ -306,7 +311,7 @@ contract LilypadController is Ownable, Initializable { function timeoutAgree( string memory dealId - ) public { + ) public override { SharedStructs.Deal memory deal = storageContract.getDeal(dealId); SharedStructs.Agreement memory agreement = storageContract.getAgreement(dealId); require(deal.members.jobCreator == tx.origin || deal.members.resourceProvider == tx.origin, "Only JC or RP"); @@ -339,7 +344,7 @@ contract LilypadController is Ownable, Initializable { // * emit the event function timeoutSubmitResult( string memory dealId - ) public { + ) public override { SharedStructs.Deal memory deal = storageContract.getDeal(dealId); SharedStructs.Agreement memory agreement = storageContract.getAgreement(dealId); require(deal.members.jobCreator == tx.origin, "Only JC"); @@ -366,7 +371,7 @@ contract LilypadController is Ownable, Initializable { // * emit the event function timeoutJudgeResult( string memory dealId - ) public { + ) public override { SharedStructs.Deal memory deal = storageContract.getDeal(dealId); SharedStructs.Agreement memory agreement = storageContract.getAgreement(dealId); require(deal.members.resourceProvider == tx.origin, "Only RP"); @@ -392,7 +397,7 @@ contract LilypadController is Ownable, Initializable { // * emit the event function timeoutMediateResult( string memory dealId - ) public { + ) public override { SharedStructs.Deal memory deal = storageContract.getDeal(dealId); SharedStructs.Agreement memory agreement = storageContract.getAgreement(dealId); require(deal.members.resourceProvider == tx.origin || deal.members.jobCreator == tx.origin, "Only RP or JC"); diff --git a/hardhat/contracts/LilypadPayments.sol b/hardhat/contracts/LilypadPayments.sol index 9ca786b9..a9a184a8 100644 --- a/hardhat/contracts/LilypadPayments.sol +++ b/hardhat/contracts/LilypadPayments.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.6; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./ILilypadToken.sol"; import "./ControllerOwnable.sol"; +import "./ILilypadPayments.sol"; // import "@openzeppelin/contracts/utils/Strings.sol"; // import "hardhat/console.sol"; diff --git a/hardhat/contracts/LilypadStorage.sol b/hardhat/contracts/LilypadStorage.sol index 10eaf799..104d0908 100644 --- a/hardhat/contracts/LilypadStorage.sol +++ b/hardhat/contracts/LilypadStorage.sol @@ -190,6 +190,7 @@ contract LilypadStorage is ControllerOwnable, Initializable { function addResult( string memory dealId, string memory resultsId, + string memory dataId, uint256 instructionCount ) public onlyController returns (SharedStructs.Result memory) { require(isState(dealId, SharedStructs.AgreementState.DealAgreed), "DealAgreed"); @@ -198,6 +199,7 @@ contract LilypadStorage is ControllerOwnable, Initializable { results[dealId] = SharedStructs.Result( dealId, resultsId, + dataId, instructionCount ); return results[dealId]; diff --git a/hardhat/contracts/LilypadToken.sol b/hardhat/contracts/LilypadToken.sol index 56788eae..914720b0 100644 --- a/hardhat/contracts/LilypadToken.sol +++ b/hardhat/contracts/LilypadToken.sol @@ -65,6 +65,17 @@ contract LilypadToken is ControllerOwnable, ERC20 { return true; } + // for on chain triggered jobs - we need to pay X tokens into the solver + // account so it can manage a job on our behalf + // this is always paid via tx.origin so is safge + function payOnChainManager( + address managerAddress, + uint256 amount + ) public returns (bool) { + _transfer(tx.origin, managerAddress, amount); + return true; + } + // money being paid back from the escrow account function refundEscrow( address toAddress, diff --git a/hardhat/contracts/OnChainJobManager.sol b/hardhat/contracts/OnChainJobManager.sol new file mode 100644 index 00000000..531185f6 --- /dev/null +++ b/hardhat/contracts/OnChainJobManager.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "./SharedStructs.sol"; +import "./IOnChainJobManager.sol"; +import "./IOnChainJobClient.sol"; +import "./ControllerOwnable.sol"; +import "./ILilypadToken.sol"; + +contract OnChainJobManager is IOnChainJobManager, ControllerOwnable, Initializable { + + // keep track of which contract has called which job + // mapping(string => SharedStructs.Result) private results; + + address private tokenAddress; + ILilypadToken private tokenContract; + + // simplistic way of the solver updating how much things currently cost + // this is based on market pricing - the solver will post the cheapest + // TODO: allow more detail here - for example, per module pricing + uint256 public defaultModuleCost; + + // keep track of the escrow currently being held on behalf of + // different contracts + mapping(address => uint256) private escrow; + + event JobAdded( + string module, + SharedStructs.JobOfferInput[] inputs + ); + + /** + * Init + */ + + // https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable + function initialize( + address _tokenAddress + ) public initializer { + setTokenAddress(_tokenAddress); + } + + function setTokenAddress(address _tokenAddress) public onlyOwner { + require(_tokenAddress != address(0), "Token address"); + tokenAddress = _tokenAddress; + tokenContract = ILilypadToken(tokenAddress); + } + + function setDefaultModuleCost(uint256 cost) public onlyController { + require(cost > 0, "Min cost"); + defaultModuleCost = cost; + } + + // called by clients - transfer tokens and then emit event so solver + // can kick in with a job offer on behalf of the submitting contract + function runJob( + string memory module, + SharedStructs.JobOfferInput[] memory inputs + ) public override { + // move X tokens to the solver (i.e. the controller address) + // emit the event so the solver can kick in and run the job on behalf + // of the on chain client + tokenContract.payOnChainManager(getControllerAddress(), defaultModuleCost); + } + + // this is called by the solver once we've got results out of the controller + // it will call the "resultsAdded" function on the original client contract + function resultsAdded( + string memory dealId, + string memory resultsId, + string memory dataId, + uint256 instructionCount + ) public override { + + } +} diff --git a/hardhat/contracts/SharedStructs.sol b/hardhat/contracts/SharedStructs.sol index c5801059..cee063f1 100644 --- a/hardhat/contracts/SharedStructs.sol +++ b/hardhat/contracts/SharedStructs.sol @@ -126,8 +126,13 @@ library SharedStructs { string dealId; // the CID of the results on IPFS (and directory service) + // NOTE - this is not the CID of actual results data rather + // of the JSON object reporting that data string resultsId; + // this is the actual lower level data CID + string dataId; + // how many instructions were executed by the RP uint256 instructionCount; } @@ -154,4 +159,9 @@ library SharedStructs { uint256 timeoutJudgeResultsAt; uint256 timeoutMediateResultsAt; } + + struct JobOfferInput { + string name; + string value; + } } diff --git a/pkg/resourceprovider/controller.go b/pkg/resourceprovider/controller.go index baa7928d..2029051a 100644 --- a/pkg/resourceprovider/controller.go +++ b/pkg/resourceprovider/controller.go @@ -455,6 +455,7 @@ func (controller *ResourceProviderController) runJob(deal data.DealContainer) { txHash, err := controller.web3SDK.AddResult( deal.Deal.ID, createdResult.ID, + createdResult.DataID, result.InstructionCount, ) if err != nil { diff --git a/pkg/web3/api.go b/pkg/web3/api.go index e04e583c..be175723 100644 --- a/pkg/web3/api.go +++ b/pkg/web3/api.go @@ -126,12 +126,14 @@ func (sdk *Web3SDK) Agree( func (sdk *Web3SDK) AddResult( dealId string, resultsId string, + dataId string, instructionCount uint64, ) (string, error) { tx, err := sdk.Contracts.Controller.AddResult( sdk.TransactOpts, dealId, resultsId, + dataId, big.NewInt(int64(instructionCount)), ) if err != nil { diff --git a/pkg/web3/bindings/controller/controller.go b/pkg/web3/bindings/controller/controller.go index 4fe2c7ee..abba4988 100644 --- a/pkg/web3/bindings/controller/controller.go +++ b/pkg/web3/bindings/controller/controller.go @@ -79,8 +79,8 @@ type SharedStructsDealTimeouts struct { // ControllerMetaData contains all meta data concerning the Controller contract. var ControllerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"agree\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMediationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPaymentsAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUsersAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"setMediationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"}],\"name\":\"setPaymentsAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"}],\"name\":\"setStorageAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"}],\"name\":\"setUsersAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5062000031620000256200003760201b60201c565b6200003e60201b60201c565b620000ff565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61555a806200010d5f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c8063822f80c5116100b6578063d48b10841161007a578063d48b1084146102fa578063e7b957d114610318578063e850be3714610334578063f2fde38b14610350578063f583b1251461036c578063f8c8765e1461039c57610140565b8063822f80c51461026a578063824518aa146102865780638da5cb5b146102a257806393dbed3e146102c0578063bbfff47d146102de57610140565b8063511a9f6811610108578063511a9f68146101d457806359b910d6146101f0578063640e570f1461020c578063715018a614610228578063795f9abf1461023257806380ffdfe01461024e57610140565b8063155329ea14610144578063297f9e5514610162578063393a4d341461017e57806343391cca1461019c57806346834d1e146101b8575b5f80fd5b61014c6103b8565b6040516101599190613665565b60405180910390f35b61017c600480360381019061017791906137cb565b6103e0565b005b610186610850565b6040516101939190613665565b60405180910390f35b6101b660048036038101906101b1919061383c565b610878565b005b6101d260048036038101906101cd91906137cb565b610971565b005b6101ee60048036038101906101e991906137cb565b610d1e565b005b61020a6004803603810190610205919061383c565b6110d7565b005b6102266004803603810190610221919061383c565b6111f1565b005b6102306112ea565b005b61024c600480360381019061024791906137cb565b6112fd565b005b610268600480360381019061026391906137cb565b6117a6565b005b610284600480360381019061027f919061389a565b611afe565b005b6102a0600480360381019061029b91906137cb565b611ed7565b005b6102aa6122cf565b6040516102b79190613665565b60405180910390f35b6102c86122f6565b6040516102d59190613665565b60405180910390f35b6102f860048036038101906102f3919061383c565b61231e565b005b6103026123d7565b60405161030f9190613665565b60405180910390f35b610332600480360381019061032d91906137cb565b6123ff565b005b61034e600480360381019061034991906137cb565b612892565b005b61036a6004803603810190610365919061383c565b612ce1565b005b61038660048036038101906103819190613bb7565b612d63565b6040516103939190613df5565b60405180910390f35b6103b660048036038101906103b19190613e0f565b613208565b005b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b815260040161043d929190613efc565b6020604051808303815f875af1158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d9190613f5f565b6104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b390613fd4565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016105179190613ff2565b5f604051808303815f875af1158015610532573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061055a91906143b5565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990614446565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b815260040161062d9190613ff2565b6020604051808303815f875af1158015610649573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066d9190614464565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016106ca9190613ff2565b6020604051808303815f875af11580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a9190614464565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663297f9e55856040518263ffffffff1660e01b81526004016107669190613ff2565b5f604051808303815f87803b15801561077d575f80fd5b505af115801561078f573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b13567148585602001516040015186602001516020015186886060015160200151878a6040015160400151602001516040518863ffffffff1660e01b815260040161081d979695949392919061449e565b5f604051808303815f87803b158015610834575f80fd5b505af1158015610846573d5f803e3d5ffd5b5050505050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610880613365565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e59061455c565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b81526004016109ce929190613efc565b6020604051808303815f875af11580156109ea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0e9190613f5f565b610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490613fd4565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401610aa89190613ff2565b5f604051808303815f875af1158015610ac3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610aeb91906143b5565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff1614610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a90614446565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346834d1e836040518263ffffffff1660e01b8152600401610bbd9190613ff2565b5f604051808303815f87803b158015610bd4575f80fd5b505af1158015610be6573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aea3825183836020015160200151846040015160400151602001518560600151606001516040518563ffffffff1660e01b8152600401610c66949392919061457a565b5f604051808303815f87803b158015610c7d575f80fd5b505af1158015610c8f573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370bea207826040518263ffffffff1660e01b8152600401610ced9190614860565b5f604051808303815f87803b158015610d04575f80fd5b505af1158015610d16573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401610d799190613ff2565b5f604051808303815f875af1158015610d94573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610dbc91906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b8152600401610e199190613ff2565b6101c0604051808303815f875af1158015610e36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5a91906149ee565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990614446565b60405180910390fd5b6001600a811115610ee657610ee5613c55565b5b815f0151600a811115610efc57610efb613c55565b5b14610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390614a64565b60405180910390fd5b8160400151602001515f01518160800151610f579190614aaf565b4211610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90614b2c565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663511a9f68846040518263ffffffff1660e01b8152600401610ff29190613ff2565b5f604051808303815f87803b158015611009575f80fd5b505af115801561101b573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d31a11584846020015160400151856020015160200151866060015160200151876040015160200151602001516040518663ffffffff1660e01b81526004016110a5959493929190614b4a565b5f604051808303815f87803b1580156110bc575f80fd5b505af11580156110ce573d5f803e3d5ffd5b50505050505050565b6110df613365565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490614bec565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111f9613365565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90614c54565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112f2613365565b6112fb5f6133e3565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016113589190613ff2565b5f604051808303815f875af1158015611373573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061139b91906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016113f89190613ff2565b6101c0604051808303815f875af1158015611415573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143991906149ee565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff1614806114b057503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff16145b6114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690614cbc565b60405180910390fd5b5f600a81111561150257611501613c55565b5b815f0151600a81111561151857611517613c55565b5b14611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614a64565b60405180910390fd5b81604001515f01515f015181606001516115729190614aaf565b42116115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90614b2c565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663795f9abf846040518263ffffffff1660e01b815260040161160d9190613ff2565b5f604051808303815f87803b158015611624575f80fd5b505af1158015611636573d5f803e3d5ffd5b505050505f816020015111156116ea5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ef0d89e84846020015160400151856040015160200151602001516040518463ffffffff1660e01b81526004016116b893929190614cda565b5f604051808303815f87803b1580156116cf575f80fd5b505af11580156116e1573d5f803e3d5ffd5b505050506117a1565b5f816040015111156117a05760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afe1dff784846020015160200151856060015160200151866040015160200151602001516040518563ffffffff1660e01b8152600401611772949392919061457a565b5f604051808303815f87803b158015611789575f80fd5b505af115801561179b573d5f803e3d5ffd5b505050505b5b505050565b6117ae6134a4565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390614d60565b60405180910390fd5b611845816134ab565b611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614dc8565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016118df9190613ff2565b5f604051808303815f875af11580156118fa573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061192291906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f846040518263ffffffff1660e01b815260040161197f9190613ff2565b6020604051808303815f875af115801561199b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bf9190614464565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380ffdfe0846040518263ffffffff1660e01b8152600401611a1b9190613ff2565b5f604051808303815f87803b158015611a32575f80fd5b505af1158015611a44573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2485cce84846020015160400151856020015160200151866060015160200151868860600151606001516040518763ffffffff1660e01b8152600401611acc96959493929190614de6565b5f604051808303815f87803b158015611ae3575f80fd5b505af1158015611af5573d5f803e3d5ffd5b50505050505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8460016040518363ffffffff1660e01b8152600401611b5b929190613efc565b6020604051808303815f875af1158015611b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9b9190613f5f565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190614e96565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180856040518263ffffffff1660e01b8152600401611c359190613ff2565b5f604051808303815f875af1158015611c50573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611c7891906143b5565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516040015173ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790614efe565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663822f80c58585856040518463ffffffff1660e01b8152600401611d4e93929190614f1c565b5f604051808303815f875af1158015611d69573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611d919190614ff8565b505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f866040518263ffffffff1660e01b8152600401611ded9190613ff2565b6020604051808303815f875af1158015611e09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2d9190614464565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309cab5108684602001516040015184866040015160200151602001516040518563ffffffff1660e01b8152600401611ea3949392919061457a565b5f604051808303815f87803b158015611eba575f80fd5b505af1158015611ecc573d5f803e3d5ffd5b505050505050505050565b611edf6134a4565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614d60565b60405180910390fd5b611f76816134ab565b611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614dc8565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016120109190613ff2565b5f604051808303815f875af115801561202b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061205391906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b81526004016120b09190613ff2565b6020604051808303815f875af11580156120cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f09190614464565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b815260040161214d9190613ff2565b6020604051808303815f875af1158015612169573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218d9190614464565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663824518aa856040518263ffffffff1660e01b81526004016121e99190613ff2565b5f604051808303815f87803b158015612200575f80fd5b505af1158015612212573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1f90728585602001516040015186602001516020015186886060015160200151878a60600151606001516040518863ffffffff1660e01b815260040161229c979695949392919061449e565b5f604051808303815f87803b1580156122b3575f80fd5b505af11580156122c5573d5f803e3d5ffd5b5050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612326613365565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90615089565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b815260040161245a9190613ff2565b5f604051808303815f875af1158015612475573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061249d91906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016124fa9190613ff2565b6101c0604051808303815f875af1158015612517573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253b91906149ee565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614806125b257503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16145b6125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906150f1565b60405180910390fd5b6004600a81111561260557612604613c55565b5b815f0151600a81111561261b5761261a613c55565b5b1461265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614a64565b60405180910390fd5b8160400151604001515f01518160a001516126769190614aaf565b42116126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614b2c565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016127129190613ff2565b6020604051808303815f875af115801561272e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127529190614464565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7b957d1856040518263ffffffff1660e01b81526004016127ae9190613ff2565b5f604051808303815f87803b1580156127c5575f80fd5b505af11580156127d7573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663823f3de185856020015160400151866020015160200151876060015160200151868960600151606001516040518763ffffffff1660e01b815260040161285f96959493929190614de6565b5f604051808303815f87803b158015612876575f80fd5b505af1158015612888573d5f803e3d5ffd5b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016128ed9190613ff2565b5f604051808303815f875af1158015612908573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061293091906143b5565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b815260040161298d9190613ff2565b6101c0604051808303815f875af11580156129aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ce91906149ee565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614efe565b60405180910390fd5b6002600a811115612a5a57612a59613c55565b5b815f0151600a811115612a7057612a6f613c55565b5b14612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa790614a64565b60405180910390fd5b8160400151604001515f01518160a00151612acb9190614aaf565b4211612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0390614b2c565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b8152600401612b679190613ff2565b6020604051808303815f875af1158015612b83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba79190614464565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e850be37856040518263ffffffff1660e01b8152600401612c039190613ff2565b5f604051808303815f87803b158015612c1a575f80fd5b505af1158015612c2c573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a6726b58585602001516040015186602001516020015185886040015160400151602001516040518663ffffffff1660e01b8152600401612cae959493929190614b4a565b5f604051808303815f87803b158015612cc5575f80fd5b505af1158015612cd7573d5f803e3d5ffd5b5050505050505050565b612ce9613365565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e9061517f565b60405180910390fd5b612d60816133e3565b50565b612d6b6135b3565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6370b0e878787876040518563ffffffff1660e01b8152600401612dcc94939291906152a4565b5f604051808303815f875af1158015612de7573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612e0f91906143b5565b90505f81602001516040015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490505f82602001516020015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490508180612e8e5750805b612ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec490615341565b60405180910390fd5b81156130135760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec95b967896040518263ffffffff1660e01b8152600401612f2d9190613ff2565b6101c0604051808303815f875af1158015612f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f6e91906149ee565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e3868dc89856020015160400151866040015160200151602001516040518463ffffffff1660e01b8152600401612fe193929190614cda565b5f604051808303815f87803b158015612ff8575f80fd5b505af115801561300a573d5f803e3d5ffd5b50505050613160565b801561315f5760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c4135da896040518263ffffffff1660e01b81526004016130739190613ff2565b6101c0604051808303815f875af1158015613090573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130b491906149ee565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b918803589856020015160200151866060015160200151876040015160400151602001516040518563ffffffff1660e01b8152600401613131949392919061457a565b5f604051808303815f87803b158015613148575f80fd5b505af115801561315a573d5f803e3d5ffd5b505050505b5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d896040518263ffffffff1660e01b81526004016131ba9190613ff2565b6101c0604051808303815f875af11580156131d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fb91906149ee565b9350505050949350505050565b5f8060159054906101000a900460ff16159050808015613239575060015f60149054906101000a900460ff1660ff16105b80613267575061324830613591565b158015613266575060015f60149054906101000a900460ff1660ff16145b5b6132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d906153cf565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156132e25760015f60156101000a81548160ff0219169083151502179055505b6132eb856110d7565b6132f48461231e565b6132fd836111f1565b61330682610878565b801561335e575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051613355919061543b565b60405180910390a15b5050505050565b61336d6134a4565b73ffffffffffffffffffffffffffffffffffffffff1661338b6122cf565b73ffffffffffffffffffffffffffffffffffffffff16146133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d89061549e565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8360046040518363ffffffff1660e01b8152600401613509929190613efc565b6020604051808303815f875af1158015613525573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135499190613f5f565b613588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357f90615506565b60405180910390fd5b60019050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b604051806101c001604052805f600a8111156135d2576135d1613c55565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61364f82613626565b9050919050565b61365f81613645565b82525050565b5f6020820190506136785f830184613656565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6136dd82613697565b810181811067ffffffffffffffff821117156136fc576136fb6136a7565b5b80604052505050565b5f61370e61367e565b905061371a82826136d4565b919050565b5f67ffffffffffffffff821115613739576137386136a7565b5b61374282613697565b9050602081019050919050565b828183375f83830152505050565b5f61376f61376a8461371f565b613705565b90508281526020810184848401111561378b5761378a613693565b5b61379684828561374f565b509392505050565b5f82601f8301126137b2576137b161368f565b5b81356137c284826020860161375d565b91505092915050565b5f602082840312156137e0576137df613687565b5b5f82013567ffffffffffffffff8111156137fd576137fc61368b565b5b6138098482850161379e565b91505092915050565b61381b81613645565b8114613825575f80fd5b50565b5f8135905061383681613812565b92915050565b5f6020828403121561385157613850613687565b5b5f61385e84828501613828565b91505092915050565b5f819050919050565b61387981613867565b8114613883575f80fd5b50565b5f8135905061389481613870565b92915050565b5f805f606084860312156138b1576138b0613687565b5b5f84013567ffffffffffffffff8111156138ce576138cd61368b565b5b6138da8682870161379e565b935050602084013567ffffffffffffffff8111156138fb576138fa61368b565b5b6139078682870161379e565b925050604061391886828701613886565b9150509250925092565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115613944576139436136a7565b5b602082029050602081019050919050565b5f80fd5b5f61396b6139668461392a565b613705565b9050808382526020820190506020840283018581111561398e5761398d613955565b5b835b818110156139b757806139a38882613828565b845260208401935050602081019050613990565b5050509392505050565b5f82601f8301126139d5576139d461368f565b5b81356139e5848260208601613959565b91505092915050565b5f60808284031215613a0357613a02613922565b5b613a0d6080613705565b90505f613a1c84828501613828565b5f830152506020613a2f84828501613828565b6020830152506040613a4384828501613828565b604083015250606082013567ffffffffffffffff811115613a6757613a66613926565b5b613a73848285016139c1565b60608301525092915050565b5f60408284031215613a9457613a93613922565b5b613a9e6040613705565b90505f613aad84828501613886565b5f830152506020613ac084828501613886565b60208301525092915050565b5f6101008284031215613ae257613ae1613922565b5b613aec6080613705565b90505f613afb84828501613a7f565b5f830152506040613b0e84828501613a7f565b6020830152506080613b2284828501613a7f565b60408301525060c0613b3684828501613a7f565b60608301525092915050565b5f60808284031215613b5757613b56613922565b5b613b616080613705565b90505f613b7084828501613886565b5f830152506020613b8384828501613886565b6020830152506040613b9784828501613886565b6040830152506060613bab84828501613886565b60608301525092915050565b5f805f806101c08587031215613bd057613bcf613687565b5b5f85013567ffffffffffffffff811115613bed57613bec61368b565b5b613bf98782880161379e565b945050602085013567ffffffffffffffff811115613c1a57613c1961368b565b5b613c26878288016139ee565b9350506040613c3787828801613acc565b925050610140613c4987828801613b42565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b8110613c9357613c92613c55565b5b50565b5f819050613ca382613c82565b919050565b5f613cb282613c96565b9050919050565b613cc281613ca8565b82525050565b613cd181613867565b82525050565b6101c082015f820151613cec5f850182613cb9565b506020820151613cff6020850182613cc8565b506040820151613d126040850182613cc8565b506060820151613d256060850182613cc8565b506080820151613d386080850182613cc8565b5060a0820151613d4b60a0850182613cc8565b5060c0820151613d5e60c0850182613cc8565b5060e0820151613d7160e0850182613cc8565b50610100820151613d86610100850182613cc8565b50610120820151613d9b610120850182613cc8565b50610140820151613db0610140850182613cc8565b50610160820151613dc5610160850182613cc8565b50610180820151613dda610180850182613cc8565b506101a0820151613def6101a0850182613cc8565b50505050565b5f6101c082019050613e095f830184613cd7565b92915050565b5f805f8060808587031215613e2757613e26613687565b5b5f613e3487828801613828565b9450506020613e4587828801613828565b9350506040613e5687828801613828565b9250506060613e6787828801613828565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613eaa578082015181840152602081019050613e8f565b5f8484015250505050565b5f613ebf82613e73565b613ec98185613e7d565b9350613ed9818560208601613e8d565b613ee281613697565b840191505092915050565b613ef681613ca8565b82525050565b5f6040820190508181035f830152613f148185613eb5565b9050613f236020830184613eed565b9392505050565b5f8115159050919050565b613f3e81613f2a565b8114613f48575f80fd5b50565b5f81519050613f5981613f35565b92915050565b5f60208284031215613f7457613f73613687565b5b5f613f8184828501613f4b565b91505092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613fbe601083613e7d565b9150613fc982613f8a565b602082019050919050565b5f6020820190508181035f830152613feb81613fb2565b9050919050565b5f6020820190508181035f83015261400a8184613eb5565b905092915050565b5f61402461401f8461371f565b613705565b9050828152602081018484840111156140405761403f613693565b5b61404b848285613e8d565b509392505050565b5f82601f8301126140675761406661368f565b5b8151614077848260208601614012565b91505092915050565b5f8151905061408e81613812565b92915050565b5f6140a66140a18461392a565b613705565b905080838252602082019050602084028301858111156140c9576140c8613955565b5b835b818110156140f257806140de8882614080565b8452602084019350506020810190506140cb565b5050509392505050565b5f82601f8301126141105761410f61368f565b5b8151614120848260208601614094565b91505092915050565b5f6080828403121561413e5761413d613922565b5b6141486080613705565b90505f61415784828501614080565b5f83015250602061416a84828501614080565b602083015250604061417e84828501614080565b604083015250606082015167ffffffffffffffff8111156141a2576141a1613926565b5b6141ae848285016140fc565b60608301525092915050565b5f815190506141c881613870565b92915050565b5f604082840312156141e3576141e2613922565b5b6141ed6040613705565b90505f6141fc848285016141ba565b5f83015250602061420f848285016141ba565b60208301525092915050565b5f610100828403121561423157614230613922565b5b61423b6080613705565b90505f61424a848285016141ce565b5f83015250604061425d848285016141ce565b6020830152506080614271848285016141ce565b60408301525060c0614285848285016141ce565b60608301525092915050565b5f608082840312156142a6576142a5613922565b5b6142b06080613705565b90505f6142bf848285016141ba565b5f8301525060206142d2848285016141ba565b60208301525060406142e6848285016141ba565b60408301525060606142fa848285016141ba565b60608301525092915050565b5f6101c0828403121561431c5761431b613922565b5b6143266080613705565b90505f82015167ffffffffffffffff81111561434557614344613926565b5b61435184828501614053565b5f83015250602082015167ffffffffffffffff81111561437457614373613926565b5b61438084828501614129565b60208301525060406143948482850161421b565b6040830152506101406143a984828501614291565b60608301525092915050565b5f602082840312156143ca576143c9613687565b5b5f82015167ffffffffffffffff8111156143e7576143e661368b565b5b6143f384828501614306565b91505092915050565b7f4f6e6c79204a43000000000000000000000000000000000000000000000000005f82015250565b5f614430600783613e7d565b915061443b826143fc565b602082019050919050565b5f6020820190508181035f83015261445d81614424565b9050919050565b5f6020828403121561447957614478613687565b5b5f614486848285016141ba565b91505092915050565b61449881613867565b82525050565b5f60e0820190508181035f8301526144b6818a613eb5565b90506144c56020830189613656565b6144d26040830188613656565b6144df606083018761448f565b6144ec608083018661448f565b6144f960a083018561448f565b61450660c083018461448f565b98975050505050505050565b7f4d6564696174696f6e20616464726573730000000000000000000000000000005f82015250565b5f614546601183613e7d565b915061455182614512565b602082019050919050565b5f6020820190508181035f8301526145738161453a565b9050919050565b5f6080820190508181035f8301526145928187613eb5565b90506145a16020830186613656565b6145ae604083018561448f565b6145bb606083018461448f565b95945050505050565b5f82825260208201905092915050565b5f6145de82613e73565b6145e881856145c4565b93506145f8818560208601613e8d565b61460181613697565b840191505092915050565b61461581613645565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61464f838361460c565b60208301905092915050565b5f602082019050919050565b5f6146718261461b565b61467b8185614625565b935061468683614635565b805f5b838110156146b657815161469d8882614644565b97506146a88361465b565b925050600181019050614689565b5085935050505092915050565b5f608083015f8301516146d85f86018261460c565b5060208301516146eb602086018261460c565b5060408301516146fe604086018261460c565b50606083015184820360608601526147168282614667565b9150508091505092915050565b604082015f8201516147375f850182613cc8565b50602082015161474a6020850182613cc8565b50505050565b61010082015f8201516147655f850182614723565b5060208201516147786040850182614723565b50604082015161478b6080850182614723565b50606082015161479e60c0850182614723565b50505050565b608082015f8201516147b85f850182613cc8565b5060208201516147cb6020850182613cc8565b5060408201516147de6040850182613cc8565b5060608201516147f16060850182613cc8565b50505050565b5f6101c083015f8301518482035f86015261481282826145d4565b9150506020830151848203602086015261482c82826146c3565b91505060408301516148416040860182614750565b5060608301516148556101408601826147a4565b508091505092915050565b5f6020820190508181035f83015261487881846147f7565b905092915050565b600b811061488c575f80fd5b50565b5f8151905061489d81614880565b92915050565b5f6101c082840312156148b9576148b8613922565b5b6148c46101c0613705565b90505f6148d38482850161488f565b5f8301525060206148e6848285016141ba565b60208301525060406148fa848285016141ba565b604083015250606061490e848285016141ba565b6060830152506080614922848285016141ba565b60808301525060a0614936848285016141ba565b60a08301525060c061494a848285016141ba565b60c08301525060e061495e848285016141ba565b60e083015250610100614973848285016141ba565b61010083015250610120614989848285016141ba565b6101208301525061014061499f848285016141ba565b610140830152506101606149b5848285016141ba565b610160830152506101806149cb848285016141ba565b610180830152506101a06149e1848285016141ba565b6101a08301525092915050565b5f6101c08284031215614a0457614a03613687565b5b5f614a11848285016148a3565b91505092915050565b7f4e6f7420636f72726563742073746174650000000000000000000000000000005f82015250565b5f614a4e601183613e7d565b9150614a5982614a1a565b602082019050919050565b5f6020820190508181035f830152614a7b81614a42565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614ab982613867565b9150614ac483613867565b9250828201905080821115614adc57614adb614a82565b5b92915050565b7f4e6f742074696d6564206f7574000000000000000000000000000000000000005f82015250565b5f614b16600d83613e7d565b9150614b2182614ae2565b602082019050919050565b5f6020820190508181035f830152614b4381614b0a565b9050919050565b5f60a0820190508181035f830152614b628188613eb5565b9050614b716020830187613656565b614b7e6040830186613656565b614b8b606083018561448f565b614b98608083018461448f565b9695505050505050565b7f53746f72616765206164647265737300000000000000000000000000000000005f82015250565b5f614bd6600f83613e7d565b9150614be182614ba2565b602082019050919050565b5f6020820190508181035f830152614c0381614bca565b9050919050565b7f5061796d656e74732061646472657373000000000000000000000000000000005f82015250565b5f614c3e601083613e7d565b9150614c4982614c0a565b602082019050919050565b5f6020820190508181035f830152614c6b81614c32565b9050919050565b7f4f6e6c79204a43206f72205250000000000000000000000000000000000000005f82015250565b5f614ca6600d83613e7d565b9150614cb182614c72565b602082019050919050565b5f6020820190508181035f830152614cd381614c9a565b9050919050565b5f6060820190508181035f830152614cf28186613eb5565b9050614d016020830185613656565b614d0e604083018461448f565b949350505050565b7f4f6e6c79206d6564696174696f6e0000000000000000000000000000000000005f82015250565b5f614d4a600e83613e7d565b9150614d5582614d16565b602082019050919050565b5f6020820190508181035f830152614d7781614d3e565b9050919050565b7f43616e6e6f74206d6564696174650000000000000000000000000000000000005f82015250565b5f614db2600e83613e7d565b9150614dbd82614d7e565b602082019050919050565b5f6020820190508181035f830152614ddf81614da6565b9050919050565b5f60c0820190508181035f830152614dfe8189613eb5565b9050614e0d6020830188613656565b614e1a6040830187613656565b614e27606083018661448f565b614e34608083018561448f565b614e4160a083018461448f565b979650505050505050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f614e80600a83613e7d565b9150614e8b82614e4c565b602082019050919050565b5f6020820190508181035f830152614ead81614e74565b9050919050565b7f4f6e6c79205250000000000000000000000000000000000000000000000000005f82015250565b5f614ee8600783613e7d565b9150614ef382614eb4565b602082019050919050565b5f6020820190508181035f830152614f1581614edc565b9050919050565b5f6060820190508181035f830152614f348186613eb5565b90508181036020830152614f488185613eb5565b9050614f57604083018461448f565b949350505050565b5f60608284031215614f7457614f73613922565b5b614f7e6060613705565b90505f82015167ffffffffffffffff811115614f9d57614f9c613926565b5b614fa984828501614053565b5f83015250602082015167ffffffffffffffff811115614fcc57614fcb613926565b5b614fd884828501614053565b6020830152506040614fec848285016141ba565b60408301525092915050565b5f6020828403121561500d5761500c613687565b5b5f82015167ffffffffffffffff81111561502a5761502961368b565b5b61503684828501614f5f565b91505092915050565b7f55736572732061646472657373000000000000000000000000000000000000005f82015250565b5f615073600d83613e7d565b915061507e8261503f565b602082019050919050565b5f6020820190508181035f8301526150a081615067565b9050919050565b7f4f6e6c79205250206f72204a43000000000000000000000000000000000000005f82015250565b5f6150db600d83613e7d565b91506150e6826150a7565b602082019050919050565b5f6020820190508181035f830152615108816150cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f615169602683613e7d565b91506151748261510f565b604082019050919050565b5f6020820190508181035f8301526151968161515d565b9050919050565b5f608083015f8301516151b25f86018261460c565b5060208301516151c5602086018261460c565b5060408301516151d8604086018261460c565b50606083015184820360608601526151f08282614667565b9150508091505092915050565b61010082015f8201516152125f850182614723565b5060208201516152256040850182614723565b5060408201516152386080850182614723565b50606082015161524b60c0850182614723565b50505050565b608082015f8201516152655f850182613cc8565b5060208201516152786020850182613cc8565b50604082015161528b6040850182613cc8565b50606082015161529e6060850182613cc8565b50505050565b5f6101c0820190508181035f8301526152bd8187613eb5565b905081810360208301526152d1818661519d565b90506152e060408301856151fd565b6152ee610140830184615251565b95945050505050565b7f4f6e6c79205250202f204a4300000000000000000000000000000000000000005f82015250565b5f61532b600c83613e7d565b9150615336826152f7565b602082019050919050565b5f6020820190508181035f8301526153588161531f565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6153b9602e83613e7d565b91506153c48261535f565b604082019050919050565b5f6020820190508181035f8301526153e6816153ad565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61542561542061541b846153ed565b615402565b6153f6565b9050919050565b6154358161540b565b82525050565b5f60208201905061544e5f83018461542c565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f615488602083613e7d565b915061549382615454565b602082019050919050565b5f6020820190508181035f8301526154b58161547c565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f6154f0600e83613e7d565b91506154fb826154bc565b602082019050919050565b5f6020820190508181035f83015261551d816154e4565b905091905056fea26469706673582212203ae6a0d0e818b4ac5a89596d8ace8bf1eb3627bbcc74a1cd93784eaadb14129064736f6c63430008150033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"agree\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMediationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPaymentsAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUsersAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"setMediationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"}],\"name\":\"setPaymentsAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"}],\"name\":\"setStorageAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"}],\"name\":\"setUsersAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5062000031620000256200003760201b60201c565b6200003e60201b60201c565b620000ff565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6155d2806200010d5f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806380ffdfe0116100b6578063d48b10841161007a578063d48b1084146102fa578063e7b957d114610318578063e850be3714610334578063f2fde38b14610350578063f583b1251461036c578063f8c8765e1461039c57610140565b806380ffdfe01461026a578063824518aa146102865780638da5cb5b146102a257806393dbed3e146102c0578063bbfff47d146102de57610140565b806346834d1e1161010857806346834d1e146101d4578063511a9f68146101f057806359b910d61461020c578063640e570f14610228578063715018a614610244578063795f9abf1461024e57610140565b8063155329ea14610144578063297f9e5514610162578063393a4d341461017e5780633955548e1461019c57806343391cca146101b8575b5f80fd5b61014c6103b8565b6040516101599190613668565b60405180910390f35b61017c600480360381019061017791906137ce565b6103e0565b005b610186610850565b6040516101939190613668565b60405180910390f35b6101b660048036038101906101b19190613848565b610878565b005b6101d260048036038101906101cd919061392a565b610c54565b005b6101ee60048036038101906101e991906137ce565b610d4d565b005b61020a600480360381019061020591906137ce565b6110fa565b005b6102266004803603810190610221919061392a565b6114b3565b005b610242600480360381019061023d919061392a565b6115cd565b005b61024c6116c6565b005b610268600480360381019061026391906137ce565b6116d9565b005b610284600480360381019061027f91906137ce565b611b82565b005b6102a0600480360381019061029b91906137ce565b611eda565b005b6102aa6122d2565b6040516102b79190613668565b60405180910390f35b6102c86122f9565b6040516102d59190613668565b60405180910390f35b6102f860048036038101906102f3919061392a565b612321565b005b6103026123da565b60405161030f9190613668565b60405180910390f35b610332600480360381019061032d91906137ce565b612402565b005b61034e600480360381019061034991906137ce565b612895565b005b61036a6004803603810190610365919061392a565b612ce4565b005b61038660048036038101906103819190613bea565b612d66565b6040516103939190613e28565b60405180910390f35b6103b660048036038101906103b19190613e42565b61320b565b005b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b815260040161043d929190613f2f565b6020604051808303815f875af1158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d9190613f92565b6104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b390614007565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016105179190614025565b5f604051808303815f875af1158015610532573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061055a91906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990614479565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b815260040161062d9190614025565b6020604051808303815f875af1158015610649573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066d9190614497565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016106ca9190614025565b6020604051808303815f875af11580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663297f9e55856040518263ffffffff1660e01b81526004016107669190614025565b5f604051808303815f87803b15801561077d575f80fd5b505af115801561078f573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b13567148585602001516040015186602001516020015186886060015160200151878a6040015160400151602001516040518863ffffffff1660e01b815260040161081d97969594939291906144d1565b5f604051808303815f87803b158015610834575f80fd5b505af1158015610846573d5f803e3d5ffd5b5050505050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8560016040518363ffffffff1660e01b81526004016108d5929190613f2f565b6020604051808303815f875af11580156108f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109159190613f92565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b9061458f565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180866040518263ffffffff1660e01b81526004016109af9190614025565b5f604051808303815f875af11580156109ca573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906109f291906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516040015173ffffffffffffffffffffffffffffffffffffffff1614610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906145f7565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633955548e868686866040518563ffffffff1660e01b8152600401610aca9493929190614615565b5f604051808303815f875af1158015610ae5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610b0d9190614736565b505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f876040518263ffffffff1660e01b8152600401610b699190614025565b6020604051808303815f875af1158015610b85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba99190614497565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309cab5108784602001516040015184866040015160200151602001516040518563ffffffff1660e01b8152600401610c1f949392919061477d565b5f604051808303815f87803b158015610c36575f80fd5b505af1158015610c48573d5f803e3d5ffd5b50505050505050505050565b610c5c613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614811565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b8152600401610daa929190613f2f565b6020604051808303815f875af1158015610dc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dea9190613f92565b610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614007565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401610e849190614025565b5f604051808303815f875af1158015610e9f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ec791906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff1614610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614479565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346834d1e836040518263ffffffff1660e01b8152600401610f999190614025565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aea3825183836020015160200151846040015160400151602001518560600151606001516040518563ffffffff1660e01b8152600401611042949392919061477d565b5f604051808303815f87803b158015611059575f80fd5b505af115801561106b573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370bea207826040518263ffffffff1660e01b81526004016110c99190614acb565b5f604051808303815f87803b1580156110e0575f80fd5b505af11580156110f2573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016111559190614025565b5f604051808303815f875af1158015611170573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061119891906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016111f59190614025565b6101c0604051808303815f875af1158015611212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112369190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590614479565b60405180910390fd5b6001600a8111156112c2576112c1613c88565b5b815f0151600a8111156112d8576112d7613c88565b5b14611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614ccf565b60405180910390fd5b8160400151602001515f015181608001516113339190614d1a565b4211611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614d97565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663511a9f68846040518263ffffffff1660e01b81526004016113ce9190614025565b5f604051808303815f87803b1580156113e5575f80fd5b505af11580156113f7573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d31a11584846020015160400151856020015160200151866060015160200151876040015160200151602001516040518663ffffffff1660e01b8152600401611481959493929190614db5565b5f604051808303815f87803b158015611498575f80fd5b505af11580156114aa573d5f803e3d5ffd5b50505050505050565b6114bb613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090614e57565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115d5613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614ebf565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ce613368565b6116d75f6133e6565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016117349190614025565b5f604051808303815f875af115801561174f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061177791906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016117d49190614025565b6101c0604051808303815f875af11580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118159190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16148061188c57503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff16145b6118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290614f27565b60405180910390fd5b5f600a8111156118de576118dd613c88565b5b815f0151600a8111156118f4576118f3613c88565b5b14611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b90614ccf565b60405180910390fd5b81604001515f01515f0151816060015161194e9190614d1a565b421161198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690614d97565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663795f9abf846040518263ffffffff1660e01b81526004016119e99190614025565b5f604051808303815f87803b158015611a00575f80fd5b505af1158015611a12573d5f803e3d5ffd5b505050505f81602001511115611ac65760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ef0d89e84846020015160400151856040015160200151602001516040518463ffffffff1660e01b8152600401611a9493929190614f45565b5f604051808303815f87803b158015611aab575f80fd5b505af1158015611abd573d5f803e3d5ffd5b50505050611b7d565b5f81604001511115611b7c5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afe1dff784846020015160200151856060015160200151866040015160200151602001516040518563ffffffff1660e01b8152600401611b4e949392919061477d565b5f604051808303815f87803b158015611b65575f80fd5b505af1158015611b77573d5f803e3d5ffd5b505050505b5b505050565b611b8a6134a7565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614fcb565b60405180910390fd5b611c21816134ae565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790615033565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401611cbb9190614025565b5f604051808303815f875af1158015611cd6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611cfe91906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f846040518263ffffffff1660e01b8152600401611d5b9190614025565b6020604051808303815f875af1158015611d77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9b9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380ffdfe0846040518263ffffffff1660e01b8152600401611df79190614025565b5f604051808303815f87803b158015611e0e575f80fd5b505af1158015611e20573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2485cce84846020015160400151856020015160200151866060015160200151868860600151606001516040518763ffffffff1660e01b8152600401611ea896959493929190615051565b5f604051808303815f87803b158015611ebf575f80fd5b505af1158015611ed1573d5f803e3d5ffd5b50505050505050565b611ee26134a7565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614fcb565b60405180910390fd5b611f79816134ae565b611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90615033565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016120139190614025565b5f604051808303815f875af115801561202e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061205691906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b81526004016120b39190614025565b6020604051808303815f875af11580156120cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f39190614497565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016121509190614025565b6020604051808303815f875af115801561216c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121909190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663824518aa856040518263ffffffff1660e01b81526004016121ec9190614025565b5f604051808303815f87803b158015612203575f80fd5b505af1158015612215573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1f90728585602001516040015186602001516020015186886060015160200151878a60600151606001516040518863ffffffff1660e01b815260040161229f97969594939291906144d1565b5f604051808303815f87803b1580156122b6575f80fd5b505af11580156122c8573d5f803e3d5ffd5b5050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612329613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90615101565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b815260040161245d9190614025565b5f604051808303815f875af1158015612478573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906124a091906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016124fd9190614025565b6101c0604051808303815f875af115801561251a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253e9190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614806125b557503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16145b6125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90615169565b60405180910390fd5b6004600a81111561260857612607613c88565b5b815f0151600a81111561261e5761261d613c88565b5b1461265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590614ccf565b60405180910390fd5b8160400151604001515f01518160a001516126799190614d1a565b42116126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614d97565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016127159190614025565b6020604051808303815f875af1158015612731573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127559190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7b957d1856040518263ffffffff1660e01b81526004016127b19190614025565b5f604051808303815f87803b1580156127c8575f80fd5b505af11580156127da573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663823f3de185856020015160400151866020015160200151876060015160200151868960600151606001516040518763ffffffff1660e01b815260040161286296959493929190615051565b5f604051808303815f87803b158015612879575f80fd5b505af115801561288b573d5f803e3d5ffd5b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016128f09190614025565b5f604051808303815f875af115801561290b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061293391906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016129909190614025565b6101c0604051808303815f875af11580156129ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d19190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906145f7565b60405180910390fd5b6002600a811115612a5d57612a5c613c88565b5b815f0151600a811115612a7357612a72613c88565b5b14612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614ccf565b60405180910390fd5b8160400151604001515f01518160a00151612ace9190614d1a565b4211612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614d97565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b8152600401612b6a9190614025565b6020604051808303815f875af1158015612b86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612baa9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e850be37856040518263ffffffff1660e01b8152600401612c069190614025565b5f604051808303815f87803b158015612c1d575f80fd5b505af1158015612c2f573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a6726b58585602001516040015186602001516020015185886040015160400151602001516040518663ffffffff1660e01b8152600401612cb1959493929190614db5565b5f604051808303815f87803b158015612cc8575f80fd5b505af1158015612cda573d5f803e3d5ffd5b5050505050505050565b612cec613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d51906151f7565b60405180910390fd5b612d63816133e6565b50565b612d6e6135b6565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6370b0e878787876040518563ffffffff1660e01b8152600401612dcf949392919061531c565b5f604051808303815f875af1158015612dea573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612e1291906143e8565b90505f81602001516040015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490505f82602001516020015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490508180612e915750805b612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec7906153b9565b60405180910390fd5b81156130165760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec95b967896040518263ffffffff1660e01b8152600401612f309190614025565b6101c0604051808303815f875af1158015612f4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f719190614c59565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e3868dc89856020015160400151866040015160200151602001516040518463ffffffff1660e01b8152600401612fe493929190614f45565b5f604051808303815f87803b158015612ffb575f80fd5b505af115801561300d573d5f803e3d5ffd5b50505050613163565b80156131625760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c4135da896040518263ffffffff1660e01b81526004016130769190614025565b6101c0604051808303815f875af1158015613093573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130b79190614c59565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b918803589856020015160200151866060015160200151876040015160400151602001516040518563ffffffff1660e01b8152600401613134949392919061477d565b5f604051808303815f87803b15801561314b575f80fd5b505af115801561315d573d5f803e3d5ffd5b505050505b5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d896040518263ffffffff1660e01b81526004016131bd9190614025565b6101c0604051808303815f875af11580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614c59565b9350505050949350505050565b5f8060159054906101000a900460ff1615905080801561323c575060015f60149054906101000a900460ff1660ff16105b8061326a575061324b30613594565b158015613269575060015f60149054906101000a900460ff1660ff16145b5b6132a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a090615447565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156132e55760015f60156101000a81548160ff0219169083151502179055505b6132ee856114b3565b6132f784612321565b613300836115cd565b61330982610c54565b8015613361575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161335891906154b3565b60405180910390a15b5050505050565b6133706134a7565b73ffffffffffffffffffffffffffffffffffffffff1661338e6122d2565b73ffffffffffffffffffffffffffffffffffffffff16146133e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133db90615516565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8360046040518363ffffffff1660e01b815260040161350c929190613f2f565b6020604051808303815f875af1158015613528573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354c9190613f92565b61358b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135829061557e565b60405180910390fd5b60019050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b604051806101c001604052805f600a8111156135d5576135d4613c88565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61365282613629565b9050919050565b61366281613648565b82525050565b5f60208201905061367b5f830184613659565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6136e08261369a565b810181811067ffffffffffffffff821117156136ff576136fe6136aa565b5b80604052505050565b5f613711613681565b905061371d82826136d7565b919050565b5f67ffffffffffffffff82111561373c5761373b6136aa565b5b6137458261369a565b9050602081019050919050565b828183375f83830152505050565b5f61377261376d84613722565b613708565b90508281526020810184848401111561378e5761378d613696565b5b613799848285613752565b509392505050565b5f82601f8301126137b5576137b4613692565b5b81356137c5848260208601613760565b91505092915050565b5f602082840312156137e3576137e261368a565b5b5f82013567ffffffffffffffff811115613800576137ff61368e565b5b61380c848285016137a1565b91505092915050565b5f819050919050565b61382781613815565b8114613831575f80fd5b50565b5f813590506138428161381e565b92915050565b5f805f80608085870312156138605761385f61368a565b5b5f85013567ffffffffffffffff81111561387d5761387c61368e565b5b613889878288016137a1565b945050602085013567ffffffffffffffff8111156138aa576138a961368e565b5b6138b6878288016137a1565b935050604085013567ffffffffffffffff8111156138d7576138d661368e565b5b6138e3878288016137a1565b92505060606138f487828801613834565b91505092959194509250565b61390981613648565b8114613913575f80fd5b50565b5f8135905061392481613900565b92915050565b5f6020828403121561393f5761393e61368a565b5b5f61394c84828501613916565b91505092915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115613977576139766136aa565b5b602082029050602081019050919050565b5f80fd5b5f61399e6139998461395d565b613708565b905080838252602082019050602084028301858111156139c1576139c0613988565b5b835b818110156139ea57806139d68882613916565b8452602084019350506020810190506139c3565b5050509392505050565b5f82601f830112613a0857613a07613692565b5b8135613a1884826020860161398c565b91505092915050565b5f60808284031215613a3657613a35613955565b5b613a406080613708565b90505f613a4f84828501613916565b5f830152506020613a6284828501613916565b6020830152506040613a7684828501613916565b604083015250606082013567ffffffffffffffff811115613a9a57613a99613959565b5b613aa6848285016139f4565b60608301525092915050565b5f60408284031215613ac757613ac6613955565b5b613ad16040613708565b90505f613ae084828501613834565b5f830152506020613af384828501613834565b60208301525092915050565b5f6101008284031215613b1557613b14613955565b5b613b1f6080613708565b90505f613b2e84828501613ab2565b5f830152506040613b4184828501613ab2565b6020830152506080613b5584828501613ab2565b60408301525060c0613b6984828501613ab2565b60608301525092915050565b5f60808284031215613b8a57613b89613955565b5b613b946080613708565b90505f613ba384828501613834565b5f830152506020613bb684828501613834565b6020830152506040613bca84828501613834565b6040830152506060613bde84828501613834565b60608301525092915050565b5f805f806101c08587031215613c0357613c0261368a565b5b5f85013567ffffffffffffffff811115613c2057613c1f61368e565b5b613c2c878288016137a1565b945050602085013567ffffffffffffffff811115613c4d57613c4c61368e565b5b613c5987828801613a21565b9350506040613c6a87828801613aff565b925050610140613c7c87828801613b75565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b8110613cc657613cc5613c88565b5b50565b5f819050613cd682613cb5565b919050565b5f613ce582613cc9565b9050919050565b613cf581613cdb565b82525050565b613d0481613815565b82525050565b6101c082015f820151613d1f5f850182613cec565b506020820151613d326020850182613cfb565b506040820151613d456040850182613cfb565b506060820151613d586060850182613cfb565b506080820151613d6b6080850182613cfb565b5060a0820151613d7e60a0850182613cfb565b5060c0820151613d9160c0850182613cfb565b5060e0820151613da460e0850182613cfb565b50610100820151613db9610100850182613cfb565b50610120820151613dce610120850182613cfb565b50610140820151613de3610140850182613cfb565b50610160820151613df8610160850182613cfb565b50610180820151613e0d610180850182613cfb565b506101a0820151613e226101a0850182613cfb565b50505050565b5f6101c082019050613e3c5f830184613d0a565b92915050565b5f805f8060808587031215613e5a57613e5961368a565b5b5f613e6787828801613916565b9450506020613e7887828801613916565b9350506040613e8987828801613916565b9250506060613e9a87828801613916565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613edd578082015181840152602081019050613ec2565b5f8484015250505050565b5f613ef282613ea6565b613efc8185613eb0565b9350613f0c818560208601613ec0565b613f158161369a565b840191505092915050565b613f2981613cdb565b82525050565b5f6040820190508181035f830152613f478185613ee8565b9050613f566020830184613f20565b9392505050565b5f8115159050919050565b613f7181613f5d565b8114613f7b575f80fd5b50565b5f81519050613f8c81613f68565b92915050565b5f60208284031215613fa757613fa661368a565b5b5f613fb484828501613f7e565b91505092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613ff1601083613eb0565b9150613ffc82613fbd565b602082019050919050565b5f6020820190508181035f83015261401e81613fe5565b9050919050565b5f6020820190508181035f83015261403d8184613ee8565b905092915050565b5f61405761405284613722565b613708565b90508281526020810184848401111561407357614072613696565b5b61407e848285613ec0565b509392505050565b5f82601f83011261409a57614099613692565b5b81516140aa848260208601614045565b91505092915050565b5f815190506140c181613900565b92915050565b5f6140d96140d48461395d565b613708565b905080838252602082019050602084028301858111156140fc576140fb613988565b5b835b81811015614125578061411188826140b3565b8452602084019350506020810190506140fe565b5050509392505050565b5f82601f83011261414357614142613692565b5b81516141538482602086016140c7565b91505092915050565b5f6080828403121561417157614170613955565b5b61417b6080613708565b90505f61418a848285016140b3565b5f83015250602061419d848285016140b3565b60208301525060406141b1848285016140b3565b604083015250606082015167ffffffffffffffff8111156141d5576141d4613959565b5b6141e18482850161412f565b60608301525092915050565b5f815190506141fb8161381e565b92915050565b5f6040828403121561421657614215613955565b5b6142206040613708565b90505f61422f848285016141ed565b5f830152506020614242848285016141ed565b60208301525092915050565b5f610100828403121561426457614263613955565b5b61426e6080613708565b90505f61427d84828501614201565b5f83015250604061429084828501614201565b60208301525060806142a484828501614201565b60408301525060c06142b884828501614201565b60608301525092915050565b5f608082840312156142d9576142d8613955565b5b6142e36080613708565b90505f6142f2848285016141ed565b5f830152506020614305848285016141ed565b6020830152506040614319848285016141ed565b604083015250606061432d848285016141ed565b60608301525092915050565b5f6101c0828403121561434f5761434e613955565b5b6143596080613708565b90505f82015167ffffffffffffffff81111561437857614377613959565b5b61438484828501614086565b5f83015250602082015167ffffffffffffffff8111156143a7576143a6613959565b5b6143b38482850161415c565b60208301525060406143c78482850161424e565b6040830152506101406143dc848285016142c4565b60608301525092915050565b5f602082840312156143fd576143fc61368a565b5b5f82015167ffffffffffffffff81111561441a5761441961368e565b5b61442684828501614339565b91505092915050565b7f4f6e6c79204a43000000000000000000000000000000000000000000000000005f82015250565b5f614463600783613eb0565b915061446e8261442f565b602082019050919050565b5f6020820190508181035f83015261449081614457565b9050919050565b5f602082840312156144ac576144ab61368a565b5b5f6144b9848285016141ed565b91505092915050565b6144cb81613815565b82525050565b5f60e0820190508181035f8301526144e9818a613ee8565b90506144f86020830189613659565b6145056040830188613659565b61451260608301876144c2565b61451f60808301866144c2565b61452c60a08301856144c2565b61453960c08301846144c2565b98975050505050505050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f614579600a83613eb0565b915061458482614545565b602082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f6e6c79205250000000000000000000000000000000000000000000000000005f82015250565b5f6145e1600783613eb0565b91506145ec826145ad565b602082019050919050565b5f6020820190508181035f83015261460e816145d5565b9050919050565b5f6080820190508181035f83015261462d8187613ee8565b905081810360208301526146418186613ee8565b905081810360408301526146558185613ee8565b905061466460608301846144c2565b95945050505050565b5f6080828403121561468257614681613955565b5b61468c6080613708565b90505f82015167ffffffffffffffff8111156146ab576146aa613959565b5b6146b784828501614086565b5f83015250602082015167ffffffffffffffff8111156146da576146d9613959565b5b6146e684828501614086565b602083015250604082015167ffffffffffffffff81111561470a57614709613959565b5b61471684828501614086565b604083015250606061472a848285016141ed565b60608301525092915050565b5f6020828403121561474b5761474a61368a565b5b5f82015167ffffffffffffffff8111156147685761476761368e565b5b6147748482850161466d565b91505092915050565b5f6080820190508181035f8301526147958187613ee8565b90506147a46020830186613659565b6147b160408301856144c2565b6147be60608301846144c2565b95945050505050565b7f4d6564696174696f6e20616464726573730000000000000000000000000000005f82015250565b5f6147fb601183613eb0565b9150614806826147c7565b602082019050919050565b5f6020820190508181035f830152614828816147ef565b9050919050565b5f82825260208201905092915050565b5f61484982613ea6565b614853818561482f565b9350614863818560208601613ec0565b61486c8161369a565b840191505092915050565b61488081613648565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6148ba8383614877565b60208301905092915050565b5f602082019050919050565b5f6148dc82614886565b6148e68185614890565b93506148f1836148a0565b805f5b8381101561492157815161490888826148af565b9750614913836148c6565b9250506001810190506148f4565b5085935050505092915050565b5f608083015f8301516149435f860182614877565b5060208301516149566020860182614877565b5060408301516149696040860182614877565b506060830151848203606086015261498182826148d2565b9150508091505092915050565b604082015f8201516149a25f850182613cfb565b5060208201516149b56020850182613cfb565b50505050565b61010082015f8201516149d05f85018261498e565b5060208201516149e3604085018261498e565b5060408201516149f6608085018261498e565b506060820151614a0960c085018261498e565b50505050565b608082015f820151614a235f850182613cfb565b506020820151614a366020850182613cfb565b506040820151614a496040850182613cfb565b506060820151614a5c6060850182613cfb565b50505050565b5f6101c083015f8301518482035f860152614a7d828261483f565b91505060208301518482036020860152614a97828261492e565b9150506040830151614aac60408601826149bb565b506060830151614ac0610140860182614a0f565b508091505092915050565b5f6020820190508181035f830152614ae38184614a62565b905092915050565b600b8110614af7575f80fd5b50565b5f81519050614b0881614aeb565b92915050565b5f6101c08284031215614b2457614b23613955565b5b614b2f6101c0613708565b90505f614b3e84828501614afa565b5f830152506020614b51848285016141ed565b6020830152506040614b65848285016141ed565b6040830152506060614b79848285016141ed565b6060830152506080614b8d848285016141ed565b60808301525060a0614ba1848285016141ed565b60a08301525060c0614bb5848285016141ed565b60c08301525060e0614bc9848285016141ed565b60e083015250610100614bde848285016141ed565b61010083015250610120614bf4848285016141ed565b61012083015250610140614c0a848285016141ed565b61014083015250610160614c20848285016141ed565b61016083015250610180614c36848285016141ed565b610180830152506101a0614c4c848285016141ed565b6101a08301525092915050565b5f6101c08284031215614c6f57614c6e61368a565b5b5f614c7c84828501614b0e565b91505092915050565b7f4e6f7420636f72726563742073746174650000000000000000000000000000005f82015250565b5f614cb9601183613eb0565b9150614cc482614c85565b602082019050919050565b5f6020820190508181035f830152614ce681614cad565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614d2482613815565b9150614d2f83613815565b9250828201905080821115614d4757614d46614ced565b5b92915050565b7f4e6f742074696d6564206f7574000000000000000000000000000000000000005f82015250565b5f614d81600d83613eb0565b9150614d8c82614d4d565b602082019050919050565b5f6020820190508181035f830152614dae81614d75565b9050919050565b5f60a0820190508181035f830152614dcd8188613ee8565b9050614ddc6020830187613659565b614de96040830186613659565b614df660608301856144c2565b614e0360808301846144c2565b9695505050505050565b7f53746f72616765206164647265737300000000000000000000000000000000005f82015250565b5f614e41600f83613eb0565b9150614e4c82614e0d565b602082019050919050565b5f6020820190508181035f830152614e6e81614e35565b9050919050565b7f5061796d656e74732061646472657373000000000000000000000000000000005f82015250565b5f614ea9601083613eb0565b9150614eb482614e75565b602082019050919050565b5f6020820190508181035f830152614ed681614e9d565b9050919050565b7f4f6e6c79204a43206f72205250000000000000000000000000000000000000005f82015250565b5f614f11600d83613eb0565b9150614f1c82614edd565b602082019050919050565b5f6020820190508181035f830152614f3e81614f05565b9050919050565b5f6060820190508181035f830152614f5d8186613ee8565b9050614f6c6020830185613659565b614f7960408301846144c2565b949350505050565b7f4f6e6c79206d6564696174696f6e0000000000000000000000000000000000005f82015250565b5f614fb5600e83613eb0565b9150614fc082614f81565b602082019050919050565b5f6020820190508181035f830152614fe281614fa9565b9050919050565b7f43616e6e6f74206d6564696174650000000000000000000000000000000000005f82015250565b5f61501d600e83613eb0565b915061502882614fe9565b602082019050919050565b5f6020820190508181035f83015261504a81615011565b9050919050565b5f60c0820190508181035f8301526150698189613ee8565b90506150786020830188613659565b6150856040830187613659565b61509260608301866144c2565b61509f60808301856144c2565b6150ac60a08301846144c2565b979650505050505050565b7f55736572732061646472657373000000000000000000000000000000000000005f82015250565b5f6150eb600d83613eb0565b91506150f6826150b7565b602082019050919050565b5f6020820190508181035f830152615118816150df565b9050919050565b7f4f6e6c79205250206f72204a43000000000000000000000000000000000000005f82015250565b5f615153600d83613eb0565b915061515e8261511f565b602082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151e1602683613eb0565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b5f608083015f83015161522a5f860182614877565b50602083015161523d6020860182614877565b5060408301516152506040860182614877565b506060830151848203606086015261526882826148d2565b9150508091505092915050565b61010082015f82015161528a5f85018261498e565b50602082015161529d604085018261498e565b5060408201516152b0608085018261498e565b5060608201516152c360c085018261498e565b50505050565b608082015f8201516152dd5f850182613cfb565b5060208201516152f06020850182613cfb565b5060408201516153036040850182613cfb565b5060608201516153166060850182613cfb565b50505050565b5f6101c0820190508181035f8301526153358187613ee8565b905081810360208301526153498186615215565b90506153586040830185615275565b6153666101408301846152c9565b95945050505050565b7f4f6e6c79205250202f204a4300000000000000000000000000000000000000005f82015250565b5f6153a3600c83613eb0565b91506153ae8261536f565b602082019050919050565b5f6020820190508181035f8301526153d081615397565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f615431602e83613eb0565b915061543c826153d7565b604082019050919050565b5f6020820190508181035f83015261545e81615425565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61549d61549861549384615465565b61547a565b61546e565b9050919050565b6154ad81615483565b82525050565b5f6020820190506154c65f8301846154a4565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f615500602083613eb0565b915061550b826154cc565b602082019050919050565b5f6020820190508181035f83015261552d816154f4565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f615568600e83613eb0565b915061557382615534565b602082019050919050565b5f6020820190508181035f8301526155958161555c565b905091905056fea2646970667358221220b2835d8b5bbf3339537b330cb1bfc8c4f7c564dd7daee727b6e3fb96ce28100a64736f6c63430008150033", } // ControllerABI is the input ABI used to generate the binding from. @@ -426,25 +426,25 @@ func (_Controller *ControllerTransactorSession) AcceptResult(dealId string) (*ty return _Controller.Contract.AcceptResult(&_Controller.TransactOpts, dealId) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns() -func (_Controller *ControllerTransactor) AddResult(opts *bind.TransactOpts, dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Controller.contract.Transact(opts, "addResult", dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Controller *ControllerTransactor) AddResult(opts *bind.TransactOpts, dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Controller.contract.Transact(opts, "addResult", dealId, resultsId, dataId, instructionCount) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns() -func (_Controller *ControllerSession) AddResult(dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Controller.Contract.AddResult(&_Controller.TransactOpts, dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Controller *ControllerSession) AddResult(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Controller.Contract.AddResult(&_Controller.TransactOpts, dealId, resultsId, dataId, instructionCount) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns() -func (_Controller *ControllerTransactorSession) AddResult(dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Controller.Contract.AddResult(&_Controller.TransactOpts, dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Controller *ControllerTransactorSession) AddResult(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Controller.Contract.AddResult(&_Controller.TransactOpts, dealId, resultsId, dataId, instructionCount) } // Agree is a paid mutator transaction binding the contract method 0xf583b125. diff --git a/pkg/web3/bindings/mediation/mediation.go b/pkg/web3/bindings/mediation/mediation.go index c1d3f93d..9eb4e5e3 100644 --- a/pkg/web3/bindings/mediation/mediation.go +++ b/pkg/web3/bindings/mediation/mediation.go @@ -70,7 +70,7 @@ type SharedStructsDealTimeouts struct { // MediationMetaData contains all meta data concerning the Mediation contract. var MediationMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mediator\",\"type\":\"address\"}],\"name\":\"MediationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getMediator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"deal\",\"type\":\"tuple\"}],\"name\":\"mediationRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611974806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b14610113578063a2bffa0014610131578063a470295814610161578063c57380a21461016b578063f2fde38b14610189578063f3d3d448146101a5576100a7565b806370bea207146100ab578063715018a6146100c757806380ffdfe0146100d15780638129fc1c146100ed578063824518aa146100f7575b5f80fd5b6100c560048036038101906100c0919061120f565b6101c1565b005b6100cf610343565b005b6100eb60048036038101906100e69190611256565b610356565b005b6100f561051c565b005b610111600480360381019061010c9190611256565b610653565b005b61011b610819565b60405161012891906112ac565b60405180910390f35b61014b60048036038101906101469190611256565b610840565b60405161015891906112ac565b60405180910390f35b610169610886565b005b6101736108aa565b60405161018091906112ac565b60405180910390f35b6101a3600480360381019061019e91906112c5565b6108d2565b005b6101bf60048036038101906101ba91906112c5565b610954565b005b6101c9610a5c565b505f8160200151606001515142835f01516040516020016101eb92919061137c565b604051602081830303815290604052805190602001205f1c61020d91906113d0565b90505f826020015160600151828151811061022b5761022a611400565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029a90611487565b60405180910390fd5b806002845f01516040516102b791906114a5565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffd3770121045f9427361660d6eaa8b07a2e45eca6964f5c4f041a28f21084086835f0151826040516103369291906114f3565b60405180910390a1505050565b61034b610b89565b6103545f610c07565b565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161037d91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161042891906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a39061156b565b60405180910390fd5b6104b46108aa565b73ffffffffffffffffffffffffffffffffffffffff166380ffdfe0826040518263ffffffff1660e01b81526004016104ec9190611589565b5f604051808303815f87803b158015610503575f80fd5b505af1158015610515573d5f803e3d5ffd5b5050505050565b5f600160169054906101000a900460ff1615905080801561054e575060018060159054906101000a900460ff1660ff16105b8061057c575061055d30610cc8565b15801561057b575060018060159054906101000a900460ff1660ff16145b5b6105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290611619565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105f75760018060166101000a81548160ff0219169083151502179055505b8015610650575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106479190611685565b60405180910390a15b50565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161067a91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161072591906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a09061156b565b60405180910390fd5b6107b16108aa565b73ffffffffffffffffffffffffffffffffffffffff1663824518aa826040518263ffffffff1660e01b81526004016107e99190611589565b5f604051808303815f87803b158015610800575f80fd5b505af1158015610812573d5f803e3d5ffd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60028260405161085191906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61088e610b89565b5f600160146101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108da610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f9061170e565b60405180910390fd5b61095181610c07565b50565b61095c610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061179c565b60405180910390fd5b600160149054906101000a900460ff16610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a109061182a565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae39061179c565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c610cea565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906118b8565b60405180910390fd5b6001905090565b610b91610cea565b73ffffffffffffffffffffffffffffffffffffffff16610baf610819565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90611920565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d4c82610d06565b810181811067ffffffffffffffff82111715610d6b57610d6a610d16565b5b80604052505050565b5f610d7d610cf1565b9050610d898282610d43565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610db457610db3610d16565b5b610dbd82610d06565b9050602081019050919050565b828183375f83830152505050565b5f610dea610de584610d9a565b610d74565b905082815260208101848484011115610e0657610e05610d96565b5b610e11848285610dca565b509392505050565b5f82601f830112610e2d57610e2c610d92565b5b8135610e3d848260208601610dd8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6f82610e46565b9050919050565b610e7f81610e65565b8114610e89575f80fd5b50565b5f81359050610e9a81610e76565b92915050565b5f67ffffffffffffffff821115610eba57610eb9610d16565b5b602082029050602081019050919050565b5f80fd5b5f610ee1610edc84610ea0565b610d74565b90508083825260208201905060208402830185811115610f0457610f03610ecb565b5b835b81811015610f2d5780610f198882610e8c565b845260208401935050602081019050610f06565b5050509392505050565b5f82601f830112610f4b57610f4a610d92565b5b8135610f5b848260208601610ecf565b91505092915050565b5f60808284031215610f7957610f78610d02565b5b610f836080610d74565b90505f610f9284828501610e8c565b5f830152506020610fa584828501610e8c565b6020830152506040610fb984828501610e8c565b604083015250606082013567ffffffffffffffff811115610fdd57610fdc610d8e565b5b610fe984828501610f37565b60608301525092915050565b5f819050919050565b61100781610ff5565b8114611011575f80fd5b50565b5f8135905061102281610ffe565b92915050565b5f6040828403121561103d5761103c610d02565b5b6110476040610d74565b90505f61105684828501611014565b5f83015250602061106984828501611014565b60208301525092915050565b5f610100828403121561108b5761108a610d02565b5b6110956080610d74565b90505f6110a484828501611028565b5f8301525060406110b784828501611028565b60208301525060806110cb84828501611028565b60408301525060c06110df84828501611028565b60608301525092915050565b5f60808284031215611100576110ff610d02565b5b61110a6080610d74565b90505f61111984828501611014565b5f83015250602061112c84828501611014565b602083015250604061114084828501611014565b604083015250606061115484828501611014565b60608301525092915050565b5f6101c0828403121561117657611175610d02565b5b6111806080610d74565b90505f82013567ffffffffffffffff81111561119f5761119e610d8e565b5b6111ab84828501610e19565b5f83015250602082013567ffffffffffffffff8111156111ce576111cd610d8e565b5b6111da84828501610f64565b60208301525060406111ee84828501611075565b604083015250610140611203848285016110eb565b60608301525092915050565b5f6020828403121561122457611223610cfa565b5b5f82013567ffffffffffffffff81111561124157611240610cfe565b5b61124d84828501611160565b91505092915050565b5f6020828403121561126b5761126a610cfa565b5b5f82013567ffffffffffffffff81111561128857611287610cfe565b5b61129484828501610e19565b91505092915050565b6112a681610e65565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f602082840312156112da576112d9610cfa565b5b5f6112e784828501610e8c565b91505092915050565b5f819050919050565b61130a61130582610ff5565b6112f0565b82525050565b5f81519050919050565b5f81905092915050565b5f5b83811015611341578082015181840152602081019050611326565b5f8484015250505050565b5f61135682611310565b611360818561131a565b9350611370818560208601611324565b80840191505092915050565b5f61138782856112f9565b602082019150611397828461134c565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113da82610ff5565b91506113e583610ff5565b9250826113f5576113f46113a3565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b7f6d65646961746f722063616e6e6f7420626520307830000000000000000000005f82015250565b5f61147160168361142d565b915061147c8261143d565b602082019050919050565b5f6020820190508181035f83015261149e81611465565b9050919050565b5f6114b0828461134c565b915081905092915050565b5f6114c582611310565b6114cf818561142d565b93506114df818560208601611324565b6114e881610d06565b840191505092915050565b5f6040820190508181035f83015261150b81856114bb565b905061151a602083018461129d565b9392505050565b7f74782e6f726967696e206d75737420626520746865206d65646961746f7200005f82015250565b5f611555601e8361142d565b915061156082611521565b602082019050919050565b5f6020820190508181035f83015261158281611549565b9050919050565b5f6020820190508181035f8301526115a181846114bb565b905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f611603602e8361142d565b915061160e826115a9565b604082019050919050565b5f6020820190508181035f830152611630816115f7565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61166f61166a61166584611637565b61164c565b611640565b9050919050565b61167f81611655565b82525050565b5f6020820190506116985f830184611676565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6116f860268361142d565b91506117038261169e565b604082019050919050565b5f6020820190508181035f830152611725816116ec565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f61178660358361142d565b91506117918261172c565b604082019050919050565b5f6020820190508181035f8301526117b38161177a565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61181460398361142d565b915061181f826117ba565b604082019050919050565b5f6020820190508181035f83015261184181611808565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6118a2603b8361142d565b91506118ad82611848565b604082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61190a60208361142d565b9150611915826118d6565b602082019050919050565b5f6020820190508181035f830152611937816118fe565b905091905056fea26469706673582212209dbff50b737fc897a89a42e3db2d19281f969da124273f98d1f2c2b6bcfcf71464736f6c63430008150033", + Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611974806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b14610113578063a2bffa0014610131578063a470295814610161578063c57380a21461016b578063f2fde38b14610189578063f3d3d448146101a5576100a7565b806370bea207146100ab578063715018a6146100c757806380ffdfe0146100d15780638129fc1c146100ed578063824518aa146100f7575b5f80fd5b6100c560048036038101906100c0919061120f565b6101c1565b005b6100cf610343565b005b6100eb60048036038101906100e69190611256565b610356565b005b6100f561051c565b005b610111600480360381019061010c9190611256565b610653565b005b61011b610819565b60405161012891906112ac565b60405180910390f35b61014b60048036038101906101469190611256565b610840565b60405161015891906112ac565b60405180910390f35b610169610886565b005b6101736108aa565b60405161018091906112ac565b60405180910390f35b6101a3600480360381019061019e91906112c5565b6108d2565b005b6101bf60048036038101906101ba91906112c5565b610954565b005b6101c9610a5c565b505f8160200151606001515142835f01516040516020016101eb92919061137c565b604051602081830303815290604052805190602001205f1c61020d91906113d0565b90505f826020015160600151828151811061022b5761022a611400565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029a90611487565b60405180910390fd5b806002845f01516040516102b791906114a5565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffd3770121045f9427361660d6eaa8b07a2e45eca6964f5c4f041a28f21084086835f0151826040516103369291906114f3565b60405180910390a1505050565b61034b610b89565b6103545f610c07565b565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161037d91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161042891906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a39061156b565b60405180910390fd5b6104b46108aa565b73ffffffffffffffffffffffffffffffffffffffff166380ffdfe0826040518263ffffffff1660e01b81526004016104ec9190611589565b5f604051808303815f87803b158015610503575f80fd5b505af1158015610515573d5f803e3d5ffd5b5050505050565b5f600160169054906101000a900460ff1615905080801561054e575060018060159054906101000a900460ff1660ff16105b8061057c575061055d30610cc8565b15801561057b575060018060159054906101000a900460ff1660ff16145b5b6105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290611619565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105f75760018060166101000a81548160ff0219169083151502179055505b8015610650575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106479190611685565b60405180910390a15b50565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161067a91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161072591906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a09061156b565b60405180910390fd5b6107b16108aa565b73ffffffffffffffffffffffffffffffffffffffff1663824518aa826040518263ffffffff1660e01b81526004016107e99190611589565b5f604051808303815f87803b158015610800575f80fd5b505af1158015610812573d5f803e3d5ffd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60028260405161085191906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61088e610b89565b5f600160146101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108da610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f9061170e565b60405180910390fd5b61095181610c07565b50565b61095c610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061179c565b60405180910390fd5b600160149054906101000a900460ff16610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a109061182a565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae39061179c565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c610cea565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906118b8565b60405180910390fd5b6001905090565b610b91610cea565b73ffffffffffffffffffffffffffffffffffffffff16610baf610819565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90611920565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d4c82610d06565b810181811067ffffffffffffffff82111715610d6b57610d6a610d16565b5b80604052505050565b5f610d7d610cf1565b9050610d898282610d43565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610db457610db3610d16565b5b610dbd82610d06565b9050602081019050919050565b828183375f83830152505050565b5f610dea610de584610d9a565b610d74565b905082815260208101848484011115610e0657610e05610d96565b5b610e11848285610dca565b509392505050565b5f82601f830112610e2d57610e2c610d92565b5b8135610e3d848260208601610dd8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6f82610e46565b9050919050565b610e7f81610e65565b8114610e89575f80fd5b50565b5f81359050610e9a81610e76565b92915050565b5f67ffffffffffffffff821115610eba57610eb9610d16565b5b602082029050602081019050919050565b5f80fd5b5f610ee1610edc84610ea0565b610d74565b90508083825260208201905060208402830185811115610f0457610f03610ecb565b5b835b81811015610f2d5780610f198882610e8c565b845260208401935050602081019050610f06565b5050509392505050565b5f82601f830112610f4b57610f4a610d92565b5b8135610f5b848260208601610ecf565b91505092915050565b5f60808284031215610f7957610f78610d02565b5b610f836080610d74565b90505f610f9284828501610e8c565b5f830152506020610fa584828501610e8c565b6020830152506040610fb984828501610e8c565b604083015250606082013567ffffffffffffffff811115610fdd57610fdc610d8e565b5b610fe984828501610f37565b60608301525092915050565b5f819050919050565b61100781610ff5565b8114611011575f80fd5b50565b5f8135905061102281610ffe565b92915050565b5f6040828403121561103d5761103c610d02565b5b6110476040610d74565b90505f61105684828501611014565b5f83015250602061106984828501611014565b60208301525092915050565b5f610100828403121561108b5761108a610d02565b5b6110956080610d74565b90505f6110a484828501611028565b5f8301525060406110b784828501611028565b60208301525060806110cb84828501611028565b60408301525060c06110df84828501611028565b60608301525092915050565b5f60808284031215611100576110ff610d02565b5b61110a6080610d74565b90505f61111984828501611014565b5f83015250602061112c84828501611014565b602083015250604061114084828501611014565b604083015250606061115484828501611014565b60608301525092915050565b5f6101c0828403121561117657611175610d02565b5b6111806080610d74565b90505f82013567ffffffffffffffff81111561119f5761119e610d8e565b5b6111ab84828501610e19565b5f83015250602082013567ffffffffffffffff8111156111ce576111cd610d8e565b5b6111da84828501610f64565b60208301525060406111ee84828501611075565b604083015250610140611203848285016110eb565b60608301525092915050565b5f6020828403121561122457611223610cfa565b5b5f82013567ffffffffffffffff81111561124157611240610cfe565b5b61124d84828501611160565b91505092915050565b5f6020828403121561126b5761126a610cfa565b5b5f82013567ffffffffffffffff81111561128857611287610cfe565b5b61129484828501610e19565b91505092915050565b6112a681610e65565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f602082840312156112da576112d9610cfa565b5b5f6112e784828501610e8c565b91505092915050565b5f819050919050565b61130a61130582610ff5565b6112f0565b82525050565b5f81519050919050565b5f81905092915050565b5f5b83811015611341578082015181840152602081019050611326565b5f8484015250505050565b5f61135682611310565b611360818561131a565b9350611370818560208601611324565b80840191505092915050565b5f61138782856112f9565b602082019150611397828461134c565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113da82610ff5565b91506113e583610ff5565b9250826113f5576113f46113a3565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b7f6d65646961746f722063616e6e6f7420626520307830000000000000000000005f82015250565b5f61147160168361142d565b915061147c8261143d565b602082019050919050565b5f6020820190508181035f83015261149e81611465565b9050919050565b5f6114b0828461134c565b915081905092915050565b5f6114c582611310565b6114cf818561142d565b93506114df818560208601611324565b6114e881610d06565b840191505092915050565b5f6040820190508181035f83015261150b81856114bb565b905061151a602083018461129d565b9392505050565b7f74782e6f726967696e206d75737420626520746865206d65646961746f7200005f82015250565b5f611555601e8361142d565b915061156082611521565b602082019050919050565b5f6020820190508181035f83015261158281611549565b9050919050565b5f6020820190508181035f8301526115a181846114bb565b905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f611603602e8361142d565b915061160e826115a9565b604082019050919050565b5f6020820190508181035f830152611630816115f7565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61166f61166a61166584611637565b61164c565b611640565b9050919050565b61167f81611655565b82525050565b5f6020820190506116985f830184611676565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6116f860268361142d565b91506117038261169e565b604082019050919050565b5f6020820190508181035f830152611725816116ec565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f61178660358361142d565b91506117918261172c565b604082019050919050565b5f6020820190508181035f8301526117b38161177a565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61181460398361142d565b915061181f826117ba565b604082019050919050565b5f6020820190508181035f83015261184181611808565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6118a2603b8361142d565b91506118ad82611848565b604082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61190a60208361142d565b9150611915826118d6565b602082019050919050565b5f6020820190508181035f830152611937816118fe565b905091905056fea26469706673582212207c641382be2ee021e3438328545b6308a7fb7f50233893242de3ff4d6c64f05564736f6c63430008150033", } // MediationABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/bindings/storage/storage.go b/pkg/web3/bindings/storage/storage.go index 4ae94639..1ec751ba 100644 --- a/pkg/web3/bindings/storage/storage.go +++ b/pkg/web3/bindings/storage/storage.go @@ -89,13 +89,14 @@ type SharedStructsDealTimeouts struct { type SharedStructsResult struct { DealId string ResultsId string + DataId string InstructionCount *big.Int } // StorageMetaData contains all meta data concerning the Storage contract. var StorageMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"DealStateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeJobCreator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeResourceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"ensureDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getAgreement\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"party\",\"type\":\"address\"}],\"name\":\"getDealsForParty\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getJobCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResultsCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"hasDeal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"isState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600260146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614e7580620001425f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c8063822f80c5116100f7578063cdd82d1d11610095578063e850be371161006f578063e850be37146104d9578063ec95b967146104f5578063f2fde38b14610525578063f3d3d44814610541576101a7565b8063cdd82d1d1461045d578063e70791801461048d578063e7b957d1146104bd576101a7565b8063a4702958116100d1578063a4702958146103d5578063a6370b0e146103df578063b050e74b1461040f578063c57380a21461043f576101a7565b8063822f80c51461036b578063824518aa1461039b5780638da5cb5b146103b7576101a7565b8063511a9f6811610164578063795f9abf1161013e578063795f9abf146102f957806380ffdfe0146103155780638129fc1c146103315780638224ce5f1461033b576101a7565b8063511a9f68146102a3578063715018a6146102bf57806373db5c6a146102c9576101a7565b806311d5af33146101ab5780632244ad2b146101db578063297f9e551461020b5780633c4135da1461022757806346834d1e14610257578063498cc70d14610273575b5f80fd5b6101c560048036038101906101c09190612f78565b61055d565b6040516101d291906130e8565b60405180910390f35b6101f560048036038101906101f09190613234565b61066e565b6040516102029190613295565b60405180910390f35b61022560048036038101906102209190613234565b610685565b005b610241600480360381019061023c9190613234565b61070c565b60405161024e9190613457565b60405180910390f35b610271600480360381019061026c9190613234565b6108e3565b005b61028d60048036038101906102889190613234565b61096a565b60405161029a91906134c5565b60405180910390f35b6102bd60048036038101906102b89190613234565b610acb565b005b6102c7610b52565b005b6102e360048036038101906102de9190613234565b610b65565b6040516102f091906134f4565b60405180910390f35b610313600480360381019061030e9190613234565b610bbd565b005b61032f600480360381019061032a9190613234565b610c43565b005b610339610cca565b005b61035560048036038101906103509190613234565b610e01565b60405161036291906134f4565b60405180910390f35b61038560048036038101906103809190613537565b610e41565b60405161039291906134c5565b60405180910390f35b6103b560048036038101906103b09190613234565b611098565b005b6103bf61111f565b6040516103cc91906135ce565b60405180910390f35b6103dd611146565b005b6103f960048036038101906103f4919061387c565b61116a565b6040516104069190613b6e565b60405180910390f35b61042960048036038101906104249190613bb1565b611848565b6040516104369190613295565b60405180910390f35b6104476118e0565b60405161045491906135ce565b60405180910390f35b61047760048036038101906104729190613234565b611908565b6040516104849190613457565b60405180910390f35b6104a760048036038101906104a29190613234565b6119fc565b6040516104b49190613b6e565b60405180910390f35b6104d760048036038101906104d29190613234565b611d4a565b005b6104f360048036038101906104ee9190613234565b611dd1565b005b61050f600480360381019061050a9190613234565b611e58565b60405161051c9190613457565b60405180910390f35b61053f600480360381019061053a9190612f78565b61202f565b005b61055b60048036038101906105569190612f78565b6120b1565b005b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610663578382905f5260205f200180546105d890613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613c38565b801561064f5780601f106106265761010080835404028352916020019161064f565b820191905f5260205f20905b81548152906001019060200180831161063257829003601f168201915b5050505050815260200190600101906105bb565b505050509050919050565b5f80610679836119fc565b5f015151119050919050565b61068d6121b9565b50610699816002611848565b6106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90613cc2565b60405180910390fd5b426005826040516106e99190613d1a565b9081526020016040518091039020600601819055506107098160036122e6565b50565b610714612cbb565b61071c6121b9565b506107268261066e565b610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075c90613d7a565b60405180910390fd5b5f6005836040516107769190613d1a565b908152602001604051809103902060020154146107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90613de2565b60405180910390fd5b426005836040516107d99190613d1a565b9081526020016040518091039020600201819055506107f78261236a565b6005826040516108079190613d1a565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115610844576108436132ae565b5b600a811115610856576108556132ae565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b6108eb6121b9565b506108f7816002611848565b610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d90613cc2565b60405180910390fd5b426005826040516109479190613d1a565b9081526020016040518091039020600701819055506109678160046122e6565b50565b610972612d2e565b6006826040516109829190613d1a565b90815260200160405180910390206040518060600160405290815f820180546109aa90613c38565b80601f01602080910402602001604051908101604052809291908181526020018280546109d690613c38565b8015610a215780601f106109f857610100808354040283529160200191610a21565b820191905f5260205f20905b815481529060010190602001808311610a0457829003601f168201915b50505050508152602001600182018054610a3a90613c38565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6690613c38565b8015610ab15780601f10610a8857610100808354040283529160200191610ab1565b820191905f5260205f20905b815481529060010190602001808311610a9457829003601f168201915b505050505081526020016002820154815250509050919050565b610ad36121b9565b50610adf816001611848565b610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590613e4a565b60405180910390fd5b42600582604051610b2f9190613d1a565b9081526020016040518091039020600b0181905550610b4f8160086122e6565b50565b610b5a612421565b610b635f61249f565b565b5f600682604051610b769190613d1a565b908152602001604051809103902060020154600383604051610b989190613d1a565b9081526020016040518091039020600d015f0154610bb69190613e95565b9050919050565b610bc56121b9565b50610bd0815f611848565b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613f20565b60405180910390fd5b42600582604051610c209190613d1a565b9081526020016040518091039020600a0181905550610c408160076122e6565b50565b610c4b6121b9565b50610c57816004611848565b610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613f88565b60405180910390fd5b42600582604051610ca79190613d1a565b908152602001604051809103902060090181905550610cc78160066122e6565b50565b5f600160169054906101000a900460ff16159050808015610cfc575060018060159054906101000a900460ff1660ff16105b80610d2a5750610d0b30612560565b158015610d29575060018060159054906101000a900460ff1660ff16145b5b610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090614016565b60405180910390fd5b60018060156101000a81548160ff021916908360ff1602179055508015610da55760018060166101000a81548160ff0219169083151502179055505b8015610dfe575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610df59190614082565b60405180910390a15b50565b5f610e0b82610b65565b600383604051610e1b9190613d1a565b9081526020016040518091039020600d0160020154610e3a9190613e95565b9050919050565b610e49612d2e565b610e516121b9565b50610e5d846001611848565b610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390613e4a565b60405180910390fd5b42600585604051610ead9190613d1a565b908152602001604051809103902060050181905550610ecd8460026122e6565b604051806060016040528085815260200184815260200183815250600685604051610ef89190613d1a565b90815260200160405180910390205f820151815f019081610f19919061422f565b506020820151816001019081610f2f919061422f565b5060408201518160020155905050600684604051610f4d9190613d1a565b90815260200160405180910390206040518060600160405290815f82018054610f7590613c38565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa190613c38565b8015610fec5780601f10610fc357610100808354040283529160200191610fec565b820191905f5260205f20905b815481529060010190602001808311610fcf57829003601f168201915b5050505050815260200160018201805461100590613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461103190613c38565b801561107c5780601f106110535761010080835404028352916020019161107c565b820191905f5260205f20905b81548152906001019060200180831161105f57829003601f168201915b5050505050815260200160028201548152505090509392505050565b6110a06121b9565b506110ac816004611848565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290613f88565b60405180910390fd5b426005826040516110fc9190613d1a565b90815260200160405180910390206008018190555061111c8160056122e6565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61114e612421565b5f600160146101000a81548160ff021916908315150217905550565b611172612d4e565b61117a6121b9565b50611185855f611848565b6111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90613f20565b60405180910390fd5b6111cd84612582565b6111d683612797565b6111df8561066e565b15611220575f6111ee866119fc565b90506111fe81602001518661282d565b61120c816040015185612aaa565b61121a816060015184612af4565b506114ff565b6040518060800160405280868152602001858152602001848152602001838152506003866040516112519190613d1a565b90815260200160405180910390205f820151815f019081611272919061422f565b506020820151816001015f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003019080519060200190611368929190612d88565b5050506040820151816005015f820151815f015f820151815f01556020820151816001015550506020820151816002015f820151815f01556020820151816001015550506040820151816004015f820151815f01556020820151816001015550506060820151816006015f820151815f01556020820151816001015550505050606082015181600d015f820151815f0155602082015181600101556040820151816002015560608201518160030155505090505060045f856040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f90919091909150908161148c919061422f565b5060045f856020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f9091909190915090816114fd919061422f565b505b60038560405161150f9190613d1a565b90815260200160405180910390206040518060800160405290815f8201805461153790613c38565b80601f016020809104026020016040519081016040528092919081815260200182805461156390613c38565b80156115ae5780601f10611585576101008083540402835291602001916115ae565b820191905f5260205f20905b81548152906001019060200180831161159157829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820180548060200260200160405190810160405280929190818152602001828054801561174757602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116116fe575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050949350505050565b5f6118528361066e565b611884575f600a811115611869576118686132ae565b5b82600a81111561187c5761187b6132ae565b5b1490506118da565b81600a811115611897576118966132ae565b5b6005846040516118a79190613d1a565b90815260200160405180910390205f015f9054906101000a900460ff16600a8111156118d6576118d56132ae565b5b1490505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611910612cbb565b6005826040516119209190613d1a565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a81111561195d5761195c6132ae565b5b600a81111561196f5761196e6132ae565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b611a04612d4e565b600382604051611a149190613d1a565b90815260200160405180910390206040518060800160405290815f82018054611a3c90613c38565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6890613c38565b8015611ab35780601f10611a8a57610100808354040283529160200191611ab3565b820191905f5260205f20905b815481529060010190602001808311611a9657829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201805480602002602001604051908101604052809291908181526020018280548015611c4c57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c03575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050919050565b611d526121b9565b50611d5e816004611848565b611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490613f88565b60405180910390fd5b42600582604051611dae9190613d1a565b9081526020016040518091039020600d0181905550611dce81600a6122e6565b50565b611dd96121b9565b50611de5816002611848565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613cc2565b60405180910390fd5b42600582604051611e359190613d1a565b9081526020016040518091039020600c0181905550611e558160096122e6565b50565b611e60612cbb565b611e686121b9565b50611e728261066e565b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613d7a565b60405180910390fd5b5f600583604051611ec29190613d1a565b90815260200160405180910390206001015414611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b90614348565b60405180910390fd5b42600583604051611f259190613d1a565b908152602001604051809103902060010181905550611f438261236a565b600582604051611f539190613d1a565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115611f9057611f8f6132ae565b5b600a811115611fa257611fa16132ae565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b612037612421565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c906143d6565b60405180910390fd5b6120ae8161249f565b50565b6120b9612421565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e90614464565b60405180910390fd5b600160149054906101000a900460ff16612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d906144f2565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090614464565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612289612c1e565b73ffffffffffffffffffffffffffffffffffffffff16146122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d690614580565b60405180910390fd5b6001905090565b806005836040516122f79190613d1a565b90815260200160405180910390205f015f6101000a81548160ff0219169083600a811115612328576123276132ae565b5b02179055507f10ca3d89184491f5d8de422bd36534abe6eb4b4aa1429a261bdb5ff1dd9ac386828260405161235e9291906145e5565b60405180910390a15050565b5f60058260405161237b9190613d1a565b908152602001604051809103902060010154141580156123bc57505f6005826040516123a79190613d1a565b90815260200160405180910390206002015414155b156123f757426005826040516123d29190613d1a565b9081526020016040518091039020600401819055506123f28160016122e6565b61241e565b426005826040516124089190613d1a565b9081526020016040518091039020600301819055505b50565b612429612c1e565b73ffffffffffffffffffffffffffffffffffffffff1661244761111f565b73ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124949061465d565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16036125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb906146c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff1603612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061472d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff16036126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614795565b60405180910390fd5b5f8160600151511161271e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612715906147fd565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1603612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b90614865565b60405180910390fd5b50565b5f815f015160200151146127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d7906148cd565b60405180910390fd5b5f8160600151602001511461282a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282190614935565b60405180910390fd5b50565b806040015173ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff16146128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a9061499d565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614612919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291090614a05565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff16825f015173ffffffffffffffffffffffffffffffffffffffff161461298d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298490614a6d565b60405180910390fd5b806060015151826060015151146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090614ad5565b60405180910390fd5b5f5b826060015151811015612aa557816060015181815181106129ff576129fe614af3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1683606001518281518110612a3457612a33614af3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990614b6a565b60405180910390fd5b8080612a9d90614b88565b9150506129db565b505050565b612aba825f0151825f0151612c25565b612acc82602001518260200151612c25565b612ade82604001518260400151612c25565b612af082606001518260600151612c25565b5050565b805f0151825f015114612b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3390614c19565b60405180910390fd5b8060200151826020015114612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614c81565b60405180910390fd5b8060400151826040015114612bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc790614ce9565b60405180910390fd5b8060600151826060015114612c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1190614d51565b60405180910390fd5b5050565b5f33905090565b805f0151825f015114612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6490614db9565b60405180910390fd5b8060200151826020015114612cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cae90614e21565b60405180910390fd5b5050565b604051806101c001604052805f600a811115612cda57612cd96132ae565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806060016040528060608152602001606081526020015f81525090565b604051806080016040528060608152602001612d68612e0f565b8152602001612d75612e76565b8152602001612d82612eb6565b81525090565b828054828255905f5260205f20908101928215612dfe579160200282015b82811115612dfd578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612da6565b5b509050612e0b9190612eda565b5090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060800160405280612e89612ef5565b8152602001612e96612ef5565b8152602001612ea3612ef5565b8152602001612eb0612ef5565b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5b80821115612ef1575f815f905550600101612edb565b5090565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f4782612f1e565b9050919050565b612f5781612f3d565b8114612f61575f80fd5b50565b5f81359050612f7281612f4e565b92915050565b5f60208284031215612f8d57612f8c612f16565b5b5f612f9a84828501612f64565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613003578082015181840152602081019050612fe8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61302882612fcc565b6130328185612fd6565b9350613042818560208601612fe6565b61304b8161300e565b840191505092915050565b5f613061838361301e565b905092915050565b5f602082019050919050565b5f61307f82612fa3565b6130898185612fad565b93508360208202850161309b85612fbd565b805f5b858110156130d657848403895281516130b78582613056565b94506130c283613069565b925060208a0199505060018101905061309e565b50829750879550505050505092915050565b5f6020820190508181035f8301526131008184613075565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6131468261300e565b810181811067ffffffffffffffff8211171561316557613164613110565b5b80604052505050565b5f613177612f0d565b9050613183828261313d565b919050565b5f67ffffffffffffffff8211156131a2576131a1613110565b5b6131ab8261300e565b9050602081019050919050565b828183375f83830152505050565b5f6131d86131d384613188565b61316e565b9050828152602081018484840111156131f4576131f361310c565b5b6131ff8482856131b8565b509392505050565b5f82601f83011261321b5761321a613108565b5b813561322b8482602086016131c6565b91505092915050565b5f6020828403121561324957613248612f16565b5b5f82013567ffffffffffffffff81111561326657613265612f1a565b5b61327284828501613207565b91505092915050565b5f8115159050919050565b61328f8161327b565b82525050565b5f6020820190506132a85f830184613286565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106132ec576132eb6132ae565b5b50565b5f8190506132fc826132db565b919050565b5f61330b826132ef565b9050919050565b61331b81613301565b82525050565b5f819050919050565b61333381613321565b82525050565b6101c082015f82015161334e5f850182613312565b506020820151613361602085018261332a565b506040820151613374604085018261332a565b506060820151613387606085018261332a565b50608082015161339a608085018261332a565b5060a08201516133ad60a085018261332a565b5060c08201516133c060c085018261332a565b5060e08201516133d360e085018261332a565b506101008201516133e861010085018261332a565b506101208201516133fd61012085018261332a565b5061014082015161341261014085018261332a565b5061016082015161342761016085018261332a565b5061018082015161343c61018085018261332a565b506101a08201516134516101a085018261332a565b50505050565b5f6101c08201905061346b5f830184613339565b92915050565b5f606083015f8301518482035f86015261348b828261301e565b915050602083015184820360208601526134a5828261301e565b91505060408301516134ba604086018261332a565b508091505092915050565b5f6020820190508181035f8301526134dd8184613471565b905092915050565b6134ee81613321565b82525050565b5f6020820190506135075f8301846134e5565b92915050565b61351681613321565b8114613520575f80fd5b50565b5f813590506135318161350d565b92915050565b5f805f6060848603121561354e5761354d612f16565b5b5f84013567ffffffffffffffff81111561356b5761356a612f1a565b5b61357786828701613207565b935050602084013567ffffffffffffffff81111561359857613597612f1a565b5b6135a486828701613207565b92505060406135b586828701613523565b9150509250925092565b6135c881612f3d565b82525050565b5f6020820190506135e15f8301846135bf565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561360957613608613110565b5b602082029050602081019050919050565b5f80fd5b5f61363061362b846135ef565b61316e565b905080838252602082019050602084028301858111156136535761365261361a565b5b835b8181101561367c57806136688882612f64565b845260208401935050602081019050613655565b5050509392505050565b5f82601f83011261369a57613699613108565b5b81356136aa84826020860161361e565b91505092915050565b5f608082840312156136c8576136c76135e7565b5b6136d2608061316e565b90505f6136e184828501612f64565b5f8301525060206136f484828501612f64565b602083015250604061370884828501612f64565b604083015250606082013567ffffffffffffffff81111561372c5761372b6135eb565b5b61373884828501613686565b60608301525092915050565b5f60408284031215613759576137586135e7565b5b613763604061316e565b90505f61377284828501613523565b5f83015250602061378584828501613523565b60208301525092915050565b5f61010082840312156137a7576137a66135e7565b5b6137b1608061316e565b90505f6137c084828501613744565b5f8301525060406137d384828501613744565b60208301525060806137e784828501613744565b60408301525060c06137fb84828501613744565b60608301525092915050565b5f6080828403121561381c5761381b6135e7565b5b613826608061316e565b90505f61383584828501613523565b5f83015250602061384884828501613523565b602083015250604061385c84828501613523565b604083015250606061387084828501613523565b60608301525092915050565b5f805f806101c0858703121561389557613894612f16565b5b5f85013567ffffffffffffffff8111156138b2576138b1612f1a565b5b6138be87828801613207565b945050602085013567ffffffffffffffff8111156138df576138de612f1a565b5b6138eb878288016136b3565b93505060406138fc87828801613791565b92505061014061390e87828801613807565b91505092959194509250565b61392381612f3d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61395d838361391a565b60208301905092915050565b5f602082019050919050565b5f61397f82613929565b6139898185613933565b935061399483613943565b805f5b838110156139c45781516139ab8882613952565b97506139b683613969565b925050600181019050613997565b5085935050505092915050565b5f608083015f8301516139e65f86018261391a565b5060208301516139f9602086018261391a565b506040830151613a0c604086018261391a565b5060608301518482036060860152613a248282613975565b9150508091505092915050565b604082015f820151613a455f85018261332a565b506020820151613a58602085018261332a565b50505050565b61010082015f820151613a735f850182613a31565b506020820151613a866040850182613a31565b506040820151613a996080850182613a31565b506060820151613aac60c0850182613a31565b50505050565b608082015f820151613ac65f85018261332a565b506020820151613ad9602085018261332a565b506040820151613aec604085018261332a565b506060820151613aff606085018261332a565b50505050565b5f6101c083015f8301518482035f860152613b20828261301e565b91505060208301518482036020860152613b3a82826139d1565b9150506040830151613b4f6040860182613a5e565b506060830151613b63610140860182613ab2565b508091505092915050565b5f6020820190508181035f830152613b868184613b05565b905092915050565b600b8110613b9a575f80fd5b50565b5f81359050613bab81613b8e565b92915050565b5f8060408385031215613bc757613bc6612f16565b5b5f83013567ffffffffffffffff811115613be457613be3612f1a565b5b613bf085828601613207565b9250506020613c0185828601613b9d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c4f57607f821691505b602082108103613c6257613c61613c0b565b5b50919050565b5f82825260208201905092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613cac601083613c68565b9150613cb782613c78565b602082019050919050565b5f6020820190508181035f830152613cd981613ca0565b9050919050565b5f81905092915050565b5f613cf482612fcc565b613cfe8185613ce0565b9350613d0e818560208601612fe6565b80840191505092915050565b5f613d258284613cea565b915081905092915050565b7f4465616c20646f6573206e6f74206578697374000000000000000000000000005f82015250565b5f613d64601383613c68565b9150613d6f82613d30565b602082019050919050565b5f6020820190508181035f830152613d9181613d58565b9050919050565b7f4a432068617320616c72656164792061677265656400000000000000000000005f82015250565b5f613dcc601583613c68565b9150613dd782613d98565b602082019050919050565b5f6020820190508181035f830152613df981613dc0565b9050919050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f613e34600a83613c68565b9150613e3f82613e00565b602082019050919050565b5f6020820190508181035f830152613e6181613e28565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613e9f82613321565b9150613eaa83613321565b9250828202613eb881613321565b91508282048414831517613ecf57613ece613e68565b5b5092915050565b7f4465616c4e65676f74696174696e6700000000000000000000000000000000005f82015250565b5f613f0a600f83613c68565b9150613f1582613ed6565b602082019050919050565b5f6020820190508181035f830152613f3781613efe565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f613f72600e83613c68565b9150613f7d82613f3e565b602082019050919050565b5f6020820190508181035f830152613f9f81613f66565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f614000602e83613c68565b915061400b82613fa6565b604082019050919050565b5f6020820190508181035f83015261402d81613ff4565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61406c61406761406284614034565b614049565b61403d565b9050919050565b61407c81614052565b82525050565b5f6020820190506140955f830184614073565b92915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026140f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826140bc565b61410186836140bc565b95508019841693508086168417925050509392505050565b5f61413361412e61412984613321565b614049565b613321565b9050919050565b5f819050919050565b61414c83614119565b6141606141588261413a565b8484546140c8565b825550505050565b5f90565b614174614168565b61417f818484614143565b505050565b5b818110156141a2576141975f8261416c565b600181019050614185565b5050565b601f8211156141e7576141b88161409b565b6141c1846140ad565b810160208510156141d0578190505b6141e46141dc856140ad565b830182614184565b50505b505050565b5f82821c905092915050565b5f6142075f19846008026141ec565b1980831691505092915050565b5f61421f83836141f8565b9150826002028217905092915050565b61423882612fcc565b67ffffffffffffffff81111561425157614250613110565b5b61425b8254613c38565b6142668282856141a6565b5f60209050601f831160018114614297575f8415614285578287015190505b61428f8582614214565b8655506142f6565b601f1984166142a58661409b565b5f5b828110156142cc578489015182556001820191506020850194506020810190506142a7565b868310156142e957848901516142e5601f8916826141f8565b8355505b6001600288020188555050505b505050505050565b7f52502068617320616c72656164792061677265656400000000000000000000005f82015250565b5f614332601583613c68565b915061433d826142fe565b602082019050919050565b5f6020820190508181035f83015261435f81614326565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143c0602683613c68565b91506143cb82614366565b604082019050919050565b5f6020820190508181035f8301526143ed816143b4565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f61444e603583613c68565b9150614459826143f4565b604082019050919050565b5f6020820190508181035f83015261447b81614442565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f6144dc603983613c68565b91506144e782614482565b604082019050919050565b5f6020820190508181035f830152614509816144d0565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f61456a603b83613c68565b915061457582614510565b604082019050919050565b5f6020820190508181035f8301526145978161455e565b9050919050565b5f6145a882612fcc565b6145b28185613c68565b93506145c2818560208601612fe6565b6145cb8161300e565b840191505092915050565b6145df81613301565b82525050565b5f6040820190508181035f8301526145fd818561459e565b905061460c60208301846145d6565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614647602083613c68565b915061465282614613565b602082019050919050565b5f6020820190508181035f8301526146748161463b565b9050919050565b7f5250206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f6146af600a83613c68565b91506146ba8261467b565b602082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f4a43206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f614717600a83613c68565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b7f536f6c766572206d697373696e670000000000000000000000000000000000005f82015250565b5f61477f600e83613c68565b915061478a8261474b565b602082019050919050565b5f6020820190508181035f8301526147ac81614773565b9050919050565b7f4d65646961746f7273203c3d20300000000000000000000000000000000000005f82015250565b5f6147e7600e83613c68565b91506147f2826147b3565b602082019050919050565b5f6020820190508181035f830152614814816147db565b9050919050565b7f5250202f204a432073616d6500000000000000000000000000000000000000005f82015250565b5f61484f600c83613c68565b915061485a8261481b565b602082019050919050565b5f6020820190508181035f83015261487c81614843565b9050919050565b7f4167726565206465706f736974206d75737420626520300000000000000000005f82015250565b5f6148b7601783613c68565b91506148c282614883565b602082019050919050565b5f6020820190508181035f8301526148e4816148ab565b9050919050565b7f4d656469617465206465706f736974206d7573742062652030000000000000005f82015250565b5f61491f601983613c68565b915061492a826148eb565b602082019050919050565b5f6020820190508181035f83015261494c81614913565b9050919050565b7f52500000000000000000000000000000000000000000000000000000000000005f82015250565b5f614987600283613c68565b915061499282614953565b602082019050919050565b5f6020820190508181035f8301526149b48161497b565b9050919050565b7f4a430000000000000000000000000000000000000000000000000000000000005f82015250565b5f6149ef600283613c68565b91506149fa826149bb565b602082019050919050565b5f6020820190508181035f830152614a1c816149e3565b9050919050565b7f536f6c76657200000000000000000000000000000000000000000000000000005f82015250565b5f614a57600683613c68565b9150614a6282614a23565b602082019050919050565b5f6020820190508181035f830152614a8481614a4b565b9050919050565b7f4d65646961746f727300000000000000000000000000000000000000000000005f82015250565b5f614abf600983613c68565b9150614aca82614a8b565b602082019050919050565b5f6020820190508181035f830152614aec81614ab3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d65646961746f720000000000000000000000000000000000000000000000005f82015250565b5f614b54600883613c68565b9150614b5f82614b20565b602082019050919050565b5f6020820190508181035f830152614b8181614b48565b9050919050565b5f614b9282613321565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc457614bc3613e68565b5b600182019050919050565b7f50726963650000000000000000000000000000000000000000000000000000005f82015250565b5f614c03600583613c68565b9150614c0e82614bcf565b602082019050919050565b5f6020820190508181035f830152614c3081614bf7565b9050919050565b7f5061796d656e74000000000000000000000000000000000000000000000000005f82015250565b5f614c6b600783613c68565b9150614c7682614c37565b602082019050919050565b5f6020820190508181035f830152614c9881614c5f565b9050919050565b7f526573756c7473000000000000000000000000000000000000000000000000005f82015250565b5f614cd3600783613c68565b9150614cde82614c9f565b602082019050919050565b5f6020820190508181035f830152614d0081614cc7565b9050919050565b7f4d6564696174696f6e00000000000000000000000000000000000000000000005f82015250565b5f614d3b600983613c68565b9150614d4682614d07565b602082019050919050565b5f6020820190508181035f830152614d6881614d2f565b9050919050565b7f54696d656f7574000000000000000000000000000000000000000000000000005f82015250565b5f614da3600783613c68565b9150614dae82614d6f565b602082019050919050565b5f6020820190508181035f830152614dd081614d97565b9050919050565b7f436f6c6c61746572616c000000000000000000000000000000000000000000005f82015250565b5f614e0b600a83613c68565b9150614e1682614dd7565b602082019050919050565b5f6020820190508181035f830152614e3881614dff565b905091905056fea2646970667358221220ada7ece54df25add44f8dcf4c4ae4846f75f57229924b93ae69bed7236d1a78d64736f6c63430008150033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"DealStateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeJobCreator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeResourceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"ensureDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getAgreement\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"party\",\"type\":\"address\"}],\"name\":\"getDealsForParty\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getJobCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResultsCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"hasDeal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"isState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600260146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61500380620001425f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80638224ce5f116100f7578063cdd82d1d11610095578063e850be371161006f578063e850be37146104d9578063ec95b967146104f5578063f2fde38b14610525578063f3d3d44814610541576101a7565b8063cdd82d1d1461045d578063e70791801461048d578063e7b957d1146104bd576101a7565b8063a4702958116100d1578063a4702958146103d5578063a6370b0e146103df578063b050e74b1461040f578063c57380a21461043f576101a7565b80638224ce5f1461036b578063824518aa1461039b5780638da5cb5b146103b7576101a7565b8063498cc70d1161016457806373db5c6a1161013e57806373db5c6a146102f9578063795f9abf1461032957806380ffdfe0146103455780638129fc1c14610361576101a7565b8063498cc70d146102a3578063511a9f68146102d3578063715018a6146102ef576101a7565b806311d5af33146101ab5780632244ad2b146101db578063297f9e551461020b5780633955548e146102275780633c4135da1461025757806346834d1e14610287575b5f80fd5b6101c560048036038101906101c091906130bc565b61055d565b6040516101d2919061322c565b60405180910390f35b6101f560048036038101906101f09190613378565b61066e565b60405161020291906133d9565b60405180910390f35b61022560048036038101906102209190613378565b610685565b005b610241600480360381019061023c9190613425565b61070c565b60405161024e919061355a565b60405180910390f35b610271600480360381019061026c9190613378565b610a10565b60405161027e919061370b565b60405180910390f35b6102a1600480360381019061029c9190613378565b610be7565b005b6102bd60048036038101906102b89190613378565b610c6e565b6040516102ca919061355a565b60405180910390f35b6102ed60048036038101906102e89190613378565b610e5f565b005b6102f7610ee6565b005b610313600480360381019061030e9190613378565b610ef9565b6040516103209190613734565b60405180910390f35b610343600480360381019061033e9190613378565b610f51565b005b61035f600480360381019061035a9190613378565b610fd7565b005b61036961105e565b005b61038560048036038101906103809190613378565b611195565b6040516103929190613734565b60405180910390f35b6103b560048036038101906103b09190613378565b6111d5565b005b6103bf61125c565b6040516103cc919061375c565b60405180910390f35b6103dd611283565b005b6103f960048036038101906103f49190613a0a565b6112a7565b6040516104069190613cfc565b60405180910390f35b61042960048036038101906104249190613d3f565b611985565b60405161043691906133d9565b60405180910390f35b610447611a1d565b604051610454919061375c565b60405180910390f35b61047760048036038101906104729190613378565b611a45565b604051610484919061370b565b60405180910390f35b6104a760048036038101906104a29190613378565b611b39565b6040516104b49190613cfc565b60405180910390f35b6104d760048036038101906104d29190613378565b611e87565b005b6104f360048036038101906104ee9190613378565b611f0e565b005b61050f600480360381019061050a9190613378565b611f95565b60405161051c919061370b565b60405180910390f35b61053f600480360381019061053a91906130bc565b61216c565b005b61055b600480360381019061055691906130bc565b6121ee565b005b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610663578382905f5260205f200180546105d890613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613dc6565b801561064f5780601f106106265761010080835404028352916020019161064f565b820191905f5260205f20905b81548152906001019060200180831161063257829003601f168201915b5050505050815260200190600101906105bb565b505050509050919050565b5f8061067983611b39565b5f015151119050919050565b61068d6122f6565b50610699816002611985565b6106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90613e50565b60405180910390fd5b426005826040516106e99190613ea8565b908152602001604051809103902060060181905550610709816003612423565b50565b610714612df8565b61071c6122f6565b50610728856001611985565b610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90613f08565b60405180910390fd5b426005866040516107789190613ea8565b908152602001604051809103902060050181905550610798856002612423565b6040518060800160405280868152602001858152602001848152602001838152506006866040516107c99190613ea8565b90815260200160405180910390205f820151815f0190816107ea91906140c3565b50602082015181600101908161080091906140c3565b50604082015181600201908161081691906140c3565b50606082015181600301559050506006856040516108349190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461085c90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461088890613dc6565b80156108d35780601f106108aa576101008083540402835291602001916108d3565b820191905f5260205f20905b8154815290600101906020018083116108b657829003601f168201915b505050505081526020016001820180546108ec90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461091890613dc6565b80156109635780601f1061093a57610100808354040283529160200191610963565b820191905f5260205f20905b81548152906001019060200180831161094657829003601f168201915b5050505050815260200160028201805461097c90613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890613dc6565b80156109f35780601f106109ca576101008083540402835291602001916109f3565b820191905f5260205f20905b8154815290600101906020018083116109d657829003601f168201915b505050505081526020016003820154815250509050949350505050565b610a18612e1f565b610a206122f6565b50610a2a8261066e565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a60906141dc565b60405180910390fd5b5f600583604051610a7a9190613ea8565b90815260200160405180910390206002015414610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390614244565b60405180910390fd5b42600583604051610add9190613ea8565b908152602001604051809103902060020181905550610afb826124a7565b600582604051610b0b9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115610b4857610b4761357a565b5b600a811115610b5a57610b5961357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b610bef6122f6565b50610bfb816002611985565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613e50565b60405180910390fd5b42600582604051610c4b9190613ea8565b908152602001604051809103902060070181905550610c6b816004612423565b50565b610c76612df8565b600682604051610c869190613ea8565b90815260200160405180910390206040518060800160405290815f82018054610cae90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90613dc6565b8015610d255780601f10610cfc57610100808354040283529160200191610d25565b820191905f5260205f20905b815481529060010190602001808311610d0857829003601f168201915b50505050508152602001600182018054610d3e90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6a90613dc6565b8015610db55780601f10610d8c57610100808354040283529160200191610db5565b820191905f5260205f20905b815481529060010190602001808311610d9857829003601f168201915b50505050508152602001600282018054610dce90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfa90613dc6565b8015610e455780601f10610e1c57610100808354040283529160200191610e45565b820191905f5260205f20905b815481529060010190602001808311610e2857829003601f168201915b505050505081526020016003820154815250509050919050565b610e676122f6565b50610e73816001611985565b610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613f08565b60405180910390fd5b42600582604051610ec39190613ea8565b9081526020016040518091039020600b0181905550610ee3816008612423565b50565b610eee61255e565b610ef75f6125dc565b565b5f600682604051610f0a9190613ea8565b908152602001604051809103902060030154600383604051610f2c9190613ea8565b9081526020016040518091039020600d015f0154610f4a919061428f565b9050919050565b610f596122f6565b50610f64815f611985565b610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9061431a565b60405180910390fd5b42600582604051610fb49190613ea8565b9081526020016040518091039020600a0181905550610fd4816007612423565b50565b610fdf6122f6565b50610feb816004611985565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614382565b60405180910390fd5b4260058260405161103b9190613ea8565b90815260200160405180910390206009018190555061105b816006612423565b50565b5f600160169054906101000a900460ff16159050808015611090575060018060159054906101000a900460ff1660ff16105b806110be575061109f3061269d565b1580156110bd575060018060159054906101000a900460ff1660ff16145b5b6110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614410565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156111395760018060166101000a81548160ff0219169083151502179055505b8015611192575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111899190614473565b60405180910390a15b50565b5f61119f82610ef9565b6003836040516111af9190613ea8565b9081526020016040518091039020600d01600201546111ce919061428f565b9050919050565b6111dd6122f6565b506111e9816004611985565b611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614382565b60405180910390fd5b426005826040516112399190613ea8565b908152602001604051809103902060080181905550611259816005612423565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61128b61255e565b5f600160146101000a81548160ff021916908315150217905550565b6112af612e92565b6112b76122f6565b506112c2855f611985565b611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f89061431a565b60405180910390fd5b61130a846126bf565b611313836128d4565b61131c8561066e565b1561135d575f61132b86611b39565b905061133b81602001518661296a565b611349816040015185612be7565b611357816060015184612c31565b5061163c565b60405180608001604052808681526020018581526020018481526020018381525060038660405161138e9190613ea8565b90815260200160405180910390205f820151815f0190816113af91906140c3565b506020820151816001015f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190805190602001906114a5929190612ecc565b5050506040820151816005015f820151815f015f820151815f01556020820151816001015550506020820151816002015f820151815f01556020820151816001015550506040820151816004015f820151815f01556020820151816001015550506060820151816006015f820151815f01556020820151816001015550505050606082015181600d015f820151815f0155602082015181600101556040820151816002015560608201518160030155505090505060045f856040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f9091909190915090816115c991906140c3565b5060045f856020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f90919091909150908161163a91906140c3565b505b60038560405161164c9190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461167490613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546116a090613dc6565b80156116eb5780601f106116c2576101008083540402835291602001916116eb565b820191905f5260205f20905b8154815290600101906020018083116116ce57829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820180548060200260200160405190810160405280929190818152602001828054801561188457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161183b575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050949350505050565b5f61198f8361066e565b6119c1575f600a8111156119a6576119a561357a565b5b82600a8111156119b9576119b861357a565b5b149050611a17565b81600a8111156119d4576119d361357a565b5b6005846040516119e49190613ea8565b90815260200160405180910390205f015f9054906101000a900460ff16600a811115611a1357611a1261357a565b5b1490505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4d612e1f565b600582604051611a5d9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115611a9a57611a9961357a565b5b600a811115611aac57611aab61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b611b41612e92565b600382604051611b519190613ea8565b90815260200160405180910390206040518060800160405290815f82018054611b7990613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba590613dc6565b8015611bf05780601f10611bc757610100808354040283529160200191611bf0565b820191905f5260205f20905b815481529060010190602001808311611bd357829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201805480602002602001604051908101604052809291908181526020018280548015611d8957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d40575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050919050565b611e8f6122f6565b50611e9b816004611985565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190614382565b60405180910390fd5b42600582604051611eeb9190613ea8565b9081526020016040518091039020600d0181905550611f0b81600a612423565b50565b611f166122f6565b50611f22816002611985565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613e50565b60405180910390fd5b42600582604051611f729190613ea8565b9081526020016040518091039020600c0181905550611f92816009612423565b50565b611f9d612e1f565b611fa56122f6565b50611faf8261066e565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141dc565b60405180910390fd5b5f600583604051611fff9190613ea8565b90815260200160405180910390206001015414612051576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612048906144d6565b60405180910390fd5b426005836040516120629190613ea8565b908152602001604051809103902060010181905550612080826124a7565b6005826040516120909190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a8111156120cd576120cc61357a565b5b600a8111156120df576120de61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b61217461255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614564565b60405180910390fd5b6121eb816125dc565b50565b6121f661255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b906145f2565b60405180910390fd5b600160149054906101000a900460ff166122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614680565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d906145f2565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123c6612d5b565b73ffffffffffffffffffffffffffffffffffffffff161461241c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124139061470e565b60405180910390fd5b6001905090565b806005836040516124349190613ea8565b90815260200160405180910390205f015f6101000a81548160ff0219169083600a8111156124655761246461357a565b5b02179055507f10ca3d89184491f5d8de422bd36534abe6eb4b4aa1429a261bdb5ff1dd9ac386828260405161249b929190614773565b60405180910390a15050565b5f6005826040516124b89190613ea8565b908152602001604051809103902060010154141580156124f957505f6005826040516124e49190613ea8565b90815260200160405180910390206002015414155b15612534574260058260405161250f9190613ea8565b90815260200160405180910390206004018190555061252f816001612423565b61255b565b426005826040516125459190613ea8565b9081526020016040518091039020600301819055505b50565b612566612d5b565b73ffffffffffffffffffffffffffffffffffffffff1661258461125c565b73ffffffffffffffffffffffffffffffffffffffff16146125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d1906147eb565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614853565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16036127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a906148bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1603612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90614923565b60405180910390fd5b5f8160600151511161285b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128529061498b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16036128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c8906149f3565b60405180910390fd5b50565b5f815f0151602001511461291d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291490614a5b565b60405180910390fd5b5f81606001516020015114612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614ac3565b60405180910390fd5b50565b806040015173ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff16146129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614b2b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614b93565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff16825f015173ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614bfb565b60405180910390fd5b80606001515182606001515114612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614c63565b60405180910390fd5b5f5b826060015151811015612be25781606001518181518110612b3c57612b3b614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1683606001518281518110612b7157612b70614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc690614cf8565b60405180910390fd5b8080612bda90614d16565b915050612b18565b505050565b612bf7825f0151825f0151612d62565b612c0982602001518260200151612d62565b612c1b82604001518260400151612d62565b612c2d82606001518260600151612d62565b5050565b805f0151825f015114612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090614da7565b60405180910390fd5b8060200151826020015114612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba90614e0f565b60405180910390fd5b8060400151826040015114612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614e77565b60405180910390fd5b8060600151826060015114612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614edf565b60405180910390fd5b5050565b5f33905090565b805f0151825f015114612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da190614f47565b60405180910390fd5b8060200151826020015114612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90614faf565b60405180910390fd5b5050565b60405180608001604052806060815260200160608152602001606081526020015f81525090565b604051806101c001604052805f600a811115612e3e57612e3d61357a565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806080016040528060608152602001612eac612f53565b8152602001612eb9612fba565b8152602001612ec6612ffa565b81525090565b828054828255905f5260205f20908101928215612f42579160200282015b82811115612f41578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612eea565b5b509050612f4f919061301e565b5090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060800160405280612fcd613039565b8152602001612fda613039565b8152602001612fe7613039565b8152602001612ff4613039565b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5b80821115613035575f815f90555060010161301f565b5090565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308b82613062565b9050919050565b61309b81613081565b81146130a5575f80fd5b50565b5f813590506130b681613092565b92915050565b5f602082840312156130d1576130d061305a565b5b5f6130de848285016130a8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561314757808201518184015260208101905061312c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61316c82613110565b613176818561311a565b935061318681856020860161312a565b61318f81613152565b840191505092915050565b5f6131a58383613162565b905092915050565b5f602082019050919050565b5f6131c3826130e7565b6131cd81856130f1565b9350836020820285016131df85613101565b805f5b8581101561321a57848403895281516131fb858261319a565b9450613206836131ad565b925060208a019950506001810190506131e2565b50829750879550505050505092915050565b5f6020820190508181035f83015261324481846131b9565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61328a82613152565b810181811067ffffffffffffffff821117156132a9576132a8613254565b5b80604052505050565b5f6132bb613051565b90506132c78282613281565b919050565b5f67ffffffffffffffff8211156132e6576132e5613254565b5b6132ef82613152565b9050602081019050919050565b828183375f83830152505050565b5f61331c613317846132cc565b6132b2565b90508281526020810184848401111561333857613337613250565b5b6133438482856132fc565b509392505050565b5f82601f83011261335f5761335e61324c565b5b813561336f84826020860161330a565b91505092915050565b5f6020828403121561338d5761338c61305a565b5b5f82013567ffffffffffffffff8111156133aa576133a961305e565b5b6133b68482850161334b565b91505092915050565b5f8115159050919050565b6133d3816133bf565b82525050565b5f6020820190506133ec5f8301846133ca565b92915050565b5f819050919050565b613404816133f2565b811461340e575f80fd5b50565b5f8135905061341f816133fb565b92915050565b5f805f806080858703121561343d5761343c61305a565b5b5f85013567ffffffffffffffff81111561345a5761345961305e565b5b6134668782880161334b565b945050602085013567ffffffffffffffff8111156134875761348661305e565b5b6134938782880161334b565b935050604085013567ffffffffffffffff8111156134b4576134b361305e565b5b6134c08782880161334b565b92505060606134d187828801613411565b91505092959194509250565b6134e6816133f2565b82525050565b5f608083015f8301518482035f8601526135068282613162565b915050602083015184820360208601526135208282613162565b9150506040830151848203604086015261353a8282613162565b915050606083015161354f60608601826134dd565b508091505092915050565b5f6020820190508181035f83015261357281846134ec565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106135b8576135b761357a565b5b50565b5f8190506135c8826135a7565b919050565b5f6135d7826135bb565b9050919050565b6135e7816135cd565b82525050565b6101c082015f8201516136025f8501826135de565b50602082015161361560208501826134dd565b50604082015161362860408501826134dd565b50606082015161363b60608501826134dd565b50608082015161364e60808501826134dd565b5060a082015161366160a08501826134dd565b5060c082015161367460c08501826134dd565b5060e082015161368760e08501826134dd565b5061010082015161369c6101008501826134dd565b506101208201516136b16101208501826134dd565b506101408201516136c66101408501826134dd565b506101608201516136db6101608501826134dd565b506101808201516136f06101808501826134dd565b506101a08201516137056101a08501826134dd565b50505050565b5f6101c08201905061371f5f8301846135ed565b92915050565b61372e816133f2565b82525050565b5f6020820190506137475f830184613725565b92915050565b61375681613081565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561379757613796613254565b5b602082029050602081019050919050565b5f80fd5b5f6137be6137b98461377d565b6132b2565b905080838252602082019050602084028301858111156137e1576137e06137a8565b5b835b8181101561380a57806137f688826130a8565b8452602084019350506020810190506137e3565b5050509392505050565b5f82601f8301126138285761382761324c565b5b81356138388482602086016137ac565b91505092915050565b5f6080828403121561385657613855613775565b5b61386060806132b2565b90505f61386f848285016130a8565b5f830152506020613882848285016130a8565b6020830152506040613896848285016130a8565b604083015250606082013567ffffffffffffffff8111156138ba576138b9613779565b5b6138c684828501613814565b60608301525092915050565b5f604082840312156138e7576138e6613775565b5b6138f160406132b2565b90505f61390084828501613411565b5f83015250602061391384828501613411565b60208301525092915050565b5f610100828403121561393557613934613775565b5b61393f60806132b2565b90505f61394e848285016138d2565b5f830152506040613961848285016138d2565b6020830152506080613975848285016138d2565b60408301525060c0613989848285016138d2565b60608301525092915050565b5f608082840312156139aa576139a9613775565b5b6139b460806132b2565b90505f6139c384828501613411565b5f8301525060206139d684828501613411565b60208301525060406139ea84828501613411565b60408301525060606139fe84828501613411565b60608301525092915050565b5f805f806101c08587031215613a2357613a2261305a565b5b5f85013567ffffffffffffffff811115613a4057613a3f61305e565b5b613a4c8782880161334b565b945050602085013567ffffffffffffffff811115613a6d57613a6c61305e565b5b613a7987828801613841565b9350506040613a8a8782880161391f565b925050610140613a9c87828801613995565b91505092959194509250565b613ab181613081565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f613aeb8383613aa8565b60208301905092915050565b5f602082019050919050565b5f613b0d82613ab7565b613b178185613ac1565b9350613b2283613ad1565b805f5b83811015613b52578151613b398882613ae0565b9750613b4483613af7565b925050600181019050613b25565b5085935050505092915050565b5f608083015f830151613b745f860182613aa8565b506020830151613b876020860182613aa8565b506040830151613b9a6040860182613aa8565b5060608301518482036060860152613bb28282613b03565b9150508091505092915050565b604082015f820151613bd35f8501826134dd565b506020820151613be660208501826134dd565b50505050565b61010082015f820151613c015f850182613bbf565b506020820151613c146040850182613bbf565b506040820151613c276080850182613bbf565b506060820151613c3a60c0850182613bbf565b50505050565b608082015f820151613c545f8501826134dd565b506020820151613c6760208501826134dd565b506040820151613c7a60408501826134dd565b506060820151613c8d60608501826134dd565b50505050565b5f6101c083015f8301518482035f860152613cae8282613162565b91505060208301518482036020860152613cc88282613b5f565b9150506040830151613cdd6040860182613bec565b506060830151613cf1610140860182613c40565b508091505092915050565b5f6020820190508181035f830152613d148184613c93565b905092915050565b600b8110613d28575f80fd5b50565b5f81359050613d3981613d1c565b92915050565b5f8060408385031215613d5557613d5461305a565b5b5f83013567ffffffffffffffff811115613d7257613d7161305e565b5b613d7e8582860161334b565b9250506020613d8f85828601613d2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ddd57607f821691505b602082108103613df057613def613d99565b5b50919050565b5f82825260208201905092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613e3a601083613df6565b9150613e4582613e06565b602082019050919050565b5f6020820190508181035f830152613e6781613e2e565b9050919050565b5f81905092915050565b5f613e8282613110565b613e8c8185613e6e565b9350613e9c81856020860161312a565b80840191505092915050565b5f613eb38284613e78565b915081905092915050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f613ef2600a83613df6565b9150613efd82613ebe565b602082019050919050565b5f6020820190508181035f830152613f1f81613ee6565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f47565b613f8c8683613f47565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613fc7613fc2613fbd846133f2565b613fa4565b6133f2565b9050919050565b5f819050919050565b613fe083613fad565b613ff4613fec82613fce565b848454613f53565b825550505050565b5f90565b614008613ffc565b614013818484613fd7565b505050565b5b818110156140365761402b5f82614000565b600181019050614019565b5050565b601f82111561407b5761404c81613f26565b61405584613f38565b81016020851015614064578190505b61407861407085613f38565b830182614018565b50505b505050565b5f82821c905092915050565b5f61409b5f1984600802614080565b1980831691505092915050565b5f6140b3838361408c565b9150826002028217905092915050565b6140cc82613110565b67ffffffffffffffff8111156140e5576140e4613254565b5b6140ef8254613dc6565b6140fa82828561403a565b5f60209050601f83116001811461412b575f8415614119578287015190505b61412385826140a8565b86555061418a565b601f19841661413986613f26565b5f5b828110156141605784890151825560018201915060208501945060208101905061413b565b8683101561417d5784890151614179601f89168261408c565b8355505b6001600288020188555050505b505050505050565b7f4465616c20646f6573206e6f74206578697374000000000000000000000000005f82015250565b5f6141c6601383613df6565b91506141d182614192565b602082019050919050565b5f6020820190508181035f8301526141f3816141ba565b9050919050565b7f4a432068617320616c72656164792061677265656400000000000000000000005f82015250565b5f61422e601583613df6565b9150614239826141fa565b602082019050919050565b5f6020820190508181035f83015261425b81614222565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614299826133f2565b91506142a4836133f2565b92508282026142b2816133f2565b915082820484148315176142c9576142c8614262565b5b5092915050565b7f4465616c4e65676f74696174696e6700000000000000000000000000000000005f82015250565b5f614304600f83613df6565b915061430f826142d0565b602082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f61436c600e83613df6565b915061437782614338565b602082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6143fa602e83613df6565b9150614405826143a0565b604082019050919050565b5f6020820190508181035f830152614427816143ee565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f61445d6144586144538461442e565b613fa4565b614437565b9050919050565b61446d81614443565b82525050565b5f6020820190506144865f830184614464565b92915050565b7f52502068617320616c72656164792061677265656400000000000000000000005f82015250565b5f6144c0601583613df6565b91506144cb8261448c565b602082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61454e602683613df6565b9150614559826144f4565b604082019050919050565b5f6020820190508181035f83015261457b81614542565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f6145dc603583613df6565b91506145e782614582565b604082019050919050565b5f6020820190508181035f830152614609816145d0565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61466a603983613df6565b915061467582614610565b604082019050919050565b5f6020820190508181035f8301526146978161465e565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6146f8603b83613df6565b91506147038261469e565b604082019050919050565b5f6020820190508181035f830152614725816146ec565b9050919050565b5f61473682613110565b6147408185613df6565b935061475081856020860161312a565b61475981613152565b840191505092915050565b61476d816135cd565b82525050565b5f6040820190508181035f83015261478b818561472c565b905061479a6020830184614764565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147d5602083613df6565b91506147e0826147a1565b602082019050919050565b5f6020820190508181035f830152614802816147c9565b9050919050565b7f5250206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f61483d600a83613df6565b915061484882614809565b602082019050919050565b5f6020820190508181035f83015261486a81614831565b9050919050565b7f4a43206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f6148a5600a83613df6565b91506148b082614871565b602082019050919050565b5f6020820190508181035f8301526148d281614899565b9050919050565b7f536f6c766572206d697373696e670000000000000000000000000000000000005f82015250565b5f61490d600e83613df6565b9150614918826148d9565b602082019050919050565b5f6020820190508181035f83015261493a81614901565b9050919050565b7f4d65646961746f7273203c3d20300000000000000000000000000000000000005f82015250565b5f614975600e83613df6565b915061498082614941565b602082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f5250202f204a432073616d6500000000000000000000000000000000000000005f82015250565b5f6149dd600c83613df6565b91506149e8826149a9565b602082019050919050565b5f6020820190508181035f830152614a0a816149d1565b9050919050565b7f4167726565206465706f736974206d75737420626520300000000000000000005f82015250565b5f614a45601783613df6565b9150614a5082614a11565b602082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f4d656469617465206465706f736974206d7573742062652030000000000000005f82015250565b5f614aad601983613df6565b9150614ab882614a79565b602082019050919050565b5f6020820190508181035f830152614ada81614aa1565b9050919050565b7f52500000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b15600283613df6565b9150614b2082614ae1565b602082019050919050565b5f6020820190508181035f830152614b4281614b09565b9050919050565b7f4a430000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b7d600283613df6565b9150614b8882614b49565b602082019050919050565b5f6020820190508181035f830152614baa81614b71565b9050919050565b7f536f6c76657200000000000000000000000000000000000000000000000000005f82015250565b5f614be5600683613df6565b9150614bf082614bb1565b602082019050919050565b5f6020820190508181035f830152614c1281614bd9565b9050919050565b7f4d65646961746f727300000000000000000000000000000000000000000000005f82015250565b5f614c4d600983613df6565b9150614c5882614c19565b602082019050919050565b5f6020820190508181035f830152614c7a81614c41565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d65646961746f720000000000000000000000000000000000000000000000005f82015250565b5f614ce2600883613df6565b9150614ced82614cae565b602082019050919050565b5f6020820190508181035f830152614d0f81614cd6565b9050919050565b5f614d20826133f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5257614d51614262565b5b600182019050919050565b7f50726963650000000000000000000000000000000000000000000000000000005f82015250565b5f614d91600583613df6565b9150614d9c82614d5d565b602082019050919050565b5f6020820190508181035f830152614dbe81614d85565b9050919050565b7f5061796d656e74000000000000000000000000000000000000000000000000005f82015250565b5f614df9600783613df6565b9150614e0482614dc5565b602082019050919050565b5f6020820190508181035f830152614e2681614ded565b9050919050565b7f526573756c7473000000000000000000000000000000000000000000000000005f82015250565b5f614e61600783613df6565b9150614e6c82614e2d565b602082019050919050565b5f6020820190508181035f830152614e8e81614e55565b9050919050565b7f4d6564696174696f6e00000000000000000000000000000000000000000000005f82015250565b5f614ec9600983613df6565b9150614ed482614e95565b602082019050919050565b5f6020820190508181035f830152614ef681614ebd565b9050919050565b7f54696d656f7574000000000000000000000000000000000000000000000000005f82015250565b5f614f31600783613df6565b9150614f3c82614efd565b602082019050919050565b5f6020820190508181035f830152614f5e81614f25565b9050919050565b7f436f6c6c61746572616c000000000000000000000000000000000000000000005f82015250565b5f614f99600a83613df6565b9150614fa482614f65565b602082019050919050565b5f6020820190508181035f830152614fc681614f8d565b905091905056fea2646970667358221220ebd9e754409be1374e872691ba0704d73f23ad73d92a8ea2da9d10284faf1c8864736f6c63430008150033", } // StorageABI is the input ABI used to generate the binding from. @@ -422,7 +423,7 @@ func (_Storage *StorageCallerSession) GetJobCost(dealId string) (*big.Int, error // GetResult is a free data retrieval call binding the contract method 0x498cc70d. // -// Solidity: function getResult(string dealId) view returns((string,string,uint256)) +// Solidity: function getResult(string dealId) view returns((string,string,string,uint256)) func (_Storage *StorageCaller) GetResult(opts *bind.CallOpts, dealId string) (SharedStructsResult, error) { var out []interface{} err := _Storage.contract.Call(opts, &out, "getResult", dealId) @@ -439,14 +440,14 @@ func (_Storage *StorageCaller) GetResult(opts *bind.CallOpts, dealId string) (Sh // GetResult is a free data retrieval call binding the contract method 0x498cc70d. // -// Solidity: function getResult(string dealId) view returns((string,string,uint256)) +// Solidity: function getResult(string dealId) view returns((string,string,string,uint256)) func (_Storage *StorageSession) GetResult(dealId string) (SharedStructsResult, error) { return _Storage.Contract.GetResult(&_Storage.CallOpts, dealId) } // GetResult is a free data retrieval call binding the contract method 0x498cc70d. // -// Solidity: function getResult(string dealId) view returns((string,string,uint256)) +// Solidity: function getResult(string dealId) view returns((string,string,string,uint256)) func (_Storage *StorageCallerSession) GetResult(dealId string) (SharedStructsResult, error) { return _Storage.Contract.GetResult(&_Storage.CallOpts, dealId) } @@ -596,25 +597,25 @@ func (_Storage *StorageTransactorSession) AcceptResult(dealId string) (*types.Tr return _Storage.Contract.AcceptResult(&_Storage.TransactOpts, dealId) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns((string,string,uint256)) -func (_Storage *StorageTransactor) AddResult(opts *bind.TransactOpts, dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Storage.contract.Transact(opts, "addResult", dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns((string,string,string,uint256)) +func (_Storage *StorageTransactor) AddResult(opts *bind.TransactOpts, dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Storage.contract.Transact(opts, "addResult", dealId, resultsId, dataId, instructionCount) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns((string,string,uint256)) -func (_Storage *StorageSession) AddResult(dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Storage.Contract.AddResult(&_Storage.TransactOpts, dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns((string,string,string,uint256)) +func (_Storage *StorageSession) AddResult(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Storage.Contract.AddResult(&_Storage.TransactOpts, dealId, resultsId, dataId, instructionCount) } -// AddResult is a paid mutator transaction binding the contract method 0x822f80c5. +// AddResult is a paid mutator transaction binding the contract method 0x3955548e. // -// Solidity: function addResult(string dealId, string resultsId, uint256 instructionCount) returns((string,string,uint256)) -func (_Storage *StorageTransactorSession) AddResult(dealId string, resultsId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Storage.Contract.AddResult(&_Storage.TransactOpts, dealId, resultsId, instructionCount) +// Solidity: function addResult(string dealId, string resultsId, string dataId, uint256 instructionCount) returns((string,string,string,uint256)) +func (_Storage *StorageTransactorSession) AddResult(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Storage.Contract.AddResult(&_Storage.TransactOpts, dealId, resultsId, dataId, instructionCount) } // AgreeJobCreator is a paid mutator transaction binding the contract method 0x3c4135da. diff --git a/pkg/web3/bindings/users/users.go b/pkg/web3/bindings/users/users.go index 2c21d646..ce61f647 100644 --- a/pkg/web3/bindings/users/users.go +++ b/pkg/web3/bindings/users/users.go @@ -40,7 +40,7 @@ type SharedStructsUser struct { // UsersMetaData contains all meta data concerning the Users contract. var UsersMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"addUserToList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"getUser\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"internalType\":\"structSharedStructs.User\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"removeUserFromList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"showUsersInList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"name\":\"updateUser\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"internalType\":\"structSharedStructs.User\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5061002c61002161003160201b60201c565b61003860201b60201c565b6100f9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612002806101065f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063a15dcc8a11610064578063a15dcc8a146100f7578063a7f96f0614610127578063aeb5ec0114610143578063ebbbca271461015f578063f2fde38b1461018f57610091565b80636f77926b14610095578063715018a6146100c55780638129fc1c146100cf5780638da5cb5b146100d9575b5f80fd5b6100af60048036038101906100aa91906111cf565b6101ab565b6040516100bc919061141c565b60405180910390f35b6100cd6103ff565b005b6100d7610412565b005b6100e1610547565b6040516100ee919061144b565b60405180910390f35b610111600480360381019061010c9190611487565b61056e565b60405161011e919061155a565b60405180910390f35b610141600480360381019061013c9190611487565b61062e565b005b61015d60048036038101906101589190611487565b610932565b005b6101796004803603810190610174919061176a565b610b2d565b604051610186919061141c565b60405180910390f35b6101a960048036038101906101a491906111cf565b610c48565b005b6101b361105b565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461025f9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461028b9061183b565b80156102d65780601f106102ad576101008083540402835291602001916102d6565b820191905f5260205f20905b8154815290600101906020018083116102b957829003601f168201915b505050505081526020016002820180546102ef9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461031b9061183b565b80156103665780601f1061033d57610100808354040283529160200191610366565b820191905f5260205f20905b81548152906001019060200180831161034957829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156103ef57602002820191905f5260205f20905f905b82829054906101000a900460ff1660038111156103ca576103c96112bc565b5b815260200190600101906020825f010492830192600103820291508084116103aa5790505b5050505050815250509050919050565b610407610cca565b6104105f610d48565b565b5f8060159054906101000a900460ff16159050808015610443575060015f60149054906101000a900460ff1660ff16105b80610471575061045230610e09565b158015610470575060015f60149054906101000a900460ff1660ff16145b5b6104b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a7906118eb565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156104ec5760015f60156101000a81548160ff0219169083151502179055505b8015610544575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161053b9190611957565b60405180910390a15b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060025f836003811115610586576105856112bc565b5b6003811115610598576105976112bc565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561062257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105d9575b50505050509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906119ba565b60405180910390fd5b5f806107068332610e2b565b915091508061074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a22565b60405180910390fd5b5f8290505b600160025f866003811115610767576107666112bc565b5b6003811115610779576107786112bc565b5b81526020019081526020015f20805490506107949190611a76565b8110156108b55760025f8560038111156107b1576107b06112bc565b5b60038111156107c3576107c26112bc565b5b81526020019081526020015f206001826107dd9190611aa9565b815481106107ee576107ed611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f86600381111561082c5761082b6112bc565b5b600381111561083e5761083d6112bc565b5b81526020019081526020015f20828154811061085d5761085c611adc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806108ad90611b09565b91505061074f565b5060025f8460038111156108cc576108cb6112bc565b5b60038111156108de576108dd6112bc565b5b81526020019081526020015f208054806108fb576108fa611b50565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906119ba565b60405180910390fd5b5f610a098232610e2b565b9150508015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611bed565b60405180910390fd5b610a578232610f41565b610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90611c55565b60405180910390fd5b60025f836003811115610aac57610aab6112bc565b5b6003811115610abe57610abd6112bc565b5b81526020019081526020015f2032908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b3561105b565b5f60405180608001604052803273ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481525090508060015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610c069190611e07565b506040820151816002019081610c1c9190611e07565b506060820151816003019080519060200190610c39929190611098565b50905050809150509392505050565b610c50610cca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590611f46565b60405180910390fd5b610cc781610d48565b50565b610cd2611054565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610547565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90611fae565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f805f805f5b60025f886003811115610e4757610e466112bc565b5b6003811115610e5957610e586112bc565b5b81526020019081526020015f2080549050811015610f31578573ffffffffffffffffffffffffffffffffffffffff1660025f896003811115610e9e57610e9d6112bc565b5b6003811115610eb057610eaf6112bc565b5b81526020019081526020015f208281548110610ecf57610ece611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f1e5780925060019150610f31565b8080610f2990611b09565b915050610e31565b5081819350935050509250929050565b5f805f90505f5b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018054905081101561104957846003811115610fa657610fa56112bc565b5b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018281548110610ff857610ff7611adc565b5b905f5260205f2090602091828204019190069054906101000a900460ff166003811115611028576110276112bc565b5b036110365760019150611049565b808061104190611b09565b915050610f48565b508091505092915050565b5f33905090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b828054828255905f5260205f2090601f01602090048101928215611138579160200282015f5b8382111561110a57835183826101000a81548160ff021916908360038111156110ea576110e96112bc565b5b021790555092602001926001016020815f010492830192600103026110be565b80156111365782816101000a81549060ff02191690556001016020815f0104928301926001030261110a565b505b5090506111459190611149565b5090565b5b80821115611160575f815f90555060010161114a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61119e82611175565b9050919050565b6111ae81611194565b81146111b8575f80fd5b50565b5f813590506111c9816111a5565b92915050565b5f602082840312156111e4576111e361116d565b5b5f6111f1848285016111bb565b91505092915050565b61120381611194565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611240578082015181840152602081019050611225565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126582611209565b61126f8185611213565b935061127f818560208601611223565b6112888161124b565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106112fa576112f96112bc565b5b50565b5f81905061130a826112e9565b919050565b5f611319826112fd565b9050919050565b6113298161130f565b82525050565b5f61133a8383611320565b60208301905092915050565b5f602082019050919050565b5f61135c82611293565b611366818561129d565b9350611371836112ad565b805f5b838110156113a1578151611388888261132f565b975061139383611346565b925050600181019050611374565b5085935050505092915050565b5f608083015f8301516113c35f8601826111fa565b50602083015184820360208601526113db828261125b565b915050604083015184820360408601526113f5828261125b565b9150506060830151848203606086015261140f8282611352565b9150508091505092915050565b5f6020820190508181035f83015261143481846113ae565b905092915050565b61144581611194565b82525050565b5f60208201905061145e5f83018461143c565b92915050565b60048110611470575f80fd5b50565b5f8135905061148181611464565b92915050565b5f6020828403121561149c5761149b61116d565b5b5f6114a984828501611473565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6114e683836111fa565b60208301905092915050565b5f602082019050919050565b5f611508826114b2565b61151281856114bc565b935061151d836114cc565b805f5b8381101561154d57815161153488826114db565b975061153f836114f2565b925050600181019050611520565b5085935050505092915050565b5f6020820190508181035f83015261157281846114fe565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115b88261124b565b810181811067ffffffffffffffff821117156115d7576115d6611582565b5b80604052505050565b5f6115e9611164565b90506115f582826115af565b919050565b5f67ffffffffffffffff82111561161457611613611582565b5b61161d8261124b565b9050602081019050919050565b828183375f83830152505050565b5f61164a611645846115fa565b6115e0565b9050828152602081018484840111156116665761166561157e565b5b61167184828561162a565b509392505050565b5f82601f83011261168d5761168c61157a565b5b813561169d848260208601611638565b91505092915050565b5f67ffffffffffffffff8211156116c0576116bf611582565b5b602082029050602081019050919050565b5f80fd5b5f6116e76116e2846116a6565b6115e0565b9050808382526020820190506020840283018581111561170a576117096116d1565b5b835b81811015611733578061171f8882611473565b84526020840193505060208101905061170c565b5050509392505050565b5f82601f8301126117515761175061157a565b5b81356117618482602086016116d5565b91505092915050565b5f805f606084860312156117815761178061116d565b5b5f84013567ffffffffffffffff81111561179e5761179d611171565b5b6117aa86828701611679565b935050602084013567ffffffffffffffff8111156117cb576117ca611171565b5b6117d786828701611679565b925050604084013567ffffffffffffffff8111156117f8576117f7611171565b5b6118048682870161173d565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061185257607f821691505b6020821081036118655761186461180e565b5b50919050565b5f82825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6118d5602e8361186b565b91506118e08261187b565b604082019050919050565b5f6020820190508181035f830152611902816118c9565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61194161193c61193784611909565b61191e565b611912565b9050919050565b61195181611927565b82525050565b5f60208201905061196a5f830184611948565b92915050565b7f55736572206d75737420657869737400000000000000000000000000000000005f82015250565b5f6119a4600f8361186b565b91506119af82611970565b602082019050919050565b5f6020820190508181035f8301526119d181611998565b9050919050565b7f55736572206973206e6f742070617274206f662074686174206c6973740000005f82015250565b5f611a0c601d8361186b565b9150611a17826119d8565b602082019050919050565b5f6020820190508181035f830152611a3981611a00565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a8082611a40565b9150611a8b83611a40565b9250828203905081811115611aa357611aa2611a49565b5b92915050565b5f611ab382611a40565b9150611abe83611a40565b9250828201905080821115611ad657611ad5611a49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1382611a40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4557611b44611a49565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5573657220697320616c72656164792070617274206f662074686174206c69735f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611bd760218361186b565b9150611be282611b7d565b604082019050919050565b5f6020820190508181035f830152611c0481611bcb565b9050919050565b7f55736572206d7573742068617665207468617420726f6c6500000000000000005f82015250565b5f611c3f60188361186b565b9150611c4a82611c0b565b602082019050919050565b5f6020820190508181035f830152611c6c81611c33565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c94565b611cd98683611c94565b95508019841693508086168417925050509392505050565b5f611d0b611d06611d0184611a40565b61191e565b611a40565b9050919050565b5f819050919050565b611d2483611cf1565b611d38611d3082611d12565b848454611ca0565b825550505050565b5f90565b611d4c611d40565b611d57818484611d1b565b505050565b5b81811015611d7a57611d6f5f82611d44565b600181019050611d5d565b5050565b601f821115611dbf57611d9081611c73565b611d9984611c85565b81016020851015611da8578190505b611dbc611db485611c85565b830182611d5c565b50505b505050565b5f82821c905092915050565b5f611ddf5f1984600802611dc4565b1980831691505092915050565b5f611df78383611dd0565b9150826002028217905092915050565b611e1082611209565b67ffffffffffffffff811115611e2957611e28611582565b5b611e33825461183b565b611e3e828285611d7e565b5f60209050601f831160018114611e6f575f8415611e5d578287015190505b611e678582611dec565b865550611ece565b601f198416611e7d86611c73565b5f5b82811015611ea457848901518255600182019150602085019450602081019050611e7f565b86831015611ec15784890151611ebd601f891682611dd0565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611f3060268361186b565b9150611f3b82611ed6565b604082019050919050565b5f6020820190508181035f830152611f5d81611f24565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611f9860208361186b565b9150611fa382611f64565b602082019050919050565b5f6020820190508181035f830152611fc581611f8c565b905091905056fea2646970667358221220821e94feda3128a72f04ef2e54c53564f823cde6d4444aee9c66508da5e739cf64736f6c63430008150033", + Bin: "0x608060405234801561000f575f80fd5b5061002c61002161003160201b60201c565b61003860201b60201c565b6100f9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612002806101065f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063a15dcc8a11610064578063a15dcc8a146100f7578063a7f96f0614610127578063aeb5ec0114610143578063ebbbca271461015f578063f2fde38b1461018f57610091565b80636f77926b14610095578063715018a6146100c55780638129fc1c146100cf5780638da5cb5b146100d9575b5f80fd5b6100af60048036038101906100aa91906111cf565b6101ab565b6040516100bc919061141c565b60405180910390f35b6100cd6103ff565b005b6100d7610412565b005b6100e1610547565b6040516100ee919061144b565b60405180910390f35b610111600480360381019061010c9190611487565b61056e565b60405161011e919061155a565b60405180910390f35b610141600480360381019061013c9190611487565b61062e565b005b61015d60048036038101906101589190611487565b610932565b005b6101796004803603810190610174919061176a565b610b2d565b604051610186919061141c565b60405180910390f35b6101a960048036038101906101a491906111cf565b610c48565b005b6101b361105b565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461025f9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461028b9061183b565b80156102d65780601f106102ad576101008083540402835291602001916102d6565b820191905f5260205f20905b8154815290600101906020018083116102b957829003601f168201915b505050505081526020016002820180546102ef9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461031b9061183b565b80156103665780601f1061033d57610100808354040283529160200191610366565b820191905f5260205f20905b81548152906001019060200180831161034957829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156103ef57602002820191905f5260205f20905f905b82829054906101000a900460ff1660038111156103ca576103c96112bc565b5b815260200190600101906020825f010492830192600103820291508084116103aa5790505b5050505050815250509050919050565b610407610cca565b6104105f610d48565b565b5f8060159054906101000a900460ff16159050808015610443575060015f60149054906101000a900460ff1660ff16105b80610471575061045230610e09565b158015610470575060015f60149054906101000a900460ff1660ff16145b5b6104b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a7906118eb565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156104ec5760015f60156101000a81548160ff0219169083151502179055505b8015610544575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161053b9190611957565b60405180910390a15b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060025f836003811115610586576105856112bc565b5b6003811115610598576105976112bc565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561062257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105d9575b50505050509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906119ba565b60405180910390fd5b5f806107068332610e2b565b915091508061074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a22565b60405180910390fd5b5f8290505b600160025f866003811115610767576107666112bc565b5b6003811115610779576107786112bc565b5b81526020019081526020015f20805490506107949190611a76565b8110156108b55760025f8560038111156107b1576107b06112bc565b5b60038111156107c3576107c26112bc565b5b81526020019081526020015f206001826107dd9190611aa9565b815481106107ee576107ed611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f86600381111561082c5761082b6112bc565b5b600381111561083e5761083d6112bc565b5b81526020019081526020015f20828154811061085d5761085c611adc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806108ad90611b09565b91505061074f565b5060025f8460038111156108cc576108cb6112bc565b5b60038111156108de576108dd6112bc565b5b81526020019081526020015f208054806108fb576108fa611b50565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906119ba565b60405180910390fd5b5f610a098232610e2b565b9150508015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611bed565b60405180910390fd5b610a578232610f41565b610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90611c55565b60405180910390fd5b60025f836003811115610aac57610aab6112bc565b5b6003811115610abe57610abd6112bc565b5b81526020019081526020015f2032908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b3561105b565b5f60405180608001604052803273ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481525090508060015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610c069190611e07565b506040820151816002019081610c1c9190611e07565b506060820151816003019080519060200190610c39929190611098565b50905050809150509392505050565b610c50610cca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590611f46565b60405180910390fd5b610cc781610d48565b50565b610cd2611054565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610547565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90611fae565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f805f805f5b60025f886003811115610e4757610e466112bc565b5b6003811115610e5957610e586112bc565b5b81526020019081526020015f2080549050811015610f31578573ffffffffffffffffffffffffffffffffffffffff1660025f896003811115610e9e57610e9d6112bc565b5b6003811115610eb057610eaf6112bc565b5b81526020019081526020015f208281548110610ecf57610ece611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f1e5780925060019150610f31565b8080610f2990611b09565b915050610e31565b5081819350935050509250929050565b5f805f90505f5b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018054905081101561104957846003811115610fa657610fa56112bc565b5b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018281548110610ff857610ff7611adc565b5b905f5260205f2090602091828204019190069054906101000a900460ff166003811115611028576110276112bc565b5b036110365760019150611049565b808061104190611b09565b915050610f48565b508091505092915050565b5f33905090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b828054828255905f5260205f2090601f01602090048101928215611138579160200282015f5b8382111561110a57835183826101000a81548160ff021916908360038111156110ea576110e96112bc565b5b021790555092602001926001016020815f010492830192600103026110be565b80156111365782816101000a81549060ff02191690556001016020815f0104928301926001030261110a565b505b5090506111459190611149565b5090565b5b80821115611160575f815f90555060010161114a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61119e82611175565b9050919050565b6111ae81611194565b81146111b8575f80fd5b50565b5f813590506111c9816111a5565b92915050565b5f602082840312156111e4576111e361116d565b5b5f6111f1848285016111bb565b91505092915050565b61120381611194565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611240578082015181840152602081019050611225565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126582611209565b61126f8185611213565b935061127f818560208601611223565b6112888161124b565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106112fa576112f96112bc565b5b50565b5f81905061130a826112e9565b919050565b5f611319826112fd565b9050919050565b6113298161130f565b82525050565b5f61133a8383611320565b60208301905092915050565b5f602082019050919050565b5f61135c82611293565b611366818561129d565b9350611371836112ad565b805f5b838110156113a1578151611388888261132f565b975061139383611346565b925050600181019050611374565b5085935050505092915050565b5f608083015f8301516113c35f8601826111fa565b50602083015184820360208601526113db828261125b565b915050604083015184820360408601526113f5828261125b565b9150506060830151848203606086015261140f8282611352565b9150508091505092915050565b5f6020820190508181035f83015261143481846113ae565b905092915050565b61144581611194565b82525050565b5f60208201905061145e5f83018461143c565b92915050565b60048110611470575f80fd5b50565b5f8135905061148181611464565b92915050565b5f6020828403121561149c5761149b61116d565b5b5f6114a984828501611473565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6114e683836111fa565b60208301905092915050565b5f602082019050919050565b5f611508826114b2565b61151281856114bc565b935061151d836114cc565b805f5b8381101561154d57815161153488826114db565b975061153f836114f2565b925050600181019050611520565b5085935050505092915050565b5f6020820190508181035f83015261157281846114fe565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115b88261124b565b810181811067ffffffffffffffff821117156115d7576115d6611582565b5b80604052505050565b5f6115e9611164565b90506115f582826115af565b919050565b5f67ffffffffffffffff82111561161457611613611582565b5b61161d8261124b565b9050602081019050919050565b828183375f83830152505050565b5f61164a611645846115fa565b6115e0565b9050828152602081018484840111156116665761166561157e565b5b61167184828561162a565b509392505050565b5f82601f83011261168d5761168c61157a565b5b813561169d848260208601611638565b91505092915050565b5f67ffffffffffffffff8211156116c0576116bf611582565b5b602082029050602081019050919050565b5f80fd5b5f6116e76116e2846116a6565b6115e0565b9050808382526020820190506020840283018581111561170a576117096116d1565b5b835b81811015611733578061171f8882611473565b84526020840193505060208101905061170c565b5050509392505050565b5f82601f8301126117515761175061157a565b5b81356117618482602086016116d5565b91505092915050565b5f805f606084860312156117815761178061116d565b5b5f84013567ffffffffffffffff81111561179e5761179d611171565b5b6117aa86828701611679565b935050602084013567ffffffffffffffff8111156117cb576117ca611171565b5b6117d786828701611679565b925050604084013567ffffffffffffffff8111156117f8576117f7611171565b5b6118048682870161173d565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061185257607f821691505b6020821081036118655761186461180e565b5b50919050565b5f82825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6118d5602e8361186b565b91506118e08261187b565b604082019050919050565b5f6020820190508181035f830152611902816118c9565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61194161193c61193784611909565b61191e565b611912565b9050919050565b61195181611927565b82525050565b5f60208201905061196a5f830184611948565b92915050565b7f55736572206d75737420657869737400000000000000000000000000000000005f82015250565b5f6119a4600f8361186b565b91506119af82611970565b602082019050919050565b5f6020820190508181035f8301526119d181611998565b9050919050565b7f55736572206973206e6f742070617274206f662074686174206c6973740000005f82015250565b5f611a0c601d8361186b565b9150611a17826119d8565b602082019050919050565b5f6020820190508181035f830152611a3981611a00565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a8082611a40565b9150611a8b83611a40565b9250828203905081811115611aa357611aa2611a49565b5b92915050565b5f611ab382611a40565b9150611abe83611a40565b9250828201905080821115611ad657611ad5611a49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1382611a40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4557611b44611a49565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5573657220697320616c72656164792070617274206f662074686174206c69735f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611bd760218361186b565b9150611be282611b7d565b604082019050919050565b5f6020820190508181035f830152611c0481611bcb565b9050919050565b7f55736572206d7573742068617665207468617420726f6c6500000000000000005f82015250565b5f611c3f60188361186b565b9150611c4a82611c0b565b602082019050919050565b5f6020820190508181035f830152611c6c81611c33565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c94565b611cd98683611c94565b95508019841693508086168417925050509392505050565b5f611d0b611d06611d0184611a40565b61191e565b611a40565b9050919050565b5f819050919050565b611d2483611cf1565b611d38611d3082611d12565b848454611ca0565b825550505050565b5f90565b611d4c611d40565b611d57818484611d1b565b505050565b5b81811015611d7a57611d6f5f82611d44565b600181019050611d5d565b5050565b601f821115611dbf57611d9081611c73565b611d9984611c85565b81016020851015611da8578190505b611dbc611db485611c85565b830182611d5c565b50505b505050565b5f82821c905092915050565b5f611ddf5f1984600802611dc4565b1980831691505092915050565b5f611df78383611dd0565b9150826002028217905092915050565b611e1082611209565b67ffffffffffffffff811115611e2957611e28611582565b5b611e33825461183b565b611e3e828285611d7e565b5f60209050601f831160018114611e6f575f8415611e5d578287015190505b611e678582611dec565b865550611ece565b601f198416611e7d86611c73565b5f5b82811015611ea457848901518255600182019150602085019450602081019050611e7f565b86831015611ec15784890151611ebd601f891682611dd0565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611f3060268361186b565b9150611f3b82611ed6565b604082019050919050565b5f6020820190508181035f830152611f5d81611f24565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611f9860208361186b565b9150611fa382611f64565b602082019050919050565b5f6020820190508181035f830152611fc581611f8c565b905091905056fea2646970667358221220f031ad70f6ddf83ce96fe42eb907f15084ef1bb1fc8895dfdfe0f8993c4fc44064736f6c63430008150033", } // UsersABI is the input ABI used to generate the binding from. From f3a6d8d46c92279be9d4ec287117ba769c3693a5 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Wed, 18 Oct 2023 18:57:41 +0100 Subject: [PATCH 2/7] on chain triggered jobs will need to call approve on the token on behalf of the solver --- ...ainJobClient.sol => ILilypadJobClient.sol} | 2 +- hardhat/contracts/ILilypadJobManager.sol | 17 ++++++++++++ hardhat/contracts/IOnChainJobManager.sol | 18 ------------- hardhat/contracts/LilypadToken.sol | 4 +-- hardhat/contracts/OnChainJobManager.sol | 26 ++++++++++++++----- hardhat/contracts/SharedStructs.sol | 8 ++++++ 6 files changed, 47 insertions(+), 28 deletions(-) rename hardhat/contracts/{IOnChainJobClient.sol => ILilypadJobClient.sol} (92%) create mode 100644 hardhat/contracts/ILilypadJobManager.sol delete mode 100644 hardhat/contracts/IOnChainJobManager.sol diff --git a/hardhat/contracts/IOnChainJobClient.sol b/hardhat/contracts/ILilypadJobClient.sol similarity index 92% rename from hardhat/contracts/IOnChainJobClient.sol rename to hardhat/contracts/ILilypadJobClient.sol index 1647a9dd..d3f9dd4e 100644 --- a/hardhat/contracts/IOnChainJobClient.sol +++ b/hardhat/contracts/ILilypadJobClient.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.6; // a smart contract that is running a job // it will call the IOnChainJobManager with it's job // which will end up with the resultsAdded function being called by the manager -interface IOnChainJobClient { +interface ILilypadJobClient { function resultsAdded( string memory dealId, string memory resultsId, diff --git a/hardhat/contracts/ILilypadJobManager.sol b/hardhat/contracts/ILilypadJobManager.sol new file mode 100644 index 00000000..54702d83 --- /dev/null +++ b/hardhat/contracts/ILilypadJobManager.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +import "./SharedStructs.sol"; +import "./ILilypadJobClient.sol"; + +// the smart contract that is responsible for handling the life +// cycle of a job - it will pay the registered solver to manage the job +// this is the simple implementation - later we can implement the whole protocol +// where the calling smart contract can decide if it wants to agree to a resource offer +// and accept results +interface ILilypadJobManager is ILilypadJobClient { + function runJob( + string memory module, + SharedStructs.JobOfferInput[] memory inputs + ) external returns (uint256); +} diff --git a/hardhat/contracts/IOnChainJobManager.sol b/hardhat/contracts/IOnChainJobManager.sol deleted file mode 100644 index 7ca83d0f..00000000 --- a/hardhat/contracts/IOnChainJobManager.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.6; - -import "./SharedStructs.sol"; -import "./IOnChainJobClient.sol"; - -// the smart contract that is responsible for handling the life -// cycle of a job - it holds the escrow payment paid by client smart contracts -// which will be moved into the controller by the solver once a match -// has been made -// clients can withdraw their escrow at any time up until the agree tx has been posted -// the controller will then call "resultsAdded" once the RP has returned results -interface IOnChainJobManager is IOnChainJobClient { - function runJob( - string memory module, - SharedStructs.JobOfferInput[] memory inputs - ) external; -} diff --git a/hardhat/contracts/LilypadToken.sol b/hardhat/contracts/LilypadToken.sol index 914720b0..2a7319f5 100644 --- a/hardhat/contracts/LilypadToken.sol +++ b/hardhat/contracts/LilypadToken.sol @@ -12,7 +12,7 @@ import "./ControllerOwnable.sol"; * for paying in, we use tx.origin so the actual payee must call the contract * for paying out - we use the Controller Ownable feature so only the payments contract can pay out from the escrow account - * getEscrowBalance + * escrowBalanceOf * get the current escrow balance for an address * payEscrow * pay into the escrow account @@ -67,7 +67,7 @@ contract LilypadToken is ControllerOwnable, ERC20 { // for on chain triggered jobs - we need to pay X tokens into the solver // account so it can manage a job on our behalf - // this is always paid via tx.origin so is safge + // this is always paid via tx.origin so is safe function payOnChainManager( address managerAddress, uint256 amount diff --git a/hardhat/contracts/OnChainJobManager.sol b/hardhat/contracts/OnChainJobManager.sol index 531185f6..2972fbd6 100644 --- a/hardhat/contracts/OnChainJobManager.sol +++ b/hardhat/contracts/OnChainJobManager.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.6; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./SharedStructs.sol"; -import "./IOnChainJobManager.sol"; -import "./IOnChainJobClient.sol"; +import "./ILilypadJobManager.sol"; +import "./ILilypadJobClient.sol"; import "./ControllerOwnable.sol"; import "./ILilypadToken.sol"; -contract OnChainJobManager is IOnChainJobManager, ControllerOwnable, Initializable { +contract JobManager is ILilypadJobManager, ControllerOwnable, Initializable { // keep track of which contract has called which job // mapping(string => SharedStructs.Result) private results; @@ -22,9 +22,11 @@ contract OnChainJobManager is IOnChainJobManager, ControllerOwnable, Initializab // TODO: allow more detail here - for example, per module pricing uint256 public defaultModuleCost; - // keep track of the escrow currently being held on behalf of - // different contracts - mapping(address => uint256) private escrow; + // auto increment job id + uint256 public nextJobID; + + // map of job id onto offer + mapping(uint256 => SharedStructs.JobOffer) private jobOffers; event JobAdded( string module, @@ -40,6 +42,7 @@ contract OnChainJobManager is IOnChainJobManager, ControllerOwnable, Initializab address _tokenAddress ) public initializer { setTokenAddress(_tokenAddress); + nextJobID = 0; } function setTokenAddress(address _tokenAddress) public onlyOwner { @@ -58,11 +61,20 @@ contract OnChainJobManager is IOnChainJobManager, ControllerOwnable, Initializab function runJob( string memory module, SharedStructs.JobOfferInput[] memory inputs - ) public override { + ) public override returns (uint256) { + nextJobID = nextJobID + 1; + jobOffers[nextJobID] = SharedStructs.JobOffer( + nextJobID, + msg.sender, + module, + inputs + ); // move X tokens to the solver (i.e. the controller address) // emit the event so the solver can kick in and run the job on behalf // of the on chain client tokenContract.payOnChainManager(getControllerAddress(), defaultModuleCost); + + return nextJobID; } // this is called by the solver once we've got results out of the controller diff --git a/hardhat/contracts/SharedStructs.sol b/hardhat/contracts/SharedStructs.sol index cee063f1..7dbca6ff 100644 --- a/hardhat/contracts/SharedStructs.sol +++ b/hardhat/contracts/SharedStructs.sol @@ -164,4 +164,12 @@ library SharedStructs { string name; string value; } + + struct JobOffer { + uint256 id; + // this is the address of a ILilypad + address client; + string module; + JobOfferInput[] inputs; + } } From 1007797b41c41054c6864d993fc3fe0b92510f94 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Thu, 26 Oct 2023 14:11:29 +0100 Subject: [PATCH 3/7] changes to contracts so we can get the solver to trigger an on-chain published job --- hardhat/contracts/ILilypadJobManager.sol | 3 +- hardhat/contracts/ILilypadToken.sol | 5 -- hardhat/contracts/LilypadToken.sol | 11 ----- hardhat/contracts/OnChainJobManager.sol | 61 +++++++++++++++++------- hardhat/contracts/SharedStructs.sol | 21 ++++---- 5 files changed, 58 insertions(+), 43 deletions(-) diff --git a/hardhat/contracts/ILilypadJobManager.sol b/hardhat/contracts/ILilypadJobManager.sol index 54702d83..c6f6d194 100644 --- a/hardhat/contracts/ILilypadJobManager.sol +++ b/hardhat/contracts/ILilypadJobManager.sol @@ -12,6 +12,7 @@ import "./ILilypadJobClient.sol"; interface ILilypadJobManager is ILilypadJobClient { function runJob( string memory module, - SharedStructs.JobOfferInput[] memory inputs + string[] memory inputs, + address payee ) external returns (uint256); } diff --git a/hardhat/contracts/ILilypadToken.sol b/hardhat/contracts/ILilypadToken.sol index dfa08ac2..bf6a9ad3 100644 --- a/hardhat/contracts/ILilypadToken.sol +++ b/hardhat/contracts/ILilypadToken.sol @@ -12,11 +12,6 @@ interface ILilypadToken is IERC20 { uint256 amount ) external returns (bool); - function payOnChainManager( - address managerAddress, - uint256 amount - ) external returns (bool); - function refundEscrow( address toAddress, uint256 amount diff --git a/hardhat/contracts/LilypadToken.sol b/hardhat/contracts/LilypadToken.sol index 2a7319f5..2033b7da 100644 --- a/hardhat/contracts/LilypadToken.sol +++ b/hardhat/contracts/LilypadToken.sol @@ -65,17 +65,6 @@ contract LilypadToken is ControllerOwnable, ERC20 { return true; } - // for on chain triggered jobs - we need to pay X tokens into the solver - // account so it can manage a job on our behalf - // this is always paid via tx.origin so is safe - function payOnChainManager( - address managerAddress, - uint256 amount - ) public returns (bool) { - _transfer(tx.origin, managerAddress, amount); - return true; - } - // money being paid back from the escrow account function refundEscrow( address toAddress, diff --git a/hardhat/contracts/OnChainJobManager.sol b/hardhat/contracts/OnChainJobManager.sol index 2972fbd6..dd0b240b 100644 --- a/hardhat/contracts/OnChainJobManager.sol +++ b/hardhat/contracts/OnChainJobManager.sol @@ -11,16 +11,16 @@ import "./ILilypadToken.sol"; contract JobManager is ILilypadJobManager, ControllerOwnable, Initializable { - // keep track of which contract has called which job - // mapping(string => SharedStructs.Result) private results; - + // the token contract + // we check to see what allowance has been granted to be spent on behalf + // of the customer of a job address private tokenAddress; ILilypadToken private tokenContract; - // simplistic way of the solver updating how much things currently cost - // this is based on market pricing - the solver will post the cheapest - // TODO: allow more detail here - for example, per module pricing - uint256 public defaultModuleCost; + // the minimum amount that must be "approved" on the smart contract for the solver to spend + // for it to consider running a job for a client + // the solver will update this as the market pricing changes + uint256 public requiredDeposit; // auto increment job id uint256 public nextJobID; @@ -29,8 +29,11 @@ contract JobManager is ILilypadJobManager, ControllerOwnable, Initializable { mapping(uint256 => SharedStructs.JobOffer) private jobOffers; event JobAdded( + uint256 id, + address calling_contract, + address payee, string module, - SharedStructs.JobOfferInput[] inputs + string[] inputs ); /** @@ -51,28 +54,50 @@ contract JobManager is ILilypadJobManager, ControllerOwnable, Initializable { tokenContract = ILilypadToken(tokenAddress); } - function setDefaultModuleCost(uint256 cost) public onlyController { - require(cost > 0, "Min cost"); - defaultModuleCost = cost; + function getTokenAddress() public view returns (address) { + return tokenAddress; + } + + function setRequiredDeposit(uint256 cost) public onlyController { + require(cost > 0, "Min deposit"); + requiredDeposit = cost; } - // called by clients - transfer tokens and then emit event so solver - // can kick in with a job offer on behalf of the submitting contract + function getRequiredDeposit() public view returns (uint256) { + return requiredDeposit; + } + + // called by on-chain clients to make an offer for a job function runJob( + // what is the module name we are making an offer for string memory module, - SharedStructs.JobOfferInput[] memory inputs + // an array of key=value pairs that will be the inputs to the job + string[] memory inputs, + // the address of the client who is paying for the job + // they must have called the increaseAllowance function + // giving the controller (i.e. solver) permission to spend their tokens + address payee ) public override returns (uint256) { + // this makes sure that the person paying for the job has + // already called "approve" on the token contract so the solver can + // work on it's behalf + require(tokenContract.allowance(payee, getControllerAddress()) >= requiredDeposit, "Token allowance not enough"); + nextJobID = nextJobID + 1; jobOffers[nextJobID] = SharedStructs.JobOffer( nextJobID, msg.sender, + payee, + module, + inputs + ); + emit JobAdded( + nextJobID, + msg.sender, + payee, module, inputs ); - // move X tokens to the solver (i.e. the controller address) - // emit the event so the solver can kick in and run the job on behalf - // of the on chain client - tokenContract.payOnChainManager(getControllerAddress(), defaultModuleCost); return nextJobID; } diff --git a/hardhat/contracts/SharedStructs.sol b/hardhat/contracts/SharedStructs.sol index 7dbca6ff..daed78ee 100644 --- a/hardhat/contracts/SharedStructs.sol +++ b/hardhat/contracts/SharedStructs.sol @@ -160,16 +160,21 @@ library SharedStructs { uint256 timeoutMediateResultsAt; } - struct JobOfferInput { - string name; - string value; - } - struct JobOffer { uint256 id; - // this is the address of a ILilypad - address client; + + // this is the contract that will be triggered + // once there are some results + address calling_contract; + + // this is the address that is paying for the job + // they must have called approve on the token contract + // and granted the solver address the number of tokens + // required + address payee; + + // the job spec string module; - JobOfferInput[] inputs; + string[] inputs; } } From 70ac9fb93201b86229efc6e13202d71fe3f2d819 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Thu, 26 Oct 2023 14:54:38 +0100 Subject: [PATCH 4/7] add the onchain jobcreator contract --- CONTRIBUTING.md | 2 +- hardhat/contracts/LilypadController.sol | 14 +- ...nager.sol => LilypadOnChainJobCreator.sol} | 2 +- hardhat/deploy/006_deploy_jobcreator.ts | 45 + ...controller.ts => 007_deploy_controller.ts} | 4 +- pkg/web3/bindings/controller/controller.go | 80 +- pkg/web3/bindings/jobcreator/jobcreator.go | 1003 +++++++++++++++++ pkg/web3/bindings/mediation/mediation.go | 2 +- pkg/web3/bindings/payments/payments.go | 2 +- pkg/web3/bindings/storage/storage.go | 2 +- pkg/web3/bindings/token/token.go | 2 +- pkg/web3/bindings/users/users.go | 2 +- pkg/web3/events.go | 4 + pkg/web3/events_jobcreator.go | 78 ++ pkg/web3/events_mediation.go | 1 + pkg/web3/events_payments.go | 1 + pkg/web3/events_storage.go | 1 + pkg/web3/events_token.go | 1 + pkg/web3/sdk.go | 21 + pkg/web3/types.go | 1 + stack | 1 + 21 files changed, 1246 insertions(+), 23 deletions(-) rename hardhat/contracts/{OnChainJobManager.sol => LilypadOnChainJobCreator.sol} (97%) create mode 100644 hardhat/deploy/006_deploy_jobcreator.ts rename hardhat/deploy/{006_deploy_controller.ts => 007_deploy_controller.ts} (93%) create mode 100644 pkg/web3/bindings/jobcreator/jobcreator.go create mode 100644 pkg/web3/events_jobcreator.go diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c2a4f1ef..4d3b480f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,7 @@ mv bacalhau /usr/local/bin # configure this to where you want the ipfs data to be stored export BACALHAU_SERVE_IPFS_PATH=/tmp/lilypad/data/ipfs # run bacalhau as both compute node and requester node -bacalhau serve --node-type compute,requester --peer none --private-internal-ipfs=false --job-selection-accept-networked +./stack bacalhau-serve ``` ### lilypad diff --git a/hardhat/contracts/LilypadController.sol b/hardhat/contracts/LilypadController.sol index 241ddd55..e7196dc4 100644 --- a/hardhat/contracts/LilypadController.sol +++ b/hardhat/contracts/LilypadController.sol @@ -19,6 +19,7 @@ contract LilypadController is ILilypadController, Ownable, Initializable { address private userAddress; address private paymentsAddress; address private mediationAddress; + address private jobCreatorAddress; ILilypadStorage private storageContract; ILilypadPayments private paymentsContract; @@ -33,12 +34,14 @@ contract LilypadController is ILilypadController, Ownable, Initializable { address _storageAddress, address _usersAddress, address _paymentsAddress, - address _mediationAddress + address _mediationAddress, + address _jobCreatorAddress ) public initializer { setStorageAddress(_storageAddress); setUsersAddress(_usersAddress); setPaymentsAddress(_paymentsAddress); setMediationAddress(_mediationAddress); + setJobCreatorAddress(_jobCreatorAddress); } function setStorageAddress(address _storageAddress) public onlyOwner { @@ -80,6 +83,15 @@ contract LilypadController is ILilypadController, Ownable, Initializable { return mediationAddress; } + function setJobCreatorAddress(address _jobCreatorAddress) public onlyOwner { + require(_jobCreatorAddress != address(0), "JobCreator address"); + jobCreatorAddress = _jobCreatorAddress; + } + + function getJobCreatorAddress() public view returns(address) { + return jobCreatorAddress; + } + /** * Agreements */ diff --git a/hardhat/contracts/OnChainJobManager.sol b/hardhat/contracts/LilypadOnChainJobCreator.sol similarity index 97% rename from hardhat/contracts/OnChainJobManager.sol rename to hardhat/contracts/LilypadOnChainJobCreator.sol index dd0b240b..aa420dc7 100644 --- a/hardhat/contracts/OnChainJobManager.sol +++ b/hardhat/contracts/LilypadOnChainJobCreator.sol @@ -9,7 +9,7 @@ import "./ILilypadJobClient.sol"; import "./ControllerOwnable.sol"; import "./ILilypadToken.sol"; -contract JobManager is ILilypadJobManager, ControllerOwnable, Initializable { +contract LilypadOnChainJobCreator is ILilypadJobManager, ControllerOwnable, Initializable { // the token contract // we check to see what allowance has been granted to be spent on behalf diff --git a/hardhat/deploy/006_deploy_jobcreator.ts b/hardhat/deploy/006_deploy_jobcreator.ts new file mode 100644 index 00000000..88843105 --- /dev/null +++ b/hardhat/deploy/006_deploy_jobcreator.ts @@ -0,0 +1,45 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types' +import { DeployFunction } from 'hardhat-deploy/types' + +const deployJobCreator: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { deployments, getNamedAccounts } = hre + const { deploy, execute } = deployments + const { + admin, + solver, + } = await getNamedAccounts() + await deploy("LilypadOnChainJobCreator", { + from: admin, + args: [], + log: true, + }) + + const tokenContract = await deployments.get('LilypadToken') + + await execute( + 'LilypadOnChainJobCreator', + { + from: admin, + log: true, + }, + 'initialize', + tokenContract.address + ) + + // we set the controller of the job creator to be the solver + // because it will be the one pulling jobs from it + await execute( + 'LilypadOnChainJobCreator', + { + from: admin, + log: true, + }, + 'setControllerAddress', + solver + ) + return true +} + +deployJobCreator.id = 'deployJobCreator' + +export default deployJobCreator \ No newline at end of file diff --git a/hardhat/deploy/006_deploy_controller.ts b/hardhat/deploy/007_deploy_controller.ts similarity index 93% rename from hardhat/deploy/006_deploy_controller.ts rename to hardhat/deploy/007_deploy_controller.ts index 359f2ce5..1849f0b1 100644 --- a/hardhat/deploy/006_deploy_controller.ts +++ b/hardhat/deploy/007_deploy_controller.ts @@ -18,7 +18,8 @@ const deployController: DeployFunction = async function (hre: HardhatRuntimeEnvi const usersContract = await deployments.get('LilypadUsers') const mediationContract = await deployments.get('LilypadMediationRandom') const paymentsContract = await deployments.get('LilypadPayments') - + const jobCreatorContract = await deployments.get('LilypadOnChainJobCreator') + await execute( 'LilypadController', { @@ -30,6 +31,7 @@ const deployController: DeployFunction = async function (hre: HardhatRuntimeEnvi usersContract.address, paymentsContract.address, mediationContract.address, + jobCreatorContract.address ) await execute( diff --git a/pkg/web3/bindings/controller/controller.go b/pkg/web3/bindings/controller/controller.go index abba4988..f3c4080d 100644 --- a/pkg/web3/bindings/controller/controller.go +++ b/pkg/web3/bindings/controller/controller.go @@ -79,8 +79,8 @@ type SharedStructsDealTimeouts struct { // ControllerMetaData contains all meta data concerning the Controller contract. var ControllerMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"agree\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMediationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPaymentsAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUsersAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"setMediationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"}],\"name\":\"setPaymentsAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"}],\"name\":\"setStorageAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"}],\"name\":\"setUsersAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5062000031620000256200003760201b60201c565b6200003e60201b60201c565b620000ff565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6155d2806200010d5f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806380ffdfe0116100b6578063d48b10841161007a578063d48b1084146102fa578063e7b957d114610318578063e850be3714610334578063f2fde38b14610350578063f583b1251461036c578063f8c8765e1461039c57610140565b806380ffdfe01461026a578063824518aa146102865780638da5cb5b146102a257806393dbed3e146102c0578063bbfff47d146102de57610140565b806346834d1e1161010857806346834d1e146101d4578063511a9f68146101f057806359b910d61461020c578063640e570f14610228578063715018a614610244578063795f9abf1461024e57610140565b8063155329ea14610144578063297f9e5514610162578063393a4d341461017e5780633955548e1461019c57806343391cca146101b8575b5f80fd5b61014c6103b8565b6040516101599190613668565b60405180910390f35b61017c600480360381019061017791906137ce565b6103e0565b005b610186610850565b6040516101939190613668565b60405180910390f35b6101b660048036038101906101b19190613848565b610878565b005b6101d260048036038101906101cd919061392a565b610c54565b005b6101ee60048036038101906101e991906137ce565b610d4d565b005b61020a600480360381019061020591906137ce565b6110fa565b005b6102266004803603810190610221919061392a565b6114b3565b005b610242600480360381019061023d919061392a565b6115cd565b005b61024c6116c6565b005b610268600480360381019061026391906137ce565b6116d9565b005b610284600480360381019061027f91906137ce565b611b82565b005b6102a0600480360381019061029b91906137ce565b611eda565b005b6102aa6122d2565b6040516102b79190613668565b60405180910390f35b6102c86122f9565b6040516102d59190613668565b60405180910390f35b6102f860048036038101906102f3919061392a565b612321565b005b6103026123da565b60405161030f9190613668565b60405180910390f35b610332600480360381019061032d91906137ce565b612402565b005b61034e600480360381019061034991906137ce565b612895565b005b61036a6004803603810190610365919061392a565b612ce4565b005b61038660048036038101906103819190613bea565b612d66565b6040516103939190613e28565b60405180910390f35b6103b660048036038101906103b19190613e42565b61320b565b005b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b815260040161043d929190613f2f565b6020604051808303815f875af1158015610459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061047d9190613f92565b6104bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b390614007565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016105179190614025565b5f604051808303815f875af1158015610532573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061055a91906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990614479565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b815260040161062d9190614025565b6020604051808303815f875af1158015610649573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066d9190614497565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016106ca9190614025565b6020604051808303815f875af11580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663297f9e55856040518263ffffffff1660e01b81526004016107669190614025565b5f604051808303815f87803b15801561077d575f80fd5b505af115801561078f573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b13567148585602001516040015186602001516020015186886060015160200151878a6040015160400151602001516040518863ffffffff1660e01b815260040161081d97969594939291906144d1565b5f604051808303815f87803b158015610834575f80fd5b505af1158015610846573d5f803e3d5ffd5b5050505050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8560016040518363ffffffff1660e01b81526004016108d5929190613f2f565b6020604051808303815f875af11580156108f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109159190613f92565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b9061458f565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180866040518263ffffffff1660e01b81526004016109af9190614025565b5f604051808303815f875af11580156109ca573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906109f291906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516040015173ffffffffffffffffffffffffffffffffffffffff1614610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906145f7565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633955548e868686866040518563ffffffff1660e01b8152600401610aca9493929190614615565b5f604051808303815f875af1158015610ae5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610b0d9190614736565b505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f876040518263ffffffff1660e01b8152600401610b699190614025565b6020604051808303815f875af1158015610b85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba99190614497565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309cab5108784602001516040015184866040015160200151602001516040518563ffffffff1660e01b8152600401610c1f949392919061477d565b5f604051808303815f87803b158015610c36575f80fd5b505af1158015610c48573d5f803e3d5ffd5b50505050505050505050565b610c5c613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614811565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b8152600401610daa929190613f2f565b6020604051808303815f875af1158015610dc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dea9190613f92565b610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614007565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401610e849190614025565b5f604051808303815f875af1158015610e9f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ec791906143e8565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff1614610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690614479565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346834d1e836040518263ffffffff1660e01b8152600401610f999190614025565b5f604051808303815f87803b158015610fb0575f80fd5b505af1158015610fc2573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aea3825183836020015160200151846040015160400151602001518560600151606001516040518563ffffffff1660e01b8152600401611042949392919061477d565b5f604051808303815f87803b158015611059575f80fd5b505af115801561106b573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370bea207826040518263ffffffff1660e01b81526004016110c99190614acb565b5f604051808303815f87803b1580156110e0575f80fd5b505af11580156110f2573d5f803e3d5ffd5b505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016111559190614025565b5f604051808303815f875af1158015611170573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061119891906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016111f59190614025565b6101c0604051808303815f875af1158015611212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112369190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590614479565b60405180910390fd5b6001600a8111156112c2576112c1613c88565b5b815f0151600a8111156112d8576112d7613c88565b5b14611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614ccf565b60405180910390fd5b8160400151602001515f015181608001516113339190614d1a565b4211611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614d97565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663511a9f68846040518263ffffffff1660e01b81526004016113ce9190614025565b5f604051808303815f87803b1580156113e5575f80fd5b505af11580156113f7573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d31a11584846020015160400151856020015160200151866060015160200151876040015160200151602001516040518663ffffffff1660e01b8152600401611481959493929190614db5565b5f604051808303815f87803b158015611498575f80fd5b505af11580156114aa573d5f803e3d5ffd5b50505050505050565b6114bb613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090614e57565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115d5613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90614ebf565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ce613368565b6116d75f6133e6565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016117349190614025565b5f604051808303815f875af115801561174f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061177791906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016117d49190614025565b6101c0604051808303815f875af11580156117f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118159190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16148061188c57503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff16145b6118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290614f27565b60405180910390fd5b5f600a8111156118de576118dd613c88565b5b815f0151600a8111156118f4576118f3613c88565b5b14611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192b90614ccf565b60405180910390fd5b81604001515f01515f0151816060015161194e9190614d1a565b421161198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690614d97565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663795f9abf846040518263ffffffff1660e01b81526004016119e99190614025565b5f604051808303815f87803b158015611a00575f80fd5b505af1158015611a12573d5f803e3d5ffd5b505050505f81602001511115611ac65760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ef0d89e84846020015160400151856040015160200151602001516040518463ffffffff1660e01b8152600401611a9493929190614f45565b5f604051808303815f87803b158015611aab575f80fd5b505af1158015611abd573d5f803e3d5ffd5b50505050611b7d565b5f81604001511115611b7c5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afe1dff784846020015160200151856060015160200151866040015160200151602001516040518563ffffffff1660e01b8152600401611b4e949392919061477d565b5f604051808303815f87803b158015611b65575f80fd5b505af1158015611b77573d5f803e3d5ffd5b505050505b5b505050565b611b8a6134a7565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90614fcb565b60405180910390fd5b611c21816134ae565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790615033565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401611cbb9190614025565b5f604051808303815f875af1158015611cd6573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611cfe91906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f846040518263ffffffff1660e01b8152600401611d5b9190614025565b6020604051808303815f875af1158015611d77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9b9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380ffdfe0846040518263ffffffff1660e01b8152600401611df79190614025565b5f604051808303815f87803b158015611e0e575f80fd5b505af1158015611e20573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2485cce84846020015160400151856020015160200151866060015160200151868860600151606001516040518763ffffffff1660e01b8152600401611ea896959493929190615051565b5f604051808303815f87803b158015611ebf575f80fd5b505af1158015611ed1573d5f803e3d5ffd5b50505050505050565b611ee26134a7565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614fcb565b60405180910390fd5b611f79816134ae565b611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90615033565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016120139190614025565b5f604051808303815f875af115801561202e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061205691906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b81526004016120b39190614025565b6020604051808303815f875af11580156120cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f39190614497565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016121509190614025565b6020604051808303815f875af115801561216c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121909190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663824518aa856040518263ffffffff1660e01b81526004016121ec9190614025565b5f604051808303815f87803b158015612203575f80fd5b505af1158015612215573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1f90728585602001516040015186602001516020015186886060015160200151878a60600151606001516040518863ffffffff1660e01b815260040161229f97969594939291906144d1565b5f604051808303815f87803b1580156122b6575f80fd5b505af11580156122c8573d5f803e3d5ffd5b5050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612329613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90615101565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b815260040161245d9190614025565b5f604051808303815f875af1158015612478573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906124a091906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016124fd9190614025565b6101c0604051808303815f875af115801561251a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253e9190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614806125b557503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16145b6125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90615169565b60405180910390fd5b6004600a81111561260857612607613c88565b5b815f0151600a81111561261e5761261d613c88565b5b1461265e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265590614ccf565b60405180910390fd5b8160400151604001515f01518160a001516126799190614d1a565b42116126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614d97565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016127159190614025565b6020604051808303815f875af1158015612731573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127559190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7b957d1856040518263ffffffff1660e01b81526004016127b19190614025565b5f604051808303815f87803b1580156127c8575f80fd5b505af11580156127da573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663823f3de185856020015160400151866020015160200151876060015160200151868960600151606001516040518763ffffffff1660e01b815260040161286296959493929190615051565b5f604051808303815f87803b158015612879575f80fd5b505af115801561288b573d5f803e3d5ffd5b5050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016128f09190614025565b5f604051808303815f875af115801561290b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061293391906143e8565b90505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016129909190614025565b6101c0604051808303815f875af11580156129ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d19190614c59565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906145f7565b60405180910390fd5b6002600a811115612a5d57612a5c613c88565b5b815f0151600a811115612a7357612a72613c88565b5b14612ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aaa90614ccf565b60405180910390fd5b8160400151604001515f01518160a00151612ace9190614d1a565b4211612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614d97565b60405180910390fd5b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b8152600401612b6a9190614025565b6020604051808303815f875af1158015612b86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612baa9190614497565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e850be37856040518263ffffffff1660e01b8152600401612c069190614025565b5f604051808303815f87803b158015612c1d575f80fd5b505af1158015612c2f573d5f803e3d5ffd5b5050505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a6726b58585602001516040015186602001516020015185886040015160400151602001516040518663ffffffff1660e01b8152600401612cb1959493929190614db5565b5f604051808303815f87803b158015612cc8575f80fd5b505af1158015612cda573d5f803e3d5ffd5b5050505050505050565b612cec613368565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d51906151f7565b60405180910390fd5b612d63816133e6565b50565b612d6e6135b6565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6370b0e878787876040518563ffffffff1660e01b8152600401612dcf949392919061531c565b5f604051808303815f875af1158015612dea573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612e1291906143e8565b90505f81602001516040015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490505f82602001516020015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490508180612e915750805b612ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec7906153b9565b60405180910390fd5b81156130165760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec95b967896040518263ffffffff1660e01b8152600401612f309190614025565b6101c0604051808303815f875af1158015612f4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f719190614c59565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e3868dc89856020015160400151866040015160200151602001516040518463ffffffff1660e01b8152600401612fe493929190614f45565b5f604051808303815f87803b158015612ffb575f80fd5b505af115801561300d573d5f803e3d5ffd5b50505050613163565b80156131625760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c4135da896040518263ffffffff1660e01b81526004016130769190614025565b6101c0604051808303815f875af1158015613093573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130b79190614c59565b5060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b918803589856020015160200151866060015160200151876040015160400151602001516040518563ffffffff1660e01b8152600401613134949392919061477d565b5f604051808303815f87803b15801561314b575f80fd5b505af115801561315d573d5f803e3d5ffd5b505050505b5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d896040518263ffffffff1660e01b81526004016131bd9190614025565b6101c0604051808303815f875af11580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614c59565b9350505050949350505050565b5f8060159054906101000a900460ff1615905080801561323c575060015f60149054906101000a900460ff1660ff16105b8061326a575061324b30613594565b158015613269575060015f60149054906101000a900460ff1660ff16145b5b6132a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a090615447565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156132e55760015f60156101000a81548160ff0219169083151502179055505b6132ee856114b3565b6132f784612321565b613300836115cd565b61330982610c54565b8015613361575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161335891906154b3565b60405180910390a15b5050505050565b6133706134a7565b73ffffffffffffffffffffffffffffffffffffffff1661338e6122d2565b73ffffffffffffffffffffffffffffffffffffffff16146133e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133db90615516565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8360046040518363ffffffff1660e01b815260040161350c929190613f2f565b6020604051808303815f875af1158015613528573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354c9190613f92565b61358b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135829061557e565b60405180910390fd5b60019050919050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b604051806101c001604052805f600a8111156135d5576135d4613c88565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61365282613629565b9050919050565b61366281613648565b82525050565b5f60208201905061367b5f830184613659565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6136e08261369a565b810181811067ffffffffffffffff821117156136ff576136fe6136aa565b5b80604052505050565b5f613711613681565b905061371d82826136d7565b919050565b5f67ffffffffffffffff82111561373c5761373b6136aa565b5b6137458261369a565b9050602081019050919050565b828183375f83830152505050565b5f61377261376d84613722565b613708565b90508281526020810184848401111561378e5761378d613696565b5b613799848285613752565b509392505050565b5f82601f8301126137b5576137b4613692565b5b81356137c5848260208601613760565b91505092915050565b5f602082840312156137e3576137e261368a565b5b5f82013567ffffffffffffffff811115613800576137ff61368e565b5b61380c848285016137a1565b91505092915050565b5f819050919050565b61382781613815565b8114613831575f80fd5b50565b5f813590506138428161381e565b92915050565b5f805f80608085870312156138605761385f61368a565b5b5f85013567ffffffffffffffff81111561387d5761387c61368e565b5b613889878288016137a1565b945050602085013567ffffffffffffffff8111156138aa576138a961368e565b5b6138b6878288016137a1565b935050604085013567ffffffffffffffff8111156138d7576138d661368e565b5b6138e3878288016137a1565b92505060606138f487828801613834565b91505092959194509250565b61390981613648565b8114613913575f80fd5b50565b5f8135905061392481613900565b92915050565b5f6020828403121561393f5761393e61368a565b5b5f61394c84828501613916565b91505092915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115613977576139766136aa565b5b602082029050602081019050919050565b5f80fd5b5f61399e6139998461395d565b613708565b905080838252602082019050602084028301858111156139c1576139c0613988565b5b835b818110156139ea57806139d68882613916565b8452602084019350506020810190506139c3565b5050509392505050565b5f82601f830112613a0857613a07613692565b5b8135613a1884826020860161398c565b91505092915050565b5f60808284031215613a3657613a35613955565b5b613a406080613708565b90505f613a4f84828501613916565b5f830152506020613a6284828501613916565b6020830152506040613a7684828501613916565b604083015250606082013567ffffffffffffffff811115613a9a57613a99613959565b5b613aa6848285016139f4565b60608301525092915050565b5f60408284031215613ac757613ac6613955565b5b613ad16040613708565b90505f613ae084828501613834565b5f830152506020613af384828501613834565b60208301525092915050565b5f6101008284031215613b1557613b14613955565b5b613b1f6080613708565b90505f613b2e84828501613ab2565b5f830152506040613b4184828501613ab2565b6020830152506080613b5584828501613ab2565b60408301525060c0613b6984828501613ab2565b60608301525092915050565b5f60808284031215613b8a57613b89613955565b5b613b946080613708565b90505f613ba384828501613834565b5f830152506020613bb684828501613834565b6020830152506040613bca84828501613834565b6040830152506060613bde84828501613834565b60608301525092915050565b5f805f806101c08587031215613c0357613c0261368a565b5b5f85013567ffffffffffffffff811115613c2057613c1f61368e565b5b613c2c878288016137a1565b945050602085013567ffffffffffffffff811115613c4d57613c4c61368e565b5b613c5987828801613a21565b9350506040613c6a87828801613aff565b925050610140613c7c87828801613b75565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b8110613cc657613cc5613c88565b5b50565b5f819050613cd682613cb5565b919050565b5f613ce582613cc9565b9050919050565b613cf581613cdb565b82525050565b613d0481613815565b82525050565b6101c082015f820151613d1f5f850182613cec565b506020820151613d326020850182613cfb565b506040820151613d456040850182613cfb565b506060820151613d586060850182613cfb565b506080820151613d6b6080850182613cfb565b5060a0820151613d7e60a0850182613cfb565b5060c0820151613d9160c0850182613cfb565b5060e0820151613da460e0850182613cfb565b50610100820151613db9610100850182613cfb565b50610120820151613dce610120850182613cfb565b50610140820151613de3610140850182613cfb565b50610160820151613df8610160850182613cfb565b50610180820151613e0d610180850182613cfb565b506101a0820151613e226101a0850182613cfb565b50505050565b5f6101c082019050613e3c5f830184613d0a565b92915050565b5f805f8060808587031215613e5a57613e5961368a565b5b5f613e6787828801613916565b9450506020613e7887828801613916565b9350506040613e8987828801613916565b9250506060613e9a87828801613916565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613edd578082015181840152602081019050613ec2565b5f8484015250505050565b5f613ef282613ea6565b613efc8185613eb0565b9350613f0c818560208601613ec0565b613f158161369a565b840191505092915050565b613f2981613cdb565b82525050565b5f6040820190508181035f830152613f478185613ee8565b9050613f566020830184613f20565b9392505050565b5f8115159050919050565b613f7181613f5d565b8114613f7b575f80fd5b50565b5f81519050613f8c81613f68565b92915050565b5f60208284031215613fa757613fa661368a565b5b5f613fb484828501613f7e565b91505092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613ff1601083613eb0565b9150613ffc82613fbd565b602082019050919050565b5f6020820190508181035f83015261401e81613fe5565b9050919050565b5f6020820190508181035f83015261403d8184613ee8565b905092915050565b5f61405761405284613722565b613708565b90508281526020810184848401111561407357614072613696565b5b61407e848285613ec0565b509392505050565b5f82601f83011261409a57614099613692565b5b81516140aa848260208601614045565b91505092915050565b5f815190506140c181613900565b92915050565b5f6140d96140d48461395d565b613708565b905080838252602082019050602084028301858111156140fc576140fb613988565b5b835b81811015614125578061411188826140b3565b8452602084019350506020810190506140fe565b5050509392505050565b5f82601f83011261414357614142613692565b5b81516141538482602086016140c7565b91505092915050565b5f6080828403121561417157614170613955565b5b61417b6080613708565b90505f61418a848285016140b3565b5f83015250602061419d848285016140b3565b60208301525060406141b1848285016140b3565b604083015250606082015167ffffffffffffffff8111156141d5576141d4613959565b5b6141e18482850161412f565b60608301525092915050565b5f815190506141fb8161381e565b92915050565b5f6040828403121561421657614215613955565b5b6142206040613708565b90505f61422f848285016141ed565b5f830152506020614242848285016141ed565b60208301525092915050565b5f610100828403121561426457614263613955565b5b61426e6080613708565b90505f61427d84828501614201565b5f83015250604061429084828501614201565b60208301525060806142a484828501614201565b60408301525060c06142b884828501614201565b60608301525092915050565b5f608082840312156142d9576142d8613955565b5b6142e36080613708565b90505f6142f2848285016141ed565b5f830152506020614305848285016141ed565b6020830152506040614319848285016141ed565b604083015250606061432d848285016141ed565b60608301525092915050565b5f6101c0828403121561434f5761434e613955565b5b6143596080613708565b90505f82015167ffffffffffffffff81111561437857614377613959565b5b61438484828501614086565b5f83015250602082015167ffffffffffffffff8111156143a7576143a6613959565b5b6143b38482850161415c565b60208301525060406143c78482850161424e565b6040830152506101406143dc848285016142c4565b60608301525092915050565b5f602082840312156143fd576143fc61368a565b5b5f82015167ffffffffffffffff81111561441a5761441961368e565b5b61442684828501614339565b91505092915050565b7f4f6e6c79204a43000000000000000000000000000000000000000000000000005f82015250565b5f614463600783613eb0565b915061446e8261442f565b602082019050919050565b5f6020820190508181035f83015261449081614457565b9050919050565b5f602082840312156144ac576144ab61368a565b5b5f6144b9848285016141ed565b91505092915050565b6144cb81613815565b82525050565b5f60e0820190508181035f8301526144e9818a613ee8565b90506144f86020830189613659565b6145056040830188613659565b61451260608301876144c2565b61451f60808301866144c2565b61452c60a08301856144c2565b61453960c08301846144c2565b98975050505050505050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f614579600a83613eb0565b915061458482614545565b602082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f6e6c79205250000000000000000000000000000000000000000000000000005f82015250565b5f6145e1600783613eb0565b91506145ec826145ad565b602082019050919050565b5f6020820190508181035f83015261460e816145d5565b9050919050565b5f6080820190508181035f83015261462d8187613ee8565b905081810360208301526146418186613ee8565b905081810360408301526146558185613ee8565b905061466460608301846144c2565b95945050505050565b5f6080828403121561468257614681613955565b5b61468c6080613708565b90505f82015167ffffffffffffffff8111156146ab576146aa613959565b5b6146b784828501614086565b5f83015250602082015167ffffffffffffffff8111156146da576146d9613959565b5b6146e684828501614086565b602083015250604082015167ffffffffffffffff81111561470a57614709613959565b5b61471684828501614086565b604083015250606061472a848285016141ed565b60608301525092915050565b5f6020828403121561474b5761474a61368a565b5b5f82015167ffffffffffffffff8111156147685761476761368e565b5b6147748482850161466d565b91505092915050565b5f6080820190508181035f8301526147958187613ee8565b90506147a46020830186613659565b6147b160408301856144c2565b6147be60608301846144c2565b95945050505050565b7f4d6564696174696f6e20616464726573730000000000000000000000000000005f82015250565b5f6147fb601183613eb0565b9150614806826147c7565b602082019050919050565b5f6020820190508181035f830152614828816147ef565b9050919050565b5f82825260208201905092915050565b5f61484982613ea6565b614853818561482f565b9350614863818560208601613ec0565b61486c8161369a565b840191505092915050565b61488081613648565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6148ba8383614877565b60208301905092915050565b5f602082019050919050565b5f6148dc82614886565b6148e68185614890565b93506148f1836148a0565b805f5b8381101561492157815161490888826148af565b9750614913836148c6565b9250506001810190506148f4565b5085935050505092915050565b5f608083015f8301516149435f860182614877565b5060208301516149566020860182614877565b5060408301516149696040860182614877565b506060830151848203606086015261498182826148d2565b9150508091505092915050565b604082015f8201516149a25f850182613cfb565b5060208201516149b56020850182613cfb565b50505050565b61010082015f8201516149d05f85018261498e565b5060208201516149e3604085018261498e565b5060408201516149f6608085018261498e565b506060820151614a0960c085018261498e565b50505050565b608082015f820151614a235f850182613cfb565b506020820151614a366020850182613cfb565b506040820151614a496040850182613cfb565b506060820151614a5c6060850182613cfb565b50505050565b5f6101c083015f8301518482035f860152614a7d828261483f565b91505060208301518482036020860152614a97828261492e565b9150506040830151614aac60408601826149bb565b506060830151614ac0610140860182614a0f565b508091505092915050565b5f6020820190508181035f830152614ae38184614a62565b905092915050565b600b8110614af7575f80fd5b50565b5f81519050614b0881614aeb565b92915050565b5f6101c08284031215614b2457614b23613955565b5b614b2f6101c0613708565b90505f614b3e84828501614afa565b5f830152506020614b51848285016141ed565b6020830152506040614b65848285016141ed565b6040830152506060614b79848285016141ed565b6060830152506080614b8d848285016141ed565b60808301525060a0614ba1848285016141ed565b60a08301525060c0614bb5848285016141ed565b60c08301525060e0614bc9848285016141ed565b60e083015250610100614bde848285016141ed565b61010083015250610120614bf4848285016141ed565b61012083015250610140614c0a848285016141ed565b61014083015250610160614c20848285016141ed565b61016083015250610180614c36848285016141ed565b610180830152506101a0614c4c848285016141ed565b6101a08301525092915050565b5f6101c08284031215614c6f57614c6e61368a565b5b5f614c7c84828501614b0e565b91505092915050565b7f4e6f7420636f72726563742073746174650000000000000000000000000000005f82015250565b5f614cb9601183613eb0565b9150614cc482614c85565b602082019050919050565b5f6020820190508181035f830152614ce681614cad565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614d2482613815565b9150614d2f83613815565b9250828201905080821115614d4757614d46614ced565b5b92915050565b7f4e6f742074696d6564206f7574000000000000000000000000000000000000005f82015250565b5f614d81600d83613eb0565b9150614d8c82614d4d565b602082019050919050565b5f6020820190508181035f830152614dae81614d75565b9050919050565b5f60a0820190508181035f830152614dcd8188613ee8565b9050614ddc6020830187613659565b614de96040830186613659565b614df660608301856144c2565b614e0360808301846144c2565b9695505050505050565b7f53746f72616765206164647265737300000000000000000000000000000000005f82015250565b5f614e41600f83613eb0565b9150614e4c82614e0d565b602082019050919050565b5f6020820190508181035f830152614e6e81614e35565b9050919050565b7f5061796d656e74732061646472657373000000000000000000000000000000005f82015250565b5f614ea9601083613eb0565b9150614eb482614e75565b602082019050919050565b5f6020820190508181035f830152614ed681614e9d565b9050919050565b7f4f6e6c79204a43206f72205250000000000000000000000000000000000000005f82015250565b5f614f11600d83613eb0565b9150614f1c82614edd565b602082019050919050565b5f6020820190508181035f830152614f3e81614f05565b9050919050565b5f6060820190508181035f830152614f5d8186613ee8565b9050614f6c6020830185613659565b614f7960408301846144c2565b949350505050565b7f4f6e6c79206d6564696174696f6e0000000000000000000000000000000000005f82015250565b5f614fb5600e83613eb0565b9150614fc082614f81565b602082019050919050565b5f6020820190508181035f830152614fe281614fa9565b9050919050565b7f43616e6e6f74206d6564696174650000000000000000000000000000000000005f82015250565b5f61501d600e83613eb0565b915061502882614fe9565b602082019050919050565b5f6020820190508181035f83015261504a81615011565b9050919050565b5f60c0820190508181035f8301526150698189613ee8565b90506150786020830188613659565b6150856040830187613659565b61509260608301866144c2565b61509f60808301856144c2565b6150ac60a08301846144c2565b979650505050505050565b7f55736572732061646472657373000000000000000000000000000000000000005f82015250565b5f6150eb600d83613eb0565b91506150f6826150b7565b602082019050919050565b5f6020820190508181035f830152615118816150df565b9050919050565b7f4f6e6c79205250206f72204a43000000000000000000000000000000000000005f82015250565b5f615153600d83613eb0565b915061515e8261511f565b602082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151e1602683613eb0565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b5f608083015f83015161522a5f860182614877565b50602083015161523d6020860182614877565b5060408301516152506040860182614877565b506060830151848203606086015261526882826148d2565b9150508091505092915050565b61010082015f82015161528a5f85018261498e565b50602082015161529d604085018261498e565b5060408201516152b0608085018261498e565b5060608201516152c360c085018261498e565b50505050565b608082015f8201516152dd5f850182613cfb565b5060208201516152f06020850182613cfb565b5060408201516153036040850182613cfb565b5060608201516153166060850182613cfb565b50505050565b5f6101c0820190508181035f8301526153358187613ee8565b905081810360208301526153498186615215565b90506153586040830185615275565b6153666101408301846152c9565b95945050505050565b7f4f6e6c79205250202f204a4300000000000000000000000000000000000000005f82015250565b5f6153a3600c83613eb0565b91506153ae8261536f565b602082019050919050565b5f6020820190508181035f8301526153d081615397565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f615431602e83613eb0565b915061543c826153d7565b604082019050919050565b5f6020820190508181035f83015261545e81615425565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61549d61549861549384615465565b61547a565b61546e565b9050919050565b6154ad81615483565b82525050565b5f6020820190506154c65f8301846154a4565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f615500602083613eb0565b915061550b826154cc565b602082019050919050565b5f6020820190508181035f83015261552d816154f4565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f615568600e83613eb0565b915061557382615534565b602082019050919050565b5f6020820190508181035f8301526155958161555c565b905091905056fea2646970667358221220b2835d8b5bbf3339537b330cb1bfc8c4f7c564dd7daee727b6e3fb96ce28100a64736f6c63430008150033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"agree\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getJobCreatorAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMediationAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPaymentsAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUsersAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_jobCreatorAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_jobCreatorAddress\",\"type\":\"address\"}],\"name\":\"setJobCreatorAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mediationAddress\",\"type\":\"address\"}],\"name\":\"setMediationAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentsAddress\",\"type\":\"address\"}],\"name\":\"setPaymentsAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageAddress\",\"type\":\"address\"}],\"name\":\"setStorageAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_usersAddress\",\"type\":\"address\"}],\"name\":\"setUsersAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5062000031620000256200003760201b60201c565b6200003e60201b60201c565b620000ff565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b615788806200010d5f395ff3fe608060405234801561000f575f80fd5b5060043610610156575f3560e01c8063795f9abf116100c1578063bbfff47d1161007a578063bbfff47d1461034a578063d48b108414610366578063e7b957d114610384578063e850be37146103a0578063f2fde38b146103bc578063f583b125146103d857610156565b8063795f9abf1461029e57806380ffdfe0146102ba578063824518aa146102d65780638da5cb5b146102f257806393dbed3e14610310578063b4031e541461032e57610156565b806343391cca1161011357806343391cca1461020857806346834d1e14610224578063511a9f681461024057806359b910d61461025c578063640e570f14610278578063715018a61461029457610156565b80630aca35ce1461015a5780631459457a14610178578063155329ea14610194578063297f9e55146101b2578063393a4d34146101ce5780633955548e146101ec575b5f80fd5b610162610408565b60405161016f91906137a3565b60405180910390f35b610192600480360381019061018d91906137f7565b610430565b005b61019c610597565b6040516101a991906137a3565b60405180910390f35b6101cc60048036038101906101c791906139aa565b6105bf565b005b6101d6610a2f565b6040516101e391906137a3565b60405180910390f35b61020660048036038101906102019190613a24565b610a57565b005b610222600480360381019061021d9190613adc565b610e33565b005b61023e600480360381019061023991906139aa565b610f2c565b005b61025a600480360381019061025591906139aa565b6112d9565b005b61027660048036038101906102719190613adc565b611692565b005b610292600480360381019061028d9190613adc565b6117ac565b005b61029c6118a5565b005b6102b860048036038101906102b391906139aa565b6118b8565b005b6102d460048036038101906102cf91906139aa565b611d61565b005b6102f060048036038101906102eb91906139aa565b6120b9565b005b6102fa6124b1565b60405161030791906137a3565b60405180910390f35b6103186124d8565b60405161032591906137a3565b60405180910390f35b61034860048036038101906103439190613adc565b612500565b005b610364600480360381019061035f9190613adc565b6125b9565b005b61036e612672565b60405161037b91906137a3565b60405180910390f35b61039e600480360381019061039991906139aa565b61269a565b005b6103ba60048036038101906103b591906139aa565b612b2d565b005b6103d660048036038101906103d19190613adc565b612f7c565b005b6103f260048036038101906103ed9190613d9c565b612ffe565b6040516103ff9190613fda565b60405180910390f35b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060159054906101000a900460ff16159050808015610461575060015f60149054906101000a900460ff1660ff16105b8061048f5750610470306134a3565b15801561048e575060015f60149054906101000a900460ff1660ff16145b5b6104ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c590614074565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff160217905550801561050a5760015f60156101000a81548160ff0219169083151502179055505b61051386611692565b61051c856125b9565b610525846117ac565b61052e83610e33565b61053782612500565b801561058f575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161058691906140e0565b60405180910390a15b505050505050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b815260040161061c929190614172565b6020604051808303815f875af1158015610638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065c91906141d5565b61069b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106929061424a565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016106f69190614268565b5f604051808303815f875af1158015610711573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610739919061462b565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff16146107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a8906146bc565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b815260040161080c9190614268565b6020604051808303815f875af1158015610828573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084c91906146da565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016108a99190614268565b6020604051808303815f875af11580156108c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e991906146da565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663297f9e55856040518263ffffffff1660e01b81526004016109459190614268565b5f604051808303815f87803b15801561095c575f80fd5b505af115801561096e573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b13567148585602001516040015186602001516020015186886060015160200151878a6040015160400151602001516040518863ffffffff1660e01b81526004016109fc9796959493929190614714565b5f604051808303815f87803b158015610a13575f80fd5b505af1158015610a25573d5f803e3d5ffd5b5050505050505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8560016040518363ffffffff1660e01b8152600401610ab4929190614172565b6020604051808303815f875af1158015610ad0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af491906141d5565b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906147d2565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180866040518263ffffffff1660e01b8152600401610b8e9190614268565b5f604051808303815f875af1158015610ba9573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610bd1919061462b565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516040015173ffffffffffffffffffffffffffffffffffffffff1614610c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c409061483a565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633955548e868686866040518563ffffffff1660e01b8152600401610ca99493929190614858565b5f604051808303815f875af1158015610cc4573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610cec9190614979565b505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f876040518263ffffffff1660e01b8152600401610d489190614268565b6020604051808303815f875af1158015610d64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8891906146da565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309cab5108784602001516040015184866040015160200151602001516040518563ffffffff1660e01b8152600401610dfe94939291906149c0565b5f604051808303815f87803b158015610e15575f80fd5b505af1158015610e27573d5f803e3d5ffd5b50505050505050505050565b610e3b6134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea090614a54565b60405180910390fd5b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8260026040518363ffffffff1660e01b8152600401610f89929190614172565b6020604051808303815f875af1158015610fa5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc991906141d5565b611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061424a565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016110639190614268565b5f604051808303815f875af115801561107e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110a6919061462b565b90503273ffffffffffffffffffffffffffffffffffffffff1681602001516020015173ffffffffffffffffffffffffffffffffffffffff161461111e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611115906146bc565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346834d1e836040518263ffffffff1660e01b81526004016111789190614268565b5f604051808303815f87803b15801561118f575f80fd5b505af11580156111a1573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aea3825183836020015160200151846040015160400151602001518560600151606001516040518563ffffffff1660e01b815260040161122194939291906149c0565b5f604051808303815f87803b158015611238575f80fd5b505af115801561124a573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370bea207826040518263ffffffff1660e01b81526004016112a89190614d0e565b5f604051808303815f87803b1580156112bf575f80fd5b505af11580156112d1573d5f803e3d5ffd5b505050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016113349190614268565b5f604051808303815f875af115801561134f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611377919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016113d49190614268565b6101c0604051808303815f875af11580156113f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114159190614e9c565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff161461148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906146bc565b60405180910390fd5b6001600a8111156114a1576114a0613e3a565b5b815f0151600a8111156114b7576114b6613e3a565b5b146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614f12565b60405180910390fd5b8160400151602001515f015181608001516115129190614f5d565b4211611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614fda565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663511a9f68846040518263ffffffff1660e01b81526004016115ad9190614268565b5f604051808303815f87803b1580156115c4575f80fd5b505af11580156115d6573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d31a11584846020015160400151856020015160200151866060015160200151876040015160200151602001516040518663ffffffff1660e01b8152600401611660959493929190614ff8565b5f604051808303815f87803b158015611677575f80fd5b505af1158015611689573d5f803e3d5ffd5b50505050505050565b61169a6134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff9061509a565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117b46134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990615102565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad6134c5565b6118b65f613543565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016119139190614268565b5f604051808303815f875af115801561192e573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611956919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016119b39190614268565b6101c0604051808303815f875af11580156119d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f49190614e9c565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff161480611a6b57503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff16145b611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa19061516a565b60405180910390fd5b5f600a811115611abd57611abc613e3a565b5b815f0151600a811115611ad357611ad2613e3a565b5b14611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614f12565b60405180910390fd5b81604001515f01515f01518160600151611b2d9190614f5d565b4211611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614fda565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663795f9abf846040518263ffffffff1660e01b8152600401611bc89190614268565b5f604051808303815f87803b158015611bdf575f80fd5b505af1158015611bf1573d5f803e3d5ffd5b505050505f81602001511115611ca55760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ef0d89e84846020015160400151856040015160200151602001516040518463ffffffff1660e01b8152600401611c7393929190615188565b5f604051808303815f87803b158015611c8a575f80fd5b505af1158015611c9c573d5f803e3d5ffd5b50505050611d5c565b5f81604001511115611d5b5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afe1dff784846020015160200151856060015160200151866040015160200151602001516040518563ffffffff1660e01b8152600401611d2d94939291906149c0565b5f604051808303815f87803b158015611d44575f80fd5b505af1158015611d56573d5f803e3d5ffd5b505050505b5b505050565b611d69613604565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee9061520e565b60405180910390fd5b611e008161360b565b611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3690615276565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401611e9a9190614268565b5f604051808303815f875af1158015611eb5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611edd919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f846040518263ffffffff1660e01b8152600401611f3a9190614268565b6020604051808303815f875af1158015611f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7a91906146da565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380ffdfe0846040518263ffffffff1660e01b8152600401611fd69190614268565b5f604051808303815f87803b158015611fed575f80fd5b505af1158015611fff573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2485cce84846020015160400151856020015160200151866060015160200151868860600151606001516040518763ffffffff1660e01b815260040161208796959493929190615294565b5f604051808303815f87803b15801561209e575f80fd5b505af11580156120b0573d5f803e3d5ffd5b50505050505050565b6120c1613604565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121469061520e565b60405180910390fd5b6121588161360b565b612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e90615276565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016121f29190614268565b5f604051808303815f875af115801561220d573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612235919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373db5c6a846040518263ffffffff1660e01b81526004016122929190614268565b6020604051808303815f875af11580156122ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d291906146da565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b815260040161232f9190614268565b6020604051808303815f875af115801561234b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236f91906146da565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663824518aa856040518263ffffffff1660e01b81526004016123cb9190614268565b5f604051808303815f87803b1580156123e2575f80fd5b505af11580156123f4573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1f90728585602001516040015186602001516020015186886060015160200151878a60600151606001516040518863ffffffff1660e01b815260040161247e9796959493929190614714565b5f604051808303815f87803b158015612495575f80fd5b505af11580156124a7573d5f803e3d5ffd5b5050505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125086134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90615344565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125c16134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361262f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612626906153ac565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b81526004016126f59190614268565b5f604051808303815f875af1158015612710573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612738919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b81526004016127959190614268565b6101c0604051808303815f875af11580156127b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127d69190614e9c565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff16148061284d57503273ffffffffffffffffffffffffffffffffffffffff1682602001516020015173ffffffffffffffffffffffffffffffffffffffff16145b61288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390615414565b60405180910390fd5b6004600a8111156128a05761289f613e3a565b5b815f0151600a8111156128b6576128b5613e3a565b5b146128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed90614f12565b60405180910390fd5b8160400151604001515f01518160a001516129119190614f5d565b4211612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294990614fda565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b81526004016129ad9190614268565b6020604051808303815f875af11580156129c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ed91906146da565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7b957d1856040518263ffffffff1660e01b8152600401612a499190614268565b5f604051808303815f87803b158015612a60575f80fd5b505af1158015612a72573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663823f3de185856020015160400151866020015160200151876060015160200151868960600151606001516040518763ffffffff1660e01b8152600401612afa96959493929190615294565b5f604051808303815f87803b158015612b11575f80fd5b505af1158015612b23573d5f803e3d5ffd5b5050505050505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7079180836040518263ffffffff1660e01b8152600401612b889190614268565b5f604051808303815f875af1158015612ba3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190612bcb919061462b565b90505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d846040518263ffffffff1660e01b8152600401612c289190614268565b6101c0604051808303815f875af1158015612c45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c699190614e9c565b90503273ffffffffffffffffffffffffffffffffffffffff1682602001516040015173ffffffffffffffffffffffffffffffffffffffff1614612ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd89061483a565b60405180910390fd5b6002600a811115612cf557612cf4613e3a565b5b815f0151600a811115612d0b57612d0a613e3a565b5b14612d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4290614f12565b60405180910390fd5b8160400151604001515f01518160a00151612d669190614f5d565b4211612da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9e90614fda565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638224ce5f856040518263ffffffff1660e01b8152600401612e029190614268565b6020604051808303815f875af1158015612e1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4291906146da565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e850be37856040518263ffffffff1660e01b8152600401612e9e9190614268565b5f604051808303815f87803b158015612eb5575f80fd5b505af1158015612ec7573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a6726b58585602001516040015186602001516020015185886040015160400151602001516040518663ffffffff1660e01b8152600401612f49959493929190614ff8565b5f604051808303815f87803b158015612f60575f80fd5b505af1158015612f72573d5f803e3d5ffd5b5050505050505050565b612f846134c5565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe9906154a2565b60405180910390fd5b612ffb81613543565b50565b6130066136f1565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6370b0e878787876040518563ffffffff1660e01b815260040161306794939291906155c7565b5f604051808303815f875af1158015613082573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906130aa919061462b565b90505f81602001516040015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161490505f82602001516020015173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614905081806131295750805b613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f90615664565b60405180910390fd5b81156132ae5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec95b967896040518263ffffffff1660e01b81526004016131c89190614268565b6101c0604051808303815f875af11580156131e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132099190614e9c565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e3868dc89856020015160400151866040015160200151602001516040518463ffffffff1660e01b815260040161327c93929190615188565b5f604051808303815f87803b158015613293575f80fd5b505af11580156132a5573d5f803e3d5ffd5b505050506133fb565b80156133fa5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c4135da896040518263ffffffff1660e01b815260040161330e9190614268565b6101c0604051808303815f875af115801561332b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061334f9190614e9c565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b918803589856020015160200151866060015160200151876040015160400151602001516040518563ffffffff1660e01b81526004016133cc94939291906149c0565b5f604051808303815f87803b1580156133e3575f80fd5b505af11580156133f5573d5f803e3d5ffd5b505050505b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cdd82d1d896040518263ffffffff1660e01b81526004016134559190614268565b6101c0604051808303815f875af1158015613472573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134969190614e9c565b9350505050949350505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6134cd613604565b73ffffffffffffffffffffffffffffffffffffffff166134eb6124b1565b73ffffffffffffffffffffffffffffffffffffffff1614613541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613538906156cc565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b050e74b8360046040518363ffffffff1660e01b8152600401613669929190614172565b6020604051808303815f875af1158015613685573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a991906141d5565b6136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df90615734565b60405180910390fd5b60019050919050565b604051806101c001604052805f600a8111156137105761370f613e3a565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61378d82613764565b9050919050565b61379d81613783565b82525050565b5f6020820190506137b65f830184613794565b92915050565b5f604051905090565b5f80fd5b5f80fd5b6137d681613783565b81146137e0575f80fd5b50565b5f813590506137f1816137cd565b92915050565b5f805f805f60a086880312156138105761380f6137c5565b5b5f61381d888289016137e3565b955050602061382e888289016137e3565b945050604061383f888289016137e3565b9350506060613850888289016137e3565b9250506080613861888289016137e3565b9150509295509295909350565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138bc82613876565b810181811067ffffffffffffffff821117156138db576138da613886565b5b80604052505050565b5f6138ed6137bc565b90506138f982826138b3565b919050565b5f67ffffffffffffffff82111561391857613917613886565b5b61392182613876565b9050602081019050919050565b828183375f83830152505050565b5f61394e613949846138fe565b6138e4565b90508281526020810184848401111561396a57613969613872565b5b61397584828561392e565b509392505050565b5f82601f8301126139915761399061386e565b5b81356139a184826020860161393c565b91505092915050565b5f602082840312156139bf576139be6137c5565b5b5f82013567ffffffffffffffff8111156139dc576139db6137c9565b5b6139e88482850161397d565b91505092915050565b5f819050919050565b613a03816139f1565b8114613a0d575f80fd5b50565b5f81359050613a1e816139fa565b92915050565b5f805f8060808587031215613a3c57613a3b6137c5565b5b5f85013567ffffffffffffffff811115613a5957613a586137c9565b5b613a658782880161397d565b945050602085013567ffffffffffffffff811115613a8657613a856137c9565b5b613a928782880161397d565b935050604085013567ffffffffffffffff811115613ab357613ab26137c9565b5b613abf8782880161397d565b9250506060613ad087828801613a10565b91505092959194509250565b5f60208284031215613af157613af06137c5565b5b5f613afe848285016137e3565b91505092915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115613b2957613b28613886565b5b602082029050602081019050919050565b5f80fd5b5f613b50613b4b84613b0f565b6138e4565b90508083825260208201905060208402830185811115613b7357613b72613b3a565b5b835b81811015613b9c5780613b8888826137e3565b845260208401935050602081019050613b75565b5050509392505050565b5f82601f830112613bba57613bb961386e565b5b8135613bca848260208601613b3e565b91505092915050565b5f60808284031215613be857613be7613b07565b5b613bf260806138e4565b90505f613c01848285016137e3565b5f830152506020613c14848285016137e3565b6020830152506040613c28848285016137e3565b604083015250606082013567ffffffffffffffff811115613c4c57613c4b613b0b565b5b613c5884828501613ba6565b60608301525092915050565b5f60408284031215613c7957613c78613b07565b5b613c8360406138e4565b90505f613c9284828501613a10565b5f830152506020613ca584828501613a10565b60208301525092915050565b5f6101008284031215613cc757613cc6613b07565b5b613cd160806138e4565b90505f613ce084828501613c64565b5f830152506040613cf384828501613c64565b6020830152506080613d0784828501613c64565b60408301525060c0613d1b84828501613c64565b60608301525092915050565b5f60808284031215613d3c57613d3b613b07565b5b613d4660806138e4565b90505f613d5584828501613a10565b5f830152506020613d6884828501613a10565b6020830152506040613d7c84828501613a10565b6040830152506060613d9084828501613a10565b60608301525092915050565b5f805f806101c08587031215613db557613db46137c5565b5b5f85013567ffffffffffffffff811115613dd257613dd16137c9565b5b613dde8782880161397d565b945050602085013567ffffffffffffffff811115613dff57613dfe6137c9565b5b613e0b87828801613bd3565b9350506040613e1c87828801613cb1565b925050610140613e2e87828801613d27565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b8110613e7857613e77613e3a565b5b50565b5f819050613e8882613e67565b919050565b5f613e9782613e7b565b9050919050565b613ea781613e8d565b82525050565b613eb6816139f1565b82525050565b6101c082015f820151613ed15f850182613e9e565b506020820151613ee46020850182613ead565b506040820151613ef76040850182613ead565b506060820151613f0a6060850182613ead565b506080820151613f1d6080850182613ead565b5060a0820151613f3060a0850182613ead565b5060c0820151613f4360c0850182613ead565b5060e0820151613f5660e0850182613ead565b50610100820151613f6b610100850182613ead565b50610120820151613f80610120850182613ead565b50610140820151613f95610140850182613ead565b50610160820151613faa610160850182613ead565b50610180820151613fbf610180850182613ead565b506101a0820151613fd46101a0850182613ead565b50505050565b5f6101c082019050613fee5f830184613ebc565b92915050565b5f82825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f61405e602e83613ff4565b915061406982614004565b604082019050919050565b5f6020820190508181035f83015261408b81614052565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6140ca6140c56140c084614092565b6140a7565b61409b565b9050919050565b6140da816140b0565b82525050565b5f6020820190506140f35f8301846140d1565b92915050565b5f81519050919050565b5f5b83811015614120578082015181840152602081019050614105565b5f8484015250505050565b5f614135826140f9565b61413f8185613ff4565b935061414f818560208601614103565b61415881613876565b840191505092915050565b61416c81613e8d565b82525050565b5f6040820190508181035f83015261418a818561412b565b90506141996020830184614163565b9392505050565b5f8115159050919050565b6141b4816141a0565b81146141be575f80fd5b50565b5f815190506141cf816141ab565b92915050565b5f602082840312156141ea576141e96137c5565b5b5f6141f7848285016141c1565b91505092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f614234601083613ff4565b915061423f82614200565b602082019050919050565b5f6020820190508181035f83015261426181614228565b9050919050565b5f6020820190508181035f830152614280818461412b565b905092915050565b5f61429a614295846138fe565b6138e4565b9050828152602081018484840111156142b6576142b5613872565b5b6142c1848285614103565b509392505050565b5f82601f8301126142dd576142dc61386e565b5b81516142ed848260208601614288565b91505092915050565b5f81519050614304816137cd565b92915050565b5f61431c61431784613b0f565b6138e4565b9050808382526020820190506020840283018581111561433f5761433e613b3a565b5b835b81811015614368578061435488826142f6565b845260208401935050602081019050614341565b5050509392505050565b5f82601f8301126143865761438561386e565b5b815161439684826020860161430a565b91505092915050565b5f608082840312156143b4576143b3613b07565b5b6143be60806138e4565b90505f6143cd848285016142f6565b5f8301525060206143e0848285016142f6565b60208301525060406143f4848285016142f6565b604083015250606082015167ffffffffffffffff81111561441857614417613b0b565b5b61442484828501614372565b60608301525092915050565b5f8151905061443e816139fa565b92915050565b5f6040828403121561445957614458613b07565b5b61446360406138e4565b90505f61447284828501614430565b5f83015250602061448584828501614430565b60208301525092915050565b5f61010082840312156144a7576144a6613b07565b5b6144b160806138e4565b90505f6144c084828501614444565b5f8301525060406144d384828501614444565b60208301525060806144e784828501614444565b60408301525060c06144fb84828501614444565b60608301525092915050565b5f6080828403121561451c5761451b613b07565b5b61452660806138e4565b90505f61453584828501614430565b5f83015250602061454884828501614430565b602083015250604061455c84828501614430565b604083015250606061457084828501614430565b60608301525092915050565b5f6101c0828403121561459257614591613b07565b5b61459c60806138e4565b90505f82015167ffffffffffffffff8111156145bb576145ba613b0b565b5b6145c7848285016142c9565b5f83015250602082015167ffffffffffffffff8111156145ea576145e9613b0b565b5b6145f68482850161439f565b602083015250604061460a84828501614491565b60408301525061014061461f84828501614507565b60608301525092915050565b5f602082840312156146405761463f6137c5565b5b5f82015167ffffffffffffffff81111561465d5761465c6137c9565b5b6146698482850161457c565b91505092915050565b7f4f6e6c79204a43000000000000000000000000000000000000000000000000005f82015250565b5f6146a6600783613ff4565b91506146b182614672565b602082019050919050565b5f6020820190508181035f8301526146d38161469a565b9050919050565b5f602082840312156146ef576146ee6137c5565b5b5f6146fc84828501614430565b91505092915050565b61470e816139f1565b82525050565b5f60e0820190508181035f83015261472c818a61412b565b905061473b6020830189613794565b6147486040830188613794565b6147556060830187614705565b6147626080830186614705565b61476f60a0830185614705565b61477c60c0830184614705565b98975050505050505050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f6147bc600a83613ff4565b91506147c782614788565b602082019050919050565b5f6020820190508181035f8301526147e9816147b0565b9050919050565b7f4f6e6c79205250000000000000000000000000000000000000000000000000005f82015250565b5f614824600783613ff4565b915061482f826147f0565b602082019050919050565b5f6020820190508181035f83015261485181614818565b9050919050565b5f6080820190508181035f830152614870818761412b565b90508181036020830152614884818661412b565b90508181036040830152614898818561412b565b90506148a76060830184614705565b95945050505050565b5f608082840312156148c5576148c4613b07565b5b6148cf60806138e4565b90505f82015167ffffffffffffffff8111156148ee576148ed613b0b565b5b6148fa848285016142c9565b5f83015250602082015167ffffffffffffffff81111561491d5761491c613b0b565b5b614929848285016142c9565b602083015250604082015167ffffffffffffffff81111561494d5761494c613b0b565b5b614959848285016142c9565b604083015250606061496d84828501614430565b60608301525092915050565b5f6020828403121561498e5761498d6137c5565b5b5f82015167ffffffffffffffff8111156149ab576149aa6137c9565b5b6149b7848285016148b0565b91505092915050565b5f6080820190508181035f8301526149d8818761412b565b90506149e76020830186613794565b6149f46040830185614705565b614a016060830184614705565b95945050505050565b7f4d6564696174696f6e20616464726573730000000000000000000000000000005f82015250565b5f614a3e601183613ff4565b9150614a4982614a0a565b602082019050919050565b5f6020820190508181035f830152614a6b81614a32565b9050919050565b5f82825260208201905092915050565b5f614a8c826140f9565b614a968185614a72565b9350614aa6818560208601614103565b614aaf81613876565b840191505092915050565b614ac381613783565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f614afd8383614aba565b60208301905092915050565b5f602082019050919050565b5f614b1f82614ac9565b614b298185614ad3565b9350614b3483614ae3565b805f5b83811015614b64578151614b4b8882614af2565b9750614b5683614b09565b925050600181019050614b37565b5085935050505092915050565b5f608083015f830151614b865f860182614aba565b506020830151614b996020860182614aba565b506040830151614bac6040860182614aba565b5060608301518482036060860152614bc48282614b15565b9150508091505092915050565b604082015f820151614be55f850182613ead565b506020820151614bf86020850182613ead565b50505050565b61010082015f820151614c135f850182614bd1565b506020820151614c266040850182614bd1565b506040820151614c396080850182614bd1565b506060820151614c4c60c0850182614bd1565b50505050565b608082015f820151614c665f850182613ead565b506020820151614c796020850182613ead565b506040820151614c8c6040850182613ead565b506060820151614c9f6060850182613ead565b50505050565b5f6101c083015f8301518482035f860152614cc08282614a82565b91505060208301518482036020860152614cda8282614b71565b9150506040830151614cef6040860182614bfe565b506060830151614d03610140860182614c52565b508091505092915050565b5f6020820190508181035f830152614d268184614ca5565b905092915050565b600b8110614d3a575f80fd5b50565b5f81519050614d4b81614d2e565b92915050565b5f6101c08284031215614d6757614d66613b07565b5b614d726101c06138e4565b90505f614d8184828501614d3d565b5f830152506020614d9484828501614430565b6020830152506040614da884828501614430565b6040830152506060614dbc84828501614430565b6060830152506080614dd084828501614430565b60808301525060a0614de484828501614430565b60a08301525060c0614df884828501614430565b60c08301525060e0614e0c84828501614430565b60e083015250610100614e2184828501614430565b61010083015250610120614e3784828501614430565b61012083015250610140614e4d84828501614430565b61014083015250610160614e6384828501614430565b61016083015250610180614e7984828501614430565b610180830152506101a0614e8f84828501614430565b6101a08301525092915050565b5f6101c08284031215614eb257614eb16137c5565b5b5f614ebf84828501614d51565b91505092915050565b7f4e6f7420636f72726563742073746174650000000000000000000000000000005f82015250565b5f614efc601183613ff4565b9150614f0782614ec8565b602082019050919050565b5f6020820190508181035f830152614f2981614ef0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f67826139f1565b9150614f72836139f1565b9250828201905080821115614f8a57614f89614f30565b5b92915050565b7f4e6f742074696d6564206f7574000000000000000000000000000000000000005f82015250565b5f614fc4600d83613ff4565b9150614fcf82614f90565b602082019050919050565b5f6020820190508181035f830152614ff181614fb8565b9050919050565b5f60a0820190508181035f830152615010818861412b565b905061501f6020830187613794565b61502c6040830186613794565b6150396060830185614705565b6150466080830184614705565b9695505050505050565b7f53746f72616765206164647265737300000000000000000000000000000000005f82015250565b5f615084600f83613ff4565b915061508f82615050565b602082019050919050565b5f6020820190508181035f8301526150b181615078565b9050919050565b7f5061796d656e74732061646472657373000000000000000000000000000000005f82015250565b5f6150ec601083613ff4565b91506150f7826150b8565b602082019050919050565b5f6020820190508181035f830152615119816150e0565b9050919050565b7f4f6e6c79204a43206f72205250000000000000000000000000000000000000005f82015250565b5f615154600d83613ff4565b915061515f82615120565b602082019050919050565b5f6020820190508181035f83015261518181615148565b9050919050565b5f6060820190508181035f8301526151a0818661412b565b90506151af6020830185613794565b6151bc6040830184614705565b949350505050565b7f4f6e6c79206d6564696174696f6e0000000000000000000000000000000000005f82015250565b5f6151f8600e83613ff4565b9150615203826151c4565b602082019050919050565b5f6020820190508181035f830152615225816151ec565b9050919050565b7f43616e6e6f74206d6564696174650000000000000000000000000000000000005f82015250565b5f615260600e83613ff4565b915061526b8261522c565b602082019050919050565b5f6020820190508181035f83015261528d81615254565b9050919050565b5f60c0820190508181035f8301526152ac818961412b565b90506152bb6020830188613794565b6152c86040830187613794565b6152d56060830186614705565b6152e26080830185614705565b6152ef60a0830184614705565b979650505050505050565b7f4a6f6243726561746f72206164647265737300000000000000000000000000005f82015250565b5f61532e601283613ff4565b9150615339826152fa565b602082019050919050565b5f6020820190508181035f83015261535b81615322565b9050919050565b7f55736572732061646472657373000000000000000000000000000000000000005f82015250565b5f615396600d83613ff4565b91506153a182615362565b602082019050919050565b5f6020820190508181035f8301526153c38161538a565b9050919050565b7f4f6e6c79205250206f72204a43000000000000000000000000000000000000005f82015250565b5f6153fe600d83613ff4565b9150615409826153ca565b602082019050919050565b5f6020820190508181035f83015261542b816153f2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61548c602683613ff4565b915061549782615432565b604082019050919050565b5f6020820190508181035f8301526154b981615480565b9050919050565b5f608083015f8301516154d55f860182614aba565b5060208301516154e86020860182614aba565b5060408301516154fb6040860182614aba565b50606083015184820360608601526155138282614b15565b9150508091505092915050565b61010082015f8201516155355f850182614bd1565b5060208201516155486040850182614bd1565b50604082015161555b6080850182614bd1565b50606082015161556e60c0850182614bd1565b50505050565b608082015f8201516155885f850182613ead565b50602082015161559b6020850182613ead565b5060408201516155ae6040850182613ead565b5060608201516155c16060850182613ead565b50505050565b5f6101c0820190508181035f8301526155e0818761412b565b905081810360208301526155f481866154c0565b90506156036040830185615520565b615611610140830184615574565b95945050505050565b7f4f6e6c79205250202f204a4300000000000000000000000000000000000000005f82015250565b5f61564e600c83613ff4565b91506156598261561a565b602082019050919050565b5f6020820190508181035f83015261567b81615642565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6156b6602083613ff4565b91506156c182615682565b602082019050919050565b5f6020820190508181035f8301526156e3816156aa565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f61571e600e83613ff4565b9150615729826156ea565b602082019050919050565b5f6020820190508181035f83015261574b81615712565b905091905056fea26469706673582212208a18870ef661c5827e4600bb15f14e761beb5f5522a98082c007f3eb3b6e7b4264736f6c63430008150033", } // ControllerABI is the input ABI used to generate the binding from. @@ -250,6 +250,37 @@ func (_Controller *ControllerTransactorRaw) Transact(opts *bind.TransactOpts, me return _Controller.Contract.contract.Transact(opts, method, params...) } +// GetJobCreatorAddress is a free data retrieval call binding the contract method 0x0aca35ce. +// +// Solidity: function getJobCreatorAddress() view returns(address) +func (_Controller *ControllerCaller) GetJobCreatorAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Controller.contract.Call(opts, &out, "getJobCreatorAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetJobCreatorAddress is a free data retrieval call binding the contract method 0x0aca35ce. +// +// Solidity: function getJobCreatorAddress() view returns(address) +func (_Controller *ControllerSession) GetJobCreatorAddress() (common.Address, error) { + return _Controller.Contract.GetJobCreatorAddress(&_Controller.CallOpts) +} + +// GetJobCreatorAddress is a free data retrieval call binding the contract method 0x0aca35ce. +// +// Solidity: function getJobCreatorAddress() view returns(address) +func (_Controller *ControllerCallerSession) GetJobCreatorAddress() (common.Address, error) { + return _Controller.Contract.GetJobCreatorAddress(&_Controller.CallOpts) +} + // GetMediationAddress is a free data retrieval call binding the contract method 0x155329ea. // // Solidity: function getMediationAddress() view returns(address) @@ -489,25 +520,25 @@ func (_Controller *ControllerTransactorSession) CheckResult(dealId string) (*typ return _Controller.Contract.CheckResult(&_Controller.TransactOpts, dealId) } -// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// Initialize is a paid mutator transaction binding the contract method 0x1459457a. // -// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress) returns() -func (_Controller *ControllerTransactor) Initialize(opts *bind.TransactOpts, _storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address) (*types.Transaction, error) { - return _Controller.contract.Transact(opts, "initialize", _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress) +// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress, address _jobCreatorAddress) returns() +func (_Controller *ControllerTransactor) Initialize(opts *bind.TransactOpts, _storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address, _jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.contract.Transact(opts, "initialize", _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress, _jobCreatorAddress) } -// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// Initialize is a paid mutator transaction binding the contract method 0x1459457a. // -// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress) returns() -func (_Controller *ControllerSession) Initialize(_storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address) (*types.Transaction, error) { - return _Controller.Contract.Initialize(&_Controller.TransactOpts, _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress) +// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress, address _jobCreatorAddress) returns() +func (_Controller *ControllerSession) Initialize(_storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address, _jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.Contract.Initialize(&_Controller.TransactOpts, _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress, _jobCreatorAddress) } -// Initialize is a paid mutator transaction binding the contract method 0xf8c8765e. +// Initialize is a paid mutator transaction binding the contract method 0x1459457a. // -// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress) returns() -func (_Controller *ControllerTransactorSession) Initialize(_storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address) (*types.Transaction, error) { - return _Controller.Contract.Initialize(&_Controller.TransactOpts, _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress) +// Solidity: function initialize(address _storageAddress, address _usersAddress, address _paymentsAddress, address _mediationAddress, address _jobCreatorAddress) returns() +func (_Controller *ControllerTransactorSession) Initialize(_storageAddress common.Address, _usersAddress common.Address, _paymentsAddress common.Address, _mediationAddress common.Address, _jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.Contract.Initialize(&_Controller.TransactOpts, _storageAddress, _usersAddress, _paymentsAddress, _mediationAddress, _jobCreatorAddress) } // MediationAcceptResult is a paid mutator transaction binding the contract method 0x824518aa. @@ -573,6 +604,27 @@ func (_Controller *ControllerTransactorSession) RenounceOwnership() (*types.Tran return _Controller.Contract.RenounceOwnership(&_Controller.TransactOpts) } +// SetJobCreatorAddress is a paid mutator transaction binding the contract method 0xb4031e54. +// +// Solidity: function setJobCreatorAddress(address _jobCreatorAddress) returns() +func (_Controller *ControllerTransactor) SetJobCreatorAddress(opts *bind.TransactOpts, _jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.contract.Transact(opts, "setJobCreatorAddress", _jobCreatorAddress) +} + +// SetJobCreatorAddress is a paid mutator transaction binding the contract method 0xb4031e54. +// +// Solidity: function setJobCreatorAddress(address _jobCreatorAddress) returns() +func (_Controller *ControllerSession) SetJobCreatorAddress(_jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.Contract.SetJobCreatorAddress(&_Controller.TransactOpts, _jobCreatorAddress) +} + +// SetJobCreatorAddress is a paid mutator transaction binding the contract method 0xb4031e54. +// +// Solidity: function setJobCreatorAddress(address _jobCreatorAddress) returns() +func (_Controller *ControllerTransactorSession) SetJobCreatorAddress(_jobCreatorAddress common.Address) (*types.Transaction, error) { + return _Controller.Contract.SetJobCreatorAddress(&_Controller.TransactOpts, _jobCreatorAddress) +} + // SetMediationAddress is a paid mutator transaction binding the contract method 0x43391cca. // // Solidity: function setMediationAddress(address _mediationAddress) returns() diff --git a/pkg/web3/bindings/jobcreator/jobcreator.go b/pkg/web3/bindings/jobcreator/jobcreator.go new file mode 100644 index 00000000..a551a82b --- /dev/null +++ b/pkg/web3/bindings/jobcreator/jobcreator.go @@ -0,0 +1,1003 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package jobcreator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// JobcreatorMetaData contains all meta data concerning the Jobcreator contract. +var JobcreatorMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"calling_contract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"}],\"name\":\"JobAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRequiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextJobID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"resultsAdded\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"runJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setRequiredDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"setTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c8a806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063a470295811610095578063d2a715c011610064578063d2a715c014610223578063f2fde38b14610241578063f3d3d4481461025d578063fb7cfdd714610279576100f3565b8063a4702958146101af578063c4d66de8146101b9578063c57380a2146101d5578063c75555fa146101f3576100f3565b80634c526c76116100d15780634c526c761461014d57806358e56db414610169578063715018a6146101875780638da5cb5b14610191576100f3565b806310fe9ae8146100f757806312b69a8e1461011557806326a4e8d214610131575b5f80fd5b6100ff610297565b60405161010c9190610dc2565b60405180910390f35b61012f600480360381019061012a9190610f5b565b6102bf565b005b61014b6004803603810190610146919061103d565b6102c5565b005b61016760048036038101906101629190611068565b6103df565b005b610171610434565b60405161017e91906110a2565b60405180910390f35b61018f61043d565b005b610199610450565b6040516101a69190610dc2565b60405180910390f35b6101b7610477565b005b6101d360048036038101906101ce919061103d565b61049b565b005b6101dd6105e3565b6040516101ea9190610dc2565b60405180910390f35b61020d6004803603810190610208919061119d565b61060b565b60405161021a91906110a2565b60405180910390f35b61022b610886565b60405161023891906110a2565b60405180910390f35b61025b6004803603810190610256919061103d565b61088c565b005b6102776004803603810190610272919061103d565b61090e565b005b610281610a16565b60405161028e91906110a2565b60405180910390f35b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b50505050565b6102cd610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061127f565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e7610a9a565b505f811161042a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610421906112e7565b60405180910390fd5b8060048190555050565b5f600454905090565b610445610a1c565b61044e5f610bc7565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61047f610a1c565b5f600160146101000a81548160ff021916908315150217905550565b5f600160169054906101000a900460ff161590508080156104cd575060018060159054906101000a900460ff1660ff16105b806104fb57506104dc30610c88565b1580156104fa575060018060159054906101000a900460ff1660ff16145b5b61053a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053190611375565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105765760018060166101000a81548160ff0219169083151502179055505b61057f826102c5565b5f60058190555080156105df575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105d691906113e1565b60405180910390a15b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60045460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e846106556105e3565b6040518363ffffffff1660e01b81526004016106729291906113fa565b602060405180830381865afa15801561068d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b19190611435565b10156106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e9906114aa565b60405180910390fd5b600160055461070191906114f5565b6005819055506040518060a0016040528060055481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481525060065f60055481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190816108189190611723565b506080820151816004019080519060200190610835929190610cb1565b509050507faa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a60055433848787604051610872959493929190611955565b60405180910390a160055490509392505050565b60055481565b610894610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f990611a24565b60405180910390fd5b61090b81610bc7565b50565b610916610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90611ab2565b60405180910390fd5b600160149054906101000a900460ff166109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90611b40565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b610a24610caa565b73ffffffffffffffffffffffffffffffffffffffff16610a42610450565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90611ba8565b60405180910390fd5b565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190611ab2565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b6a610caa565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790611c36565b60405180910390fd5b6001905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b828054828255905f5260205f20908101928215610cf7579160200282015b82811115610cf6578251829081610ce69190611723565b5091602001919060010190610ccf565b5b509050610d049190610d08565b5090565b5b80821115610d27575f8181610d1e9190610d2b565b50600101610d09565b5090565b508054610d379061155f565b5f825580601f10610d485750610d65565b601f0160209004905f5260205f2090810190610d649190610d68565b5b50565b5b80821115610d7f575f815f905550600101610d69565b5090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dac82610d83565b9050919050565b610dbc81610da2565b82525050565b5f602082019050610dd55f830184610db3565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610e3a82610df4565b810181811067ffffffffffffffff82111715610e5957610e58610e04565b5b80604052505050565b5f610e6b610ddb565b9050610e778282610e31565b919050565b5f67ffffffffffffffff821115610e9657610e95610e04565b5b610e9f82610df4565b9050602081019050919050565b828183375f83830152505050565b5f610ecc610ec784610e7c565b610e62565b905082815260208101848484011115610ee857610ee7610df0565b5b610ef3848285610eac565b509392505050565b5f82601f830112610f0f57610f0e610dec565b5b8135610f1f848260208601610eba565b91505092915050565b5f819050919050565b610f3a81610f28565b8114610f44575f80fd5b50565b5f81359050610f5581610f31565b92915050565b5f805f8060808587031215610f7357610f72610de4565b5b5f85013567ffffffffffffffff811115610f9057610f8f610de8565b5b610f9c87828801610efb565b945050602085013567ffffffffffffffff811115610fbd57610fbc610de8565b5b610fc987828801610efb565b935050604085013567ffffffffffffffff811115610fea57610fe9610de8565b5b610ff687828801610efb565b925050606061100787828801610f47565b91505092959194509250565b61101c81610da2565b8114611026575f80fd5b50565b5f8135905061103781611013565b92915050565b5f6020828403121561105257611051610de4565b5b5f61105f84828501611029565b91505092915050565b5f6020828403121561107d5761107c610de4565b5b5f61108a84828501610f47565b91505092915050565b61109c81610f28565b82525050565b5f6020820190506110b55f830184611093565b92915050565b5f67ffffffffffffffff8211156110d5576110d4610e04565b5b602082029050602081019050919050565b5f80fd5b5f6110fc6110f7846110bb565b610e62565b9050808382526020820190506020840283018581111561111f5761111e6110e6565b5b835b8181101561116657803567ffffffffffffffff81111561114457611143610dec565b5b8086016111518982610efb565b85526020850194505050602081019050611121565b5050509392505050565b5f82601f83011261118457611183610dec565b5b81356111948482602086016110ea565b91505092915050565b5f805f606084860312156111b4576111b3610de4565b5b5f84013567ffffffffffffffff8111156111d1576111d0610de8565b5b6111dd86828701610efb565b935050602084013567ffffffffffffffff8111156111fe576111fd610de8565b5b61120a86828701611170565b925050604061121b86828701611029565b9150509250925092565b5f82825260208201905092915050565b7f546f6b656e2061646472657373000000000000000000000000000000000000005f82015250565b5f611269600d83611225565b915061127482611235565b602082019050919050565b5f6020820190508181035f8301526112968161125d565b9050919050565b7f4d696e206465706f7369740000000000000000000000000000000000000000005f82015250565b5f6112d1600b83611225565b91506112dc8261129d565b602082019050919050565b5f6020820190508181035f8301526112fe816112c5565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f61135f602e83611225565b915061136a82611305565b604082019050919050565b5f6020820190508181035f83015261138c81611353565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6113cb6113c66113c184611393565b6113a8565b61139c565b9050919050565b6113db816113b1565b82525050565b5f6020820190506113f45f8301846113d2565b92915050565b5f60408201905061140d5f830185610db3565b61141a6020830184610db3565b9392505050565b5f8151905061142f81610f31565b92915050565b5f6020828403121561144a57611449610de4565b5b5f61145784828501611421565b91505092915050565b7f546f6b656e20616c6c6f77616e6365206e6f7420656e6f7567680000000000005f82015250565b5f611494601a83611225565b915061149f82611460565b602082019050919050565b5f6020820190508181035f8301526114c181611488565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114ff82610f28565b915061150a83610f28565b9250828201905080821115611522576115216114c8565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061157657607f821691505b60208210810361158957611588611532565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026115eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826115b0565b6115f586836115b0565b95508019841693508086168417925050509392505050565b5f61162761162261161d84610f28565b6113a8565b610f28565b9050919050565b5f819050919050565b6116408361160d565b61165461164c8261162e565b8484546115bc565b825550505050565b5f90565b61166861165c565b611673818484611637565b505050565b5b818110156116965761168b5f82611660565b600181019050611679565b5050565b601f8211156116db576116ac8161158f565b6116b5846115a1565b810160208510156116c4578190505b6116d86116d0856115a1565b830182611678565b50505b505050565b5f82821c905092915050565b5f6116fb5f19846008026116e0565b1980831691505092915050565b5f61171383836116ec565b9150826002028217905092915050565b61172c82611528565b67ffffffffffffffff81111561174557611744610e04565b5b61174f825461155f565b61175a82828561169a565b5f60209050601f83116001811461178b575f8415611779578287015190505b6117838582611708565b8655506117ea565b601f1984166117998661158f565b5f5b828110156117c05784890151825560018201915060208501945060208101905061179b565b868310156117dd57848901516117d9601f8916826116ec565b8355505b6001600288020188555050505b505050505050565b5f5b8381101561180f5780820151818401526020810190506117f4565b5f8484015250505050565b5f61182482611528565b61182e8185611225565b935061183e8185602086016117f2565b61184781610df4565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61189582611528565b61189f818561187b565b93506118af8185602086016117f2565b6118b881610df4565b840191505092915050565b5f6118ce838361188b565b905092915050565b5f602082019050919050565b5f6118ec82611852565b6118f6818561185c565b9350836020820285016119088561186c565b805f5b85811015611943578484038952815161192485826118c3565b945061192f836118d6565b925060208a0199505060018101905061190b565b50829750879550505050505092915050565b5f60a0820190506119685f830188611093565b6119756020830187610db3565b6119826040830186610db3565b8181036060830152611994818561181a565b905081810360808301526119a881846118e2565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611a0e602683611225565b9150611a19826119b4565b604082019050919050565b5f6020820190508181035f830152611a3b81611a02565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611a9c603583611225565b9150611aa782611a42565b604082019050919050565b5f6020820190508181035f830152611ac981611a90565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611b2a603983611225565b9150611b3582611ad0565b604082019050919050565b5f6020820190508181035f830152611b5781611b1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611b92602083611225565b9150611b9d82611b5e565b602082019050919050565b5f6020820190508181035f830152611bbf81611b86565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611c20603b83611225565b9150611c2b82611bc6565b604082019050919050565b5f6020820190508181035f830152611c4d81611c14565b905091905056fea2646970667358221220b6ad28bc8d70d5d3d643f60aeb87c204788e7e17b0c66e5f8887f86d692da00664736f6c63430008150033", +} + +// JobcreatorABI is the input ABI used to generate the binding from. +// Deprecated: Use JobcreatorMetaData.ABI instead. +var JobcreatorABI = JobcreatorMetaData.ABI + +// JobcreatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use JobcreatorMetaData.Bin instead. +var JobcreatorBin = JobcreatorMetaData.Bin + +// DeployJobcreator deploys a new Ethereum contract, binding an instance of Jobcreator to it. +func DeployJobcreator(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Jobcreator, error) { + parsed, err := JobcreatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(JobcreatorBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Jobcreator{JobcreatorCaller: JobcreatorCaller{contract: contract}, JobcreatorTransactor: JobcreatorTransactor{contract: contract}, JobcreatorFilterer: JobcreatorFilterer{contract: contract}}, nil +} + +// Jobcreator is an auto generated Go binding around an Ethereum contract. +type Jobcreator struct { + JobcreatorCaller // Read-only binding to the contract + JobcreatorTransactor // Write-only binding to the contract + JobcreatorFilterer // Log filterer for contract events +} + +// JobcreatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type JobcreatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// JobcreatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type JobcreatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// JobcreatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type JobcreatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// JobcreatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type JobcreatorSession struct { + Contract *Jobcreator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// JobcreatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type JobcreatorCallerSession struct { + Contract *JobcreatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// JobcreatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type JobcreatorTransactorSession struct { + Contract *JobcreatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// JobcreatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type JobcreatorRaw struct { + Contract *Jobcreator // Generic contract binding to access the raw methods on +} + +// JobcreatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type JobcreatorCallerRaw struct { + Contract *JobcreatorCaller // Generic read-only contract binding to access the raw methods on +} + +// JobcreatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type JobcreatorTransactorRaw struct { + Contract *JobcreatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewJobcreator creates a new instance of Jobcreator, bound to a specific deployed contract. +func NewJobcreator(address common.Address, backend bind.ContractBackend) (*Jobcreator, error) { + contract, err := bindJobcreator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Jobcreator{JobcreatorCaller: JobcreatorCaller{contract: contract}, JobcreatorTransactor: JobcreatorTransactor{contract: contract}, JobcreatorFilterer: JobcreatorFilterer{contract: contract}}, nil +} + +// NewJobcreatorCaller creates a new read-only instance of Jobcreator, bound to a specific deployed contract. +func NewJobcreatorCaller(address common.Address, caller bind.ContractCaller) (*JobcreatorCaller, error) { + contract, err := bindJobcreator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &JobcreatorCaller{contract: contract}, nil +} + +// NewJobcreatorTransactor creates a new write-only instance of Jobcreator, bound to a specific deployed contract. +func NewJobcreatorTransactor(address common.Address, transactor bind.ContractTransactor) (*JobcreatorTransactor, error) { + contract, err := bindJobcreator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &JobcreatorTransactor{contract: contract}, nil +} + +// NewJobcreatorFilterer creates a new log filterer instance of Jobcreator, bound to a specific deployed contract. +func NewJobcreatorFilterer(address common.Address, filterer bind.ContractFilterer) (*JobcreatorFilterer, error) { + contract, err := bindJobcreator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &JobcreatorFilterer{contract: contract}, nil +} + +// bindJobcreator binds a generic wrapper to an already deployed contract. +func bindJobcreator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := JobcreatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Jobcreator *JobcreatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Jobcreator.Contract.JobcreatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Jobcreator *JobcreatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Jobcreator.Contract.JobcreatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Jobcreator *JobcreatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Jobcreator.Contract.JobcreatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Jobcreator *JobcreatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Jobcreator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Jobcreator *JobcreatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Jobcreator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Jobcreator *JobcreatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Jobcreator.Contract.contract.Transact(opts, method, params...) +} + +// GetControllerAddress is a free data retrieval call binding the contract method 0xc57380a2. +// +// Solidity: function getControllerAddress() view returns(address) +func (_Jobcreator *JobcreatorCaller) GetControllerAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "getControllerAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetControllerAddress is a free data retrieval call binding the contract method 0xc57380a2. +// +// Solidity: function getControllerAddress() view returns(address) +func (_Jobcreator *JobcreatorSession) GetControllerAddress() (common.Address, error) { + return _Jobcreator.Contract.GetControllerAddress(&_Jobcreator.CallOpts) +} + +// GetControllerAddress is a free data retrieval call binding the contract method 0xc57380a2. +// +// Solidity: function getControllerAddress() view returns(address) +func (_Jobcreator *JobcreatorCallerSession) GetControllerAddress() (common.Address, error) { + return _Jobcreator.Contract.GetControllerAddress(&_Jobcreator.CallOpts) +} + +// GetRequiredDeposit is a free data retrieval call binding the contract method 0x58e56db4. +// +// Solidity: function getRequiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorCaller) GetRequiredDeposit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "getRequiredDeposit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRequiredDeposit is a free data retrieval call binding the contract method 0x58e56db4. +// +// Solidity: function getRequiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorSession) GetRequiredDeposit() (*big.Int, error) { + return _Jobcreator.Contract.GetRequiredDeposit(&_Jobcreator.CallOpts) +} + +// GetRequiredDeposit is a free data retrieval call binding the contract method 0x58e56db4. +// +// Solidity: function getRequiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorCallerSession) GetRequiredDeposit() (*big.Int, error) { + return _Jobcreator.Contract.GetRequiredDeposit(&_Jobcreator.CallOpts) +} + +// GetTokenAddress is a free data retrieval call binding the contract method 0x10fe9ae8. +// +// Solidity: function getTokenAddress() view returns(address) +func (_Jobcreator *JobcreatorCaller) GetTokenAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "getTokenAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetTokenAddress is a free data retrieval call binding the contract method 0x10fe9ae8. +// +// Solidity: function getTokenAddress() view returns(address) +func (_Jobcreator *JobcreatorSession) GetTokenAddress() (common.Address, error) { + return _Jobcreator.Contract.GetTokenAddress(&_Jobcreator.CallOpts) +} + +// GetTokenAddress is a free data retrieval call binding the contract method 0x10fe9ae8. +// +// Solidity: function getTokenAddress() view returns(address) +func (_Jobcreator *JobcreatorCallerSession) GetTokenAddress() (common.Address, error) { + return _Jobcreator.Contract.GetTokenAddress(&_Jobcreator.CallOpts) +} + +// NextJobID is a free data retrieval call binding the contract method 0xd2a715c0. +// +// Solidity: function nextJobID() view returns(uint256) +func (_Jobcreator *JobcreatorCaller) NextJobID(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "nextJobID") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextJobID is a free data retrieval call binding the contract method 0xd2a715c0. +// +// Solidity: function nextJobID() view returns(uint256) +func (_Jobcreator *JobcreatorSession) NextJobID() (*big.Int, error) { + return _Jobcreator.Contract.NextJobID(&_Jobcreator.CallOpts) +} + +// NextJobID is a free data retrieval call binding the contract method 0xd2a715c0. +// +// Solidity: function nextJobID() view returns(uint256) +func (_Jobcreator *JobcreatorCallerSession) NextJobID() (*big.Int, error) { + return _Jobcreator.Contract.NextJobID(&_Jobcreator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_Jobcreator *JobcreatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_Jobcreator *JobcreatorSession) Owner() (common.Address, error) { + return _Jobcreator.Contract.Owner(&_Jobcreator.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_Jobcreator *JobcreatorCallerSession) Owner() (common.Address, error) { + return _Jobcreator.Contract.Owner(&_Jobcreator.CallOpts) +} + +// RequiredDeposit is a free data retrieval call binding the contract method 0xfb7cfdd7. +// +// Solidity: function requiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorCaller) RequiredDeposit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Jobcreator.contract.Call(opts, &out, "requiredDeposit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// RequiredDeposit is a free data retrieval call binding the contract method 0xfb7cfdd7. +// +// Solidity: function requiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorSession) RequiredDeposit() (*big.Int, error) { + return _Jobcreator.Contract.RequiredDeposit(&_Jobcreator.CallOpts) +} + +// RequiredDeposit is a free data retrieval call binding the contract method 0xfb7cfdd7. +// +// Solidity: function requiredDeposit() view returns(uint256) +func (_Jobcreator *JobcreatorCallerSession) RequiredDeposit() (*big.Int, error) { + return _Jobcreator.Contract.RequiredDeposit(&_Jobcreator.CallOpts) +} + +// DisableChangeControllerAddress is a paid mutator transaction binding the contract method 0xa4702958. +// +// Solidity: function disableChangeControllerAddress() returns() +func (_Jobcreator *JobcreatorTransactor) DisableChangeControllerAddress(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "disableChangeControllerAddress") +} + +// DisableChangeControllerAddress is a paid mutator transaction binding the contract method 0xa4702958. +// +// Solidity: function disableChangeControllerAddress() returns() +func (_Jobcreator *JobcreatorSession) DisableChangeControllerAddress() (*types.Transaction, error) { + return _Jobcreator.Contract.DisableChangeControllerAddress(&_Jobcreator.TransactOpts) +} + +// DisableChangeControllerAddress is a paid mutator transaction binding the contract method 0xa4702958. +// +// Solidity: function disableChangeControllerAddress() returns() +func (_Jobcreator *JobcreatorTransactorSession) DisableChangeControllerAddress() (*types.Transaction, error) { + return _Jobcreator.Contract.DisableChangeControllerAddress(&_Jobcreator.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorTransactor) Initialize(opts *bind.TransactOpts, _tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "initialize", _tokenAddress) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorSession) Initialize(_tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.Initialize(&_Jobcreator.TransactOpts, _tokenAddress) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorTransactorSession) Initialize(_tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.Initialize(&_Jobcreator.TransactOpts, _tokenAddress) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Jobcreator *JobcreatorTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Jobcreator *JobcreatorSession) RenounceOwnership() (*types.Transaction, error) { + return _Jobcreator.Contract.RenounceOwnership(&_Jobcreator.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_Jobcreator *JobcreatorTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _Jobcreator.Contract.RenounceOwnership(&_Jobcreator.TransactOpts) +} + +// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. +// +// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Jobcreator *JobcreatorTransactor) ResultsAdded(opts *bind.TransactOpts, dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "resultsAdded", dealId, resultsId, dataId, instructionCount) +} + +// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. +// +// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Jobcreator *JobcreatorSession) ResultsAdded(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Jobcreator.Contract.ResultsAdded(&_Jobcreator.TransactOpts, dealId, resultsId, dataId, instructionCount) +} + +// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. +// +// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() +func (_Jobcreator *JobcreatorTransactorSession) ResultsAdded(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { + return _Jobcreator.Contract.ResultsAdded(&_Jobcreator.TransactOpts, dealId, resultsId, dataId, instructionCount) +} + +// RunJob is a paid mutator transaction binding the contract method 0xc75555fa. +// +// Solidity: function runJob(string module, string[] inputs, address payee) returns(uint256) +func (_Jobcreator *JobcreatorTransactor) RunJob(opts *bind.TransactOpts, module string, inputs []string, payee common.Address) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "runJob", module, inputs, payee) +} + +// RunJob is a paid mutator transaction binding the contract method 0xc75555fa. +// +// Solidity: function runJob(string module, string[] inputs, address payee) returns(uint256) +func (_Jobcreator *JobcreatorSession) RunJob(module string, inputs []string, payee common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.RunJob(&_Jobcreator.TransactOpts, module, inputs, payee) +} + +// RunJob is a paid mutator transaction binding the contract method 0xc75555fa. +// +// Solidity: function runJob(string module, string[] inputs, address payee) returns(uint256) +func (_Jobcreator *JobcreatorTransactorSession) RunJob(module string, inputs []string, payee common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.RunJob(&_Jobcreator.TransactOpts, module, inputs, payee) +} + +// SetControllerAddress is a paid mutator transaction binding the contract method 0xf3d3d448. +// +// Solidity: function setControllerAddress(address _controllerAddress) returns() +func (_Jobcreator *JobcreatorTransactor) SetControllerAddress(opts *bind.TransactOpts, _controllerAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "setControllerAddress", _controllerAddress) +} + +// SetControllerAddress is a paid mutator transaction binding the contract method 0xf3d3d448. +// +// Solidity: function setControllerAddress(address _controllerAddress) returns() +func (_Jobcreator *JobcreatorSession) SetControllerAddress(_controllerAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.SetControllerAddress(&_Jobcreator.TransactOpts, _controllerAddress) +} + +// SetControllerAddress is a paid mutator transaction binding the contract method 0xf3d3d448. +// +// Solidity: function setControllerAddress(address _controllerAddress) returns() +func (_Jobcreator *JobcreatorTransactorSession) SetControllerAddress(_controllerAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.SetControllerAddress(&_Jobcreator.TransactOpts, _controllerAddress) +} + +// SetRequiredDeposit is a paid mutator transaction binding the contract method 0x4c526c76. +// +// Solidity: function setRequiredDeposit(uint256 cost) returns() +func (_Jobcreator *JobcreatorTransactor) SetRequiredDeposit(opts *bind.TransactOpts, cost *big.Int) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "setRequiredDeposit", cost) +} + +// SetRequiredDeposit is a paid mutator transaction binding the contract method 0x4c526c76. +// +// Solidity: function setRequiredDeposit(uint256 cost) returns() +func (_Jobcreator *JobcreatorSession) SetRequiredDeposit(cost *big.Int) (*types.Transaction, error) { + return _Jobcreator.Contract.SetRequiredDeposit(&_Jobcreator.TransactOpts, cost) +} + +// SetRequiredDeposit is a paid mutator transaction binding the contract method 0x4c526c76. +// +// Solidity: function setRequiredDeposit(uint256 cost) returns() +func (_Jobcreator *JobcreatorTransactorSession) SetRequiredDeposit(cost *big.Int) (*types.Transaction, error) { + return _Jobcreator.Contract.SetRequiredDeposit(&_Jobcreator.TransactOpts, cost) +} + +// SetTokenAddress is a paid mutator transaction binding the contract method 0x26a4e8d2. +// +// Solidity: function setTokenAddress(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorTransactor) SetTokenAddress(opts *bind.TransactOpts, _tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "setTokenAddress", _tokenAddress) +} + +// SetTokenAddress is a paid mutator transaction binding the contract method 0x26a4e8d2. +// +// Solidity: function setTokenAddress(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorSession) SetTokenAddress(_tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.SetTokenAddress(&_Jobcreator.TransactOpts, _tokenAddress) +} + +// SetTokenAddress is a paid mutator transaction binding the contract method 0x26a4e8d2. +// +// Solidity: function setTokenAddress(address _tokenAddress) returns() +func (_Jobcreator *JobcreatorTransactorSession) SetTokenAddress(_tokenAddress common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.SetTokenAddress(&_Jobcreator.TransactOpts, _tokenAddress) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Jobcreator *JobcreatorTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Jobcreator *JobcreatorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.TransferOwnership(&_Jobcreator.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_Jobcreator *JobcreatorTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _Jobcreator.Contract.TransferOwnership(&_Jobcreator.TransactOpts, newOwner) +} + +// JobcreatorInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Jobcreator contract. +type JobcreatorInitializedIterator struct { + Event *JobcreatorInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *JobcreatorInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(JobcreatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(JobcreatorInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *JobcreatorInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *JobcreatorInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// JobcreatorInitialized represents a Initialized event raised by the Jobcreator contract. +type JobcreatorInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Jobcreator *JobcreatorFilterer) FilterInitialized(opts *bind.FilterOpts) (*JobcreatorInitializedIterator, error) { + + logs, sub, err := _Jobcreator.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &JobcreatorInitializedIterator{contract: _Jobcreator.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Jobcreator *JobcreatorFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *JobcreatorInitialized) (event.Subscription, error) { + + logs, sub, err := _Jobcreator.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(JobcreatorInitialized) + if err := _Jobcreator.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_Jobcreator *JobcreatorFilterer) ParseInitialized(log types.Log) (*JobcreatorInitialized, error) { + event := new(JobcreatorInitialized) + if err := _Jobcreator.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// JobcreatorJobAddedIterator is returned from FilterJobAdded and is used to iterate over the raw logs and unpacked data for JobAdded events raised by the Jobcreator contract. +type JobcreatorJobAddedIterator struct { + Event *JobcreatorJobAdded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *JobcreatorJobAddedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(JobcreatorJobAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(JobcreatorJobAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *JobcreatorJobAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *JobcreatorJobAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// JobcreatorJobAdded represents a JobAdded event raised by the Jobcreator contract. +type JobcreatorJobAdded struct { + Id *big.Int + CallingContract common.Address + Payee common.Address + Module string + Inputs []string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterJobAdded is a free log retrieval operation binding the contract event 0xaa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a. +// +// Solidity: event JobAdded(uint256 id, address calling_contract, address payee, string module, string[] inputs) +func (_Jobcreator *JobcreatorFilterer) FilterJobAdded(opts *bind.FilterOpts) (*JobcreatorJobAddedIterator, error) { + + logs, sub, err := _Jobcreator.contract.FilterLogs(opts, "JobAdded") + if err != nil { + return nil, err + } + return &JobcreatorJobAddedIterator{contract: _Jobcreator.contract, event: "JobAdded", logs: logs, sub: sub}, nil +} + +// WatchJobAdded is a free log subscription operation binding the contract event 0xaa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a. +// +// Solidity: event JobAdded(uint256 id, address calling_contract, address payee, string module, string[] inputs) +func (_Jobcreator *JobcreatorFilterer) WatchJobAdded(opts *bind.WatchOpts, sink chan<- *JobcreatorJobAdded) (event.Subscription, error) { + + logs, sub, err := _Jobcreator.contract.WatchLogs(opts, "JobAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(JobcreatorJobAdded) + if err := _Jobcreator.contract.UnpackLog(event, "JobAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseJobAdded is a log parse operation binding the contract event 0xaa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a. +// +// Solidity: event JobAdded(uint256 id, address calling_contract, address payee, string module, string[] inputs) +func (_Jobcreator *JobcreatorFilterer) ParseJobAdded(log types.Log) (*JobcreatorJobAdded, error) { + event := new(JobcreatorJobAdded) + if err := _Jobcreator.contract.UnpackLog(event, "JobAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// JobcreatorOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Jobcreator contract. +type JobcreatorOwnershipTransferredIterator struct { + Event *JobcreatorOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *JobcreatorOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(JobcreatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(JobcreatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *JobcreatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *JobcreatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// JobcreatorOwnershipTransferred represents a OwnershipTransferred event raised by the Jobcreator contract. +type JobcreatorOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_Jobcreator *JobcreatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*JobcreatorOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _Jobcreator.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &JobcreatorOwnershipTransferredIterator{contract: _Jobcreator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_Jobcreator *JobcreatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *JobcreatorOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _Jobcreator.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(JobcreatorOwnershipTransferred) + if err := _Jobcreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_Jobcreator *JobcreatorFilterer) ParseOwnershipTransferred(log types.Log) (*JobcreatorOwnershipTransferred, error) { + event := new(JobcreatorOwnershipTransferred) + if err := _Jobcreator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/web3/bindings/mediation/mediation.go b/pkg/web3/bindings/mediation/mediation.go index 9eb4e5e3..b8b3a746 100644 --- a/pkg/web3/bindings/mediation/mediation.go +++ b/pkg/web3/bindings/mediation/mediation.go @@ -70,7 +70,7 @@ type SharedStructsDealTimeouts struct { // MediationMetaData contains all meta data concerning the Mediation contract. var MediationMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mediator\",\"type\":\"address\"}],\"name\":\"MediationRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getMediator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"deal\",\"type\":\"tuple\"}],\"name\":\"mediationRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611974806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b14610113578063a2bffa0014610131578063a470295814610161578063c57380a21461016b578063f2fde38b14610189578063f3d3d448146101a5576100a7565b806370bea207146100ab578063715018a6146100c757806380ffdfe0146100d15780638129fc1c146100ed578063824518aa146100f7575b5f80fd5b6100c560048036038101906100c0919061120f565b6101c1565b005b6100cf610343565b005b6100eb60048036038101906100e69190611256565b610356565b005b6100f561051c565b005b610111600480360381019061010c9190611256565b610653565b005b61011b610819565b60405161012891906112ac565b60405180910390f35b61014b60048036038101906101469190611256565b610840565b60405161015891906112ac565b60405180910390f35b610169610886565b005b6101736108aa565b60405161018091906112ac565b60405180910390f35b6101a3600480360381019061019e91906112c5565b6108d2565b005b6101bf60048036038101906101ba91906112c5565b610954565b005b6101c9610a5c565b505f8160200151606001515142835f01516040516020016101eb92919061137c565b604051602081830303815290604052805190602001205f1c61020d91906113d0565b90505f826020015160600151828151811061022b5761022a611400565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029a90611487565b60405180910390fd5b806002845f01516040516102b791906114a5565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffd3770121045f9427361660d6eaa8b07a2e45eca6964f5c4f041a28f21084086835f0151826040516103369291906114f3565b60405180910390a1505050565b61034b610b89565b6103545f610c07565b565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161037d91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161042891906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a39061156b565b60405180910390fd5b6104b46108aa565b73ffffffffffffffffffffffffffffffffffffffff166380ffdfe0826040518263ffffffff1660e01b81526004016104ec9190611589565b5f604051808303815f87803b158015610503575f80fd5b505af1158015610515573d5f803e3d5ffd5b5050505050565b5f600160169054906101000a900460ff1615905080801561054e575060018060159054906101000a900460ff1660ff16105b8061057c575061055d30610cc8565b15801561057b575060018060159054906101000a900460ff1660ff16145b5b6105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290611619565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105f75760018060166101000a81548160ff0219169083151502179055505b8015610650575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106479190611685565b60405180910390a15b50565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161067a91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161072591906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a09061156b565b60405180910390fd5b6107b16108aa565b73ffffffffffffffffffffffffffffffffffffffff1663824518aa826040518263ffffffff1660e01b81526004016107e99190611589565b5f604051808303815f87803b158015610800575f80fd5b505af1158015610812573d5f803e3d5ffd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60028260405161085191906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61088e610b89565b5f600160146101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108da610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f9061170e565b60405180910390fd5b61095181610c07565b50565b61095c610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061179c565b60405180910390fd5b600160149054906101000a900460ff16610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a109061182a565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae39061179c565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c610cea565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906118b8565b60405180910390fd5b6001905090565b610b91610cea565b73ffffffffffffffffffffffffffffffffffffffff16610baf610819565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90611920565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d4c82610d06565b810181811067ffffffffffffffff82111715610d6b57610d6a610d16565b5b80604052505050565b5f610d7d610cf1565b9050610d898282610d43565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610db457610db3610d16565b5b610dbd82610d06565b9050602081019050919050565b828183375f83830152505050565b5f610dea610de584610d9a565b610d74565b905082815260208101848484011115610e0657610e05610d96565b5b610e11848285610dca565b509392505050565b5f82601f830112610e2d57610e2c610d92565b5b8135610e3d848260208601610dd8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6f82610e46565b9050919050565b610e7f81610e65565b8114610e89575f80fd5b50565b5f81359050610e9a81610e76565b92915050565b5f67ffffffffffffffff821115610eba57610eb9610d16565b5b602082029050602081019050919050565b5f80fd5b5f610ee1610edc84610ea0565b610d74565b90508083825260208201905060208402830185811115610f0457610f03610ecb565b5b835b81811015610f2d5780610f198882610e8c565b845260208401935050602081019050610f06565b5050509392505050565b5f82601f830112610f4b57610f4a610d92565b5b8135610f5b848260208601610ecf565b91505092915050565b5f60808284031215610f7957610f78610d02565b5b610f836080610d74565b90505f610f9284828501610e8c565b5f830152506020610fa584828501610e8c565b6020830152506040610fb984828501610e8c565b604083015250606082013567ffffffffffffffff811115610fdd57610fdc610d8e565b5b610fe984828501610f37565b60608301525092915050565b5f819050919050565b61100781610ff5565b8114611011575f80fd5b50565b5f8135905061102281610ffe565b92915050565b5f6040828403121561103d5761103c610d02565b5b6110476040610d74565b90505f61105684828501611014565b5f83015250602061106984828501611014565b60208301525092915050565b5f610100828403121561108b5761108a610d02565b5b6110956080610d74565b90505f6110a484828501611028565b5f8301525060406110b784828501611028565b60208301525060806110cb84828501611028565b60408301525060c06110df84828501611028565b60608301525092915050565b5f60808284031215611100576110ff610d02565b5b61110a6080610d74565b90505f61111984828501611014565b5f83015250602061112c84828501611014565b602083015250604061114084828501611014565b604083015250606061115484828501611014565b60608301525092915050565b5f6101c0828403121561117657611175610d02565b5b6111806080610d74565b90505f82013567ffffffffffffffff81111561119f5761119e610d8e565b5b6111ab84828501610e19565b5f83015250602082013567ffffffffffffffff8111156111ce576111cd610d8e565b5b6111da84828501610f64565b60208301525060406111ee84828501611075565b604083015250610140611203848285016110eb565b60608301525092915050565b5f6020828403121561122457611223610cfa565b5b5f82013567ffffffffffffffff81111561124157611240610cfe565b5b61124d84828501611160565b91505092915050565b5f6020828403121561126b5761126a610cfa565b5b5f82013567ffffffffffffffff81111561128857611287610cfe565b5b61129484828501610e19565b91505092915050565b6112a681610e65565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f602082840312156112da576112d9610cfa565b5b5f6112e784828501610e8c565b91505092915050565b5f819050919050565b61130a61130582610ff5565b6112f0565b82525050565b5f81519050919050565b5f81905092915050565b5f5b83811015611341578082015181840152602081019050611326565b5f8484015250505050565b5f61135682611310565b611360818561131a565b9350611370818560208601611324565b80840191505092915050565b5f61138782856112f9565b602082019150611397828461134c565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113da82610ff5565b91506113e583610ff5565b9250826113f5576113f46113a3565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b7f6d65646961746f722063616e6e6f7420626520307830000000000000000000005f82015250565b5f61147160168361142d565b915061147c8261143d565b602082019050919050565b5f6020820190508181035f83015261149e81611465565b9050919050565b5f6114b0828461134c565b915081905092915050565b5f6114c582611310565b6114cf818561142d565b93506114df818560208601611324565b6114e881610d06565b840191505092915050565b5f6040820190508181035f83015261150b81856114bb565b905061151a602083018461129d565b9392505050565b7f74782e6f726967696e206d75737420626520746865206d65646961746f7200005f82015250565b5f611555601e8361142d565b915061156082611521565b602082019050919050565b5f6020820190508181035f83015261158281611549565b9050919050565b5f6020820190508181035f8301526115a181846114bb565b905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f611603602e8361142d565b915061160e826115a9565b604082019050919050565b5f6020820190508181035f830152611630816115f7565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61166f61166a61166584611637565b61164c565b611640565b9050919050565b61167f81611655565b82525050565b5f6020820190506116985f830184611676565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6116f860268361142d565b91506117038261169e565b604082019050919050565b5f6020820190508181035f830152611725816116ec565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f61178660358361142d565b91506117918261172c565b604082019050919050565b5f6020820190508181035f8301526117b38161177a565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61181460398361142d565b915061181f826117ba565b604082019050919050565b5f6020820190508181035f83015261184181611808565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6118a2603b8361142d565b91506118ad82611848565b604082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61190a60208361142d565b9150611915826118d6565b602082019050919050565b5f6020820190508181035f830152611937816118fe565b905091905056fea26469706673582212207c641382be2ee021e3438328545b6308a7fb7f50233893242de3ff4d6c64f05564736f6c63430008150033", + Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611974806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b14610113578063a2bffa0014610131578063a470295814610161578063c57380a21461016b578063f2fde38b14610189578063f3d3d448146101a5576100a7565b806370bea207146100ab578063715018a6146100c757806380ffdfe0146100d15780638129fc1c146100ed578063824518aa146100f7575b5f80fd5b6100c560048036038101906100c0919061120f565b6101c1565b005b6100cf610343565b005b6100eb60048036038101906100e69190611256565b610356565b005b6100f561051c565b005b610111600480360381019061010c9190611256565b610653565b005b61011b610819565b60405161012891906112ac565b60405180910390f35b61014b60048036038101906101469190611256565b610840565b60405161015891906112ac565b60405180910390f35b610169610886565b005b6101736108aa565b60405161018091906112ac565b60405180910390f35b6101a3600480360381019061019e91906112c5565b6108d2565b005b6101bf60048036038101906101ba91906112c5565b610954565b005b6101c9610a5c565b505f8160200151606001515142835f01516040516020016101eb92919061137c565b604051602081830303815290604052805190602001205f1c61020d91906113d0565b90505f826020015160600151828151811061022b5761022a611400565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029a90611487565b60405180910390fd5b806002845f01516040516102b791906114a5565b90815260200160405180910390205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffd3770121045f9427361660d6eaa8b07a2e45eca6964f5c4f041a28f21084086835f0151826040516103369291906114f3565b60405180910390a1505050565b61034b610b89565b6103545f610c07565b565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161037d91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161042891906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a39061156b565b60405180910390fd5b6104b46108aa565b73ffffffffffffffffffffffffffffffffffffffff166380ffdfe0826040518263ffffffff1660e01b81526004016104ec9190611589565b5f604051808303815f87803b158015610503575f80fd5b505af1158015610515573d5f803e3d5ffd5b5050505050565b5f600160169054906101000a900460ff1615905080801561054e575060018060159054906101000a900460ff1660ff16105b8061057c575061055d30610cc8565b15801561057b575060018060159054906101000a900460ff1660ff16145b5b6105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290611619565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105f75760018060166101000a81548160ff0219169083151502179055505b8015610650575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106479190611685565b60405180910390a15b50565b5f73ffffffffffffffffffffffffffffffffffffffff1660028260405161067a91906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611487565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff1660028260405161072591906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a09061156b565b60405180910390fd5b6107b16108aa565b73ffffffffffffffffffffffffffffffffffffffff1663824518aa826040518263ffffffff1660e01b81526004016107e99190611589565b5f604051808303815f87803b158015610800575f80fd5b505af1158015610812573d5f803e3d5ffd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60028260405161085191906114a5565b90815260200160405180910390205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61088e610b89565b5f600160146101000a81548160ff021916908315150217905550565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108da610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f9061170e565b60405180910390fd5b61095181610c07565b50565b61095c610b89565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c19061179c565b60405180910390fd5b600160149054906101000a900460ff16610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a109061182a565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae39061179c565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b2c610cea565b73ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906118b8565b60405180910390fd5b6001905090565b610b91610cea565b73ffffffffffffffffffffffffffffffffffffffff16610baf610819565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90611920565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d4c82610d06565b810181811067ffffffffffffffff82111715610d6b57610d6a610d16565b5b80604052505050565b5f610d7d610cf1565b9050610d898282610d43565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610db457610db3610d16565b5b610dbd82610d06565b9050602081019050919050565b828183375f83830152505050565b5f610dea610de584610d9a565b610d74565b905082815260208101848484011115610e0657610e05610d96565b5b610e11848285610dca565b509392505050565b5f82601f830112610e2d57610e2c610d92565b5b8135610e3d848260208601610dd8565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6f82610e46565b9050919050565b610e7f81610e65565b8114610e89575f80fd5b50565b5f81359050610e9a81610e76565b92915050565b5f67ffffffffffffffff821115610eba57610eb9610d16565b5b602082029050602081019050919050565b5f80fd5b5f610ee1610edc84610ea0565b610d74565b90508083825260208201905060208402830185811115610f0457610f03610ecb565b5b835b81811015610f2d5780610f198882610e8c565b845260208401935050602081019050610f06565b5050509392505050565b5f82601f830112610f4b57610f4a610d92565b5b8135610f5b848260208601610ecf565b91505092915050565b5f60808284031215610f7957610f78610d02565b5b610f836080610d74565b90505f610f9284828501610e8c565b5f830152506020610fa584828501610e8c565b6020830152506040610fb984828501610e8c565b604083015250606082013567ffffffffffffffff811115610fdd57610fdc610d8e565b5b610fe984828501610f37565b60608301525092915050565b5f819050919050565b61100781610ff5565b8114611011575f80fd5b50565b5f8135905061102281610ffe565b92915050565b5f6040828403121561103d5761103c610d02565b5b6110476040610d74565b90505f61105684828501611014565b5f83015250602061106984828501611014565b60208301525092915050565b5f610100828403121561108b5761108a610d02565b5b6110956080610d74565b90505f6110a484828501611028565b5f8301525060406110b784828501611028565b60208301525060806110cb84828501611028565b60408301525060c06110df84828501611028565b60608301525092915050565b5f60808284031215611100576110ff610d02565b5b61110a6080610d74565b90505f61111984828501611014565b5f83015250602061112c84828501611014565b602083015250604061114084828501611014565b604083015250606061115484828501611014565b60608301525092915050565b5f6101c0828403121561117657611175610d02565b5b6111806080610d74565b90505f82013567ffffffffffffffff81111561119f5761119e610d8e565b5b6111ab84828501610e19565b5f83015250602082013567ffffffffffffffff8111156111ce576111cd610d8e565b5b6111da84828501610f64565b60208301525060406111ee84828501611075565b604083015250610140611203848285016110eb565b60608301525092915050565b5f6020828403121561122457611223610cfa565b5b5f82013567ffffffffffffffff81111561124157611240610cfe565b5b61124d84828501611160565b91505092915050565b5f6020828403121561126b5761126a610cfa565b5b5f82013567ffffffffffffffff81111561128857611287610cfe565b5b61129484828501610e19565b91505092915050565b6112a681610e65565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f602082840312156112da576112d9610cfa565b5b5f6112e784828501610e8c565b91505092915050565b5f819050919050565b61130a61130582610ff5565b6112f0565b82525050565b5f81519050919050565b5f81905092915050565b5f5b83811015611341578082015181840152602081019050611326565b5f8484015250505050565b5f61135682611310565b611360818561131a565b9350611370818560208601611324565b80840191505092915050565b5f61138782856112f9565b602082019150611397828461134c565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6113da82610ff5565b91506113e583610ff5565b9250826113f5576113f46113a3565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b7f6d65646961746f722063616e6e6f7420626520307830000000000000000000005f82015250565b5f61147160168361142d565b915061147c8261143d565b602082019050919050565b5f6020820190508181035f83015261149e81611465565b9050919050565b5f6114b0828461134c565b915081905092915050565b5f6114c582611310565b6114cf818561142d565b93506114df818560208601611324565b6114e881610d06565b840191505092915050565b5f6040820190508181035f83015261150b81856114bb565b905061151a602083018461129d565b9392505050565b7f74782e6f726967696e206d75737420626520746865206d65646961746f7200005f82015250565b5f611555601e8361142d565b915061156082611521565b602082019050919050565b5f6020820190508181035f83015261158281611549565b9050919050565b5f6020820190508181035f8301526115a181846114bb565b905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f611603602e8361142d565b915061160e826115a9565b604082019050919050565b5f6020820190508181035f830152611630816115f7565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61166f61166a61166584611637565b61164c565b611640565b9050919050565b61167f81611655565b82525050565b5f6020820190506116985f830184611676565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6116f860268361142d565b91506117038261169e565b604082019050919050565b5f6020820190508181035f830152611725816116ec565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f61178660358361142d565b91506117918261172c565b604082019050919050565b5f6020820190508181035f8301526117b38161177a565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61181460398361142d565b915061181f826117ba565b604082019050919050565b5f6020820190508181035f83015261184181611808565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6118a2603b8361142d565b91506118ad82611848565b604082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61190a60208361142d565b9150611915826118d6565b602082019050919050565b5f6020820190508181035f830152611937816118fe565b905091905056fea2646970667358221220ca4993e93f46ed61c2c9b52cbb71b5b58eb20c47bbfe4b0db81e68a611bb388a64736f6c63430008150033", } // MediationABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/bindings/payments/payments.go b/pkg/web3/bindings/payments/payments.go index 7cf0afeb..4f7e437c 100644 --- a/pkg/web3/bindings/payments/payments.go +++ b/pkg/web3/bindings/payments/payments.go @@ -32,7 +32,7 @@ var ( // PaymentsMetaData contains all meta data concerning the Payments contract. var PaymentsMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumLilypadPayments.PaymentReason\",\"name\":\"reason\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"enumLilypadPayments.PaymentDirection\",\"name\":\"direction\",\"type\":\"uint8\"}],\"name\":\"Payment\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"jobCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"agreeJobCreator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"agreeResourceProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"jobCost\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"setTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"timeoutAgreeRefundJobCreator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"timeoutAgreeRefundResourceProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"timeoutJudgeResults\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutCollateral\",\"type\":\"uint256\"}],\"name\":\"timeoutSubmitResults\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600360146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c080620001425f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c80639e3868dc116100b6578063b91880351161007a578063b9188035146102d2578063c4d66de8146102ee578063c57380a21461030a578063d2485cce14610328578063f2fde38b14610344578063f3d3d4481461036057610140565b80639e3868dc14610258578063a470295814610274578063aea382511461027e578063afe1dff71461029a578063b1356714146102b657610140565b80632a1f9072116101085780632a1f9072146101d257806338698529146101ee5780634bc28da11461020a578063715018a614610214578063823f3de11461021e5780638da5cb5b1461023a57610140565b806302fd8f801461014457806309cab510146101605780630ef0d89e1461017c57806310fe9ae81461019857806326a4e8d2146101b6575b5f80fd5b61015e60048036038101906101599190611951565b61037c565b005b61017a600480360381019061017591906119e4565b610420565b005b61019660048036038101906101919190611a64565b6104b6565b005b6101a061053f565b6040516101ad9190611adf565b60405180910390f35b6101d060048036038101906101cb9190611af8565b610567565b005b6101ec60048036038101906101e79190611b23565b6106af565b005b61020860048036038101906102039190611951565b610725565b005b6102126107bd565b005b61021c6107e1565b005b61023860048036038101906102339190611bdc565b6107f4565b005b6102426108cf565b60405161024f9190611adf565b60405180910390f35b610272600480360381019061026d9190611a64565b6108f6565b005b61027c61097e565b005b610298600480360381019061029391906119e4565b6109a2565b005b6102b460048036038101906102af91906119e4565b610a38565b005b6102d060048036038101906102cb9190611b23565b610ace565b005b6102ec60048036038101906102e791906119e4565b610bb1565b005b61030860048036038101906103039190611af8565b610c45565b005b610312610d86565b60405161031f9190611adf565b60405180910390f35b610342600480360381019061033d9190611bdc565b610dae565b005b61035e60048036038101906103599190611af8565b610de6565b005b61037a60048036038101906103759190611af8565b610e68565b005b610384610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146103f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ea90611d01565b60405180910390fd5b6103ff8584845f61109d565b61040c858483600261109d565b61041985858360026111c3565b5050505050565b610428610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048e90611d8f565b60405180910390fd5b6104a3848360016112e9565b6104b0848483600261109d565b50505050565b6104be610f70565b508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461052d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052490611d8f565b60405180910390fd5b61053a838383600261109d565b505050565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61056f6114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d490611e1d565b60405180910390fd5b600360149054906101000a900460ff1661062c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062390611eab565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106b7610f70565b505f8490505f848611156106cd578491506106dc565b85856106d99190611ef6565b90505b6106ea89888a856003611564565b6106f8898832866004611564565b5f81111561070d5761070c8988835f61109d565b5b61071a898986600161109d565b505050505050505050565b61072d610f70565b508373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390611d8f565b60405180910390fd5b6107a9858584600161109d565b6107b685848360026111c3565b5050505050565b6107c56114e6565b5f600360146101000a81548160ff021916908315150217905550565b6107e96114e6565b6107f25f61168d565b565b6107fc610f70565b508473ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061086257508373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b6108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890611f99565b60405180910390fd5b6108ae868684600161109d565b6108ba8685855f61109d565b6108c7868583600461109d565b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108fe610f70565b508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490611d8f565b60405180910390fd5b610979838260026112e9565b505050565b6109866114e6565b5f600160146101000a81548160ff021916908315150217905550565b6109aa610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090611d01565b60405180910390fd5b610a26848484600261109d565b610a32848260046112e9565b50505050565b610a40610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690611d01565b60405180910390fd5b610abb8484845f61109d565b610ac8848483600261109d565b50505050565b610ad6610f70565b508473ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90611d01565b60405180910390fd5b5f8490505f84861115610b5a57849150610b69565b8585610b669190611ef6565b90505b610b7789888a856003611564565b5f811115610b8c57610b8b8988835f61109d565b5b610b99898885600261109d565b610ba6898986600161109d565b505050505050505050565b610bb9610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90611d01565b60405180910390fd5b610c3384835f6112e9565b610c3f848260026112e9565b50505050565b5f600160169054906101000a900460ff16159050808015610c77575060018060159054906101000a900460ff1660ff16105b80610ca55750610c863061174e565b158015610ca4575060018060159054906101000a900460ff1660ff16145b5b610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90612027565b60405180910390fd5b60018060156101000a81548160ff021916908360ff1602179055508015610d205760018060166101000a81548160ff0219169083151502179055505b610d2982610567565b8015610d82575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d799190612093565b60405180910390a15b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610db6610f70565b50610dc38685855f61109d565b610dd1868532846004611564565b610dde86868460016111c3565b505050505050565b610dee6114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e539061211c565b60405180910390fd5b610e658161168d565b50565b610e706114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906121aa565b60405180910390fd5b600160149054906101000a900460ff16610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612238565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff7906121aa565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611040611770565b73ffffffffffffffffffffffffffffffffffffffff1614611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d906122c6565b60405180910390fd5b6001905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663599efa6b85856040518363ffffffff1660e01b81526004016110fa9291906122f3565b6020604051808303815f875af1158015611116573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113a919061234f565b90508061117c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611173906123ea565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a98428585858560026040516111b495949392919061252b565b60405180910390a15050505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388c2bdfe85856040518363ffffffff1660e01b81526004016112209291906122f3565b6020604051808303815f875af115801561123c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611260919061234f565b9050806112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906125f3565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a98428585858560036040516112da95949392919061252b565b60405180910390a15050505050565b8160035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231326040518263ffffffff1660e01b81526004016113449190611adf565b602060405180830381865afa15801561135f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113839190612625565b10156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906126c0565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635407e93c846040518263ffffffff1660e01b815260040161141f91906126de565b6020604051808303815f875af115801561143b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145f919061234f565b9050806114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890612767565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a9842843285855f6040516114d895949392919061252b565b60405180910390a150505050565b6114ee611770565b73ffffffffffffffffffffffffffffffffffffffff1661150c6108cf565b73ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611559906127cf565b60405180910390fd5b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663065e86c88686866040518463ffffffff1660e01b81526004016115c3939291906127ed565b6020604051808303815f875af11580156115df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611603919061234f565b905080611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061286c565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a984286858585600160405161167d95949392919061252b565b60405180910390a1505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6117d682611790565b810181811067ffffffffffffffff821117156117f5576117f46117a0565b5b80604052505050565b5f611807611777565b905061181382826117cd565b919050565b5f67ffffffffffffffff821115611832576118316117a0565b5b61183b82611790565b9050602081019050919050565b828183375f83830152505050565b5f61186861186384611818565b6117fe565b9050828152602081018484840111156118845761188361178c565b5b61188f848285611848565b509392505050565b5f82601f8301126118ab576118aa611788565b5b81356118bb848260208601611856565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118ed826118c4565b9050919050565b6118fd816118e3565b8114611907575f80fd5b50565b5f81359050611918816118f4565b92915050565b5f819050919050565b6119308161191e565b811461193a575f80fd5b50565b5f8135905061194b81611927565b92915050565b5f805f805f60a0868803121561196a57611969611780565b5b5f86013567ffffffffffffffff81111561198757611986611784565b5b61199388828901611897565b95505060206119a48882890161190a565b94505060406119b58882890161190a565b93505060606119c68882890161193d565b92505060806119d78882890161193d565b9150509295509295909350565b5f805f80608085870312156119fc576119fb611780565b5b5f85013567ffffffffffffffff811115611a1957611a18611784565b5b611a2587828801611897565b9450506020611a368782880161190a565b9350506040611a478782880161193d565b9250506060611a588782880161193d565b91505092959194509250565b5f805f60608486031215611a7b57611a7a611780565b5b5f84013567ffffffffffffffff811115611a9857611a97611784565b5b611aa486828701611897565b9350506020611ab58682870161190a565b9250506040611ac68682870161193d565b9150509250925092565b611ad9816118e3565b82525050565b5f602082019050611af25f830184611ad0565b92915050565b5f60208284031215611b0d57611b0c611780565b5b5f611b1a8482850161190a565b91505092915050565b5f805f805f805f60e0888a031215611b3e57611b3d611780565b5b5f88013567ffffffffffffffff811115611b5b57611b5a611784565b5b611b678a828b01611897565b9750506020611b788a828b0161190a565b9650506040611b898a828b0161190a565b9550506060611b9a8a828b0161193d565b9450506080611bab8a828b0161193d565b93505060a0611bbc8a828b0161193d565b92505060c0611bcd8a828b0161193d565b91505092959891949750929550565b5f805f805f8060c08789031215611bf657611bf5611780565b5b5f87013567ffffffffffffffff811115611c1357611c12611784565b5b611c1f89828a01611897565b9650506020611c3089828a0161190a565b9550506040611c4189828a0161190a565b9450506060611c5289828a0161193d565b9350506080611c6389828a0161193d565b92505060a0611c7489828a0161193d565b9150509295509295509295565b5f82825260208201905092915050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c656420627920746865204a4300000000000000000000000000000000000000602082015250565b5f611ceb602d83611c81565b9150611cf682611c91565b604082019050919050565b5f6020820190508181035f830152611d1881611cdf565b9050919050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c65642062792074686520525000000000000000000000000000000000000000602082015250565b5f611d79602d83611c81565b9150611d8482611d1f565b604082019050919050565b5f6020820190508181035f830152611da681611d6d565b9050919050565b7f4c696c657061645061796d656e74733a20546f6b656e2061646472657373206d5f8201527f75737420626520646566696e6564000000000000000000000000000000000000602082015250565b5f611e07602e83611c81565b9150611e1282611dad565b604082019050919050565b5f6020820190508181035f830152611e3481611dfb565b9050919050565b7f4c696c79706164546f6b656e3a2063616e4368616e6765546f6b656e416464725f8201527f6573732069732064697361626c65640000000000000000000000000000000000602082015250565b5f611e95602f83611c81565b9150611ea082611e3b565b604082019050919050565b5f6020820190508181035f830152611ec281611e89565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f008261191e565b9150611f0b8361191e565b9250828203905081811115611f2357611f22611ec9565b5b92915050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c656420627920746865205250206f72204a4300000000000000000000000000602082015250565b5f611f83603383611c81565b9150611f8e82611f29565b604082019050919050565b5f6020820190508181035f830152611fb081611f77565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f612011602e83611c81565b915061201c82611fb7565b604082019050919050565b5f6020820190508181035f83015261203e81612005565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61207d61207861207384612045565b61205a565b61204e565b9050919050565b61208d81612063565b82525050565b5f6020820190506120a65f830184612084565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612106602683611c81565b9150612111826120ac565b604082019050919050565b5f6020820190508181035f830152612133816120fa565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f612194603583611c81565b915061219f8261213a565b604082019050919050565b5f6020820190508181035f8301526121c181612188565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f612222603983611c81565b915061222d826121c8565b604082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6122b0603b83611c81565b91506122bb82612256565b604082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b6122ed8161191e565b82525050565b5f6040820190506123065f830185611ad0565b61231360208301846122e4565b9392505050565b5f8115159050919050565b61232e8161231a565b8114612338575f80fd5b50565b5f8151905061234981612325565b92915050565b5f6020828403121561236457612363611780565b5b5f6123718482850161233b565b91505092915050565b7f4c696c797061645061796d656e74733a20526566756e6420657363726f7720665f8201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b5f6123d4602583611c81565b91506123df8261237a565b604082019050919050565b5f6020820190508181035f830152612401816123c8565b9050919050565b5f81519050919050565b5f5b8381101561242f578082015181840152602081019050612414565b5f8484015250505050565b5f61244482612408565b61244e8185611c81565b935061245e818560208601612412565b61246781611790565b840191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600581106124b0576124af612472565b5b50565b5f8190506124c08261249f565b919050565b5f6124cf826124b3565b9050919050565b6124df816124c5565b82525050565b600481106124f6576124f5612472565b5b50565b5f819050612506826124e5565b919050565b5f612515826124f9565b9050919050565b6125258161250b565b82525050565b5f60a0820190508181035f830152612543818861243a565b90506125526020830187611ad0565b61255f60408301866122e4565b61256c60608301856124d6565b612579608083018461251c565b9695505050505050565b7f4c696c797061645061796d656e74733a20536c61736820657363726f772066615f8201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b5f6125dd602483611c81565b91506125e882612583565b604082019050919050565b5f6020820190508181035f83015261260a816125d1565b9050919050565b5f8151905061261f81611927565b92915050565b5f6020828403121561263a57612639611780565b5b5f61264784828501612611565b91505092915050565b7f4c696c797061645061796d656e74733a20496e73756666696369656e742062615f8201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b5f6126aa602583611c81565b91506126b582612650565b604082019050919050565b5f6020820190508181035f8301526126d78161269e565b9050919050565b5f6020820190506126f15f8301846122e4565b92915050565b7f4c696c797061645061796d656e74733a2050617920657363726f77206661696c5f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f612751602283611c81565b915061275c826126f7565b604082019050919050565b5f6020820190508181035f83015261277e81612745565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127b9602083611c81565b91506127c482612785565b602082019050919050565b5f6020820190508181035f8301526127e6816127ad565b9050919050565b5f6060820190506128005f830186611ad0565b61280d6020830185611ad0565b61281a60408301846122e4565b949350505050565b7f4c696c797061645061796d656e74733a20506179206a6f62206661696c6564005f82015250565b5f612856601f83611c81565b915061286182612822565b602082019050919050565b5f6020820190508181035f8301526128838161284a565b905091905056fea264697066735822122025550a9856730ce906c7022ebf79adc5d85618920d4cd1ab4b6d0a2a1976cdb764736f6c63430008150033", + Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600360146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c080620001425f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c80639e3868dc116100b6578063b91880351161007a578063b9188035146102d2578063c4d66de8146102ee578063c57380a21461030a578063d2485cce14610328578063f2fde38b14610344578063f3d3d4481461036057610140565b80639e3868dc14610258578063a470295814610274578063aea382511461027e578063afe1dff71461029a578063b1356714146102b657610140565b80632a1f9072116101085780632a1f9072146101d257806338698529146101ee5780634bc28da11461020a578063715018a614610214578063823f3de11461021e5780638da5cb5b1461023a57610140565b806302fd8f801461014457806309cab510146101605780630ef0d89e1461017c57806310fe9ae81461019857806326a4e8d2146101b6575b5f80fd5b61015e60048036038101906101599190611951565b61037c565b005b61017a600480360381019061017591906119e4565b610420565b005b61019660048036038101906101919190611a64565b6104b6565b005b6101a061053f565b6040516101ad9190611adf565b60405180910390f35b6101d060048036038101906101cb9190611af8565b610567565b005b6101ec60048036038101906101e79190611b23565b6106af565b005b61020860048036038101906102039190611951565b610725565b005b6102126107bd565b005b61021c6107e1565b005b61023860048036038101906102339190611bdc565b6107f4565b005b6102426108cf565b60405161024f9190611adf565b60405180910390f35b610272600480360381019061026d9190611a64565b6108f6565b005b61027c61097e565b005b610298600480360381019061029391906119e4565b6109a2565b005b6102b460048036038101906102af91906119e4565b610a38565b005b6102d060048036038101906102cb9190611b23565b610ace565b005b6102ec60048036038101906102e791906119e4565b610bb1565b005b61030860048036038101906103039190611af8565b610c45565b005b610312610d86565b60405161031f9190611adf565b60405180910390f35b610342600480360381019061033d9190611bdc565b610dae565b005b61035e60048036038101906103599190611af8565b610de6565b005b61037a60048036038101906103759190611af8565b610e68565b005b610384610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146103f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ea90611d01565b60405180910390fd5b6103ff8584845f61109d565b61040c858483600261109d565b61041985858360026111c3565b5050505050565b610428610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048e90611d8f565b60405180910390fd5b6104a3848360016112e9565b6104b0848483600261109d565b50505050565b6104be610f70565b508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461052d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052490611d8f565b60405180910390fd5b61053a838383600261109d565b505050565b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61056f6114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d490611e1d565b60405180910390fd5b600360149054906101000a900460ff1661062c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062390611eab565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6106b7610f70565b505f8490505f848611156106cd578491506106dc565b85856106d99190611ef6565b90505b6106ea89888a856003611564565b6106f8898832866004611564565b5f81111561070d5761070c8988835f61109d565b5b61071a898986600161109d565b505050505050505050565b61072d610f70565b508373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390611d8f565b60405180910390fd5b6107a9858584600161109d565b6107b685848360026111c3565b5050505050565b6107c56114e6565b5f600360146101000a81548160ff021916908315150217905550565b6107e96114e6565b6107f25f61168d565b565b6107fc610f70565b508473ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16148061086257508373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16145b6108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890611f99565b60405180910390fd5b6108ae868684600161109d565b6108ba8685855f61109d565b6108c7868583600461109d565b505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108fe610f70565b508173ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490611d8f565b60405180910390fd5b610979838260026112e9565b505050565b6109866114e6565b5f600160146101000a81548160ff021916908315150217905550565b6109aa610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090611d01565b60405180910390fd5b610a26848484600261109d565b610a32848260046112e9565b50505050565b610a40610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690611d01565b60405180910390fd5b610abb8484845f61109d565b610ac8848483600261109d565b50505050565b610ad6610f70565b508473ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90611d01565b60405180910390fd5b5f8490505f84861115610b5a57849150610b69565b8585610b669190611ef6565b90505b610b7789888a856003611564565b5f811115610b8c57610b8b8988835f61109d565b5b610b99898885600261109d565b610ba6898986600161109d565b505050505050505050565b610bb9610f70565b508273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f90611d01565b60405180910390fd5b610c3384835f6112e9565b610c3f848260026112e9565b50505050565b5f600160169054906101000a900460ff16159050808015610c77575060018060159054906101000a900460ff1660ff16105b80610ca55750610c863061174e565b158015610ca4575060018060159054906101000a900460ff1660ff16145b5b610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb90612027565b60405180910390fd5b60018060156101000a81548160ff021916908360ff1602179055508015610d205760018060166101000a81548160ff0219169083151502179055505b610d2982610567565b8015610d82575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d799190612093565b60405180910390a15b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610db6610f70565b50610dc38685855f61109d565b610dd1868532846004611564565b610dde86868460016111c3565b505050505050565b610dee6114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e539061211c565b60405180910390fd5b610e658161168d565b50565b610e706114e6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906121aa565b60405180910390fd5b600160149054906101000a900460ff16610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612238565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff7906121aa565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611040611770565b73ffffffffffffffffffffffffffffffffffffffff1614611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d906122c6565b60405180910390fd5b6001905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663599efa6b85856040518363ffffffff1660e01b81526004016110fa9291906122f3565b6020604051808303815f875af1158015611116573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113a919061234f565b90508061117c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611173906123ea565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a98428585858560026040516111b495949392919061252b565b60405180910390a15050505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388c2bdfe85856040518363ffffffff1660e01b81526004016112209291906122f3565b6020604051808303815f875af115801561123c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611260919061234f565b9050806112a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611299906125f3565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a98428585858560036040516112da95949392919061252b565b60405180910390a15050505050565b8160035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231326040518263ffffffff1660e01b81526004016113449190611adf565b602060405180830381865afa15801561135f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113839190612625565b10156113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906126c0565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635407e93c846040518263ffffffff1660e01b815260040161141f91906126de565b6020604051808303815f875af115801561143b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145f919061234f565b9050806114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890612767565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a9842843285855f6040516114d895949392919061252b565b60405180910390a150505050565b6114ee611770565b73ffffffffffffffffffffffffffffffffffffffff1661150c6108cf565b73ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611559906127cf565b60405180910390fd5b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663065e86c88686866040518463ffffffff1660e01b81526004016115c3939291906127ed565b6020604051808303815f875af11580156115df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611603919061234f565b905080611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061286c565b60405180910390fd5b7f64861f505d0cfce7a0cc3629c70eb54f7de27be35939b48300935694958a984286858585600160405161167d95949392919061252b565b60405180910390a1505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6117d682611790565b810181811067ffffffffffffffff821117156117f5576117f46117a0565b5b80604052505050565b5f611807611777565b905061181382826117cd565b919050565b5f67ffffffffffffffff821115611832576118316117a0565b5b61183b82611790565b9050602081019050919050565b828183375f83830152505050565b5f61186861186384611818565b6117fe565b9050828152602081018484840111156118845761188361178c565b5b61188f848285611848565b509392505050565b5f82601f8301126118ab576118aa611788565b5b81356118bb848260208601611856565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6118ed826118c4565b9050919050565b6118fd816118e3565b8114611907575f80fd5b50565b5f81359050611918816118f4565b92915050565b5f819050919050565b6119308161191e565b811461193a575f80fd5b50565b5f8135905061194b81611927565b92915050565b5f805f805f60a0868803121561196a57611969611780565b5b5f86013567ffffffffffffffff81111561198757611986611784565b5b61199388828901611897565b95505060206119a48882890161190a565b94505060406119b58882890161190a565b93505060606119c68882890161193d565b92505060806119d78882890161193d565b9150509295509295909350565b5f805f80608085870312156119fc576119fb611780565b5b5f85013567ffffffffffffffff811115611a1957611a18611784565b5b611a2587828801611897565b9450506020611a368782880161190a565b9350506040611a478782880161193d565b9250506060611a588782880161193d565b91505092959194509250565b5f805f60608486031215611a7b57611a7a611780565b5b5f84013567ffffffffffffffff811115611a9857611a97611784565b5b611aa486828701611897565b9350506020611ab58682870161190a565b9250506040611ac68682870161193d565b9150509250925092565b611ad9816118e3565b82525050565b5f602082019050611af25f830184611ad0565b92915050565b5f60208284031215611b0d57611b0c611780565b5b5f611b1a8482850161190a565b91505092915050565b5f805f805f805f60e0888a031215611b3e57611b3d611780565b5b5f88013567ffffffffffffffff811115611b5b57611b5a611784565b5b611b678a828b01611897565b9750506020611b788a828b0161190a565b9650506040611b898a828b0161190a565b9550506060611b9a8a828b0161193d565b9450506080611bab8a828b0161193d565b93505060a0611bbc8a828b0161193d565b92505060c0611bcd8a828b0161193d565b91505092959891949750929550565b5f805f805f8060c08789031215611bf657611bf5611780565b5b5f87013567ffffffffffffffff811115611c1357611c12611784565b5b611c1f89828a01611897565b9650506020611c3089828a0161190a565b9550506040611c4189828a0161190a565b9450506060611c5289828a0161193d565b9350506080611c6389828a0161193d565b92505060a0611c7489828a0161193d565b9150509295509295509295565b5f82825260208201905092915050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c656420627920746865204a4300000000000000000000000000000000000000602082015250565b5f611ceb602d83611c81565b9150611cf682611c91565b604082019050919050565b5f6020820190508181035f830152611d1881611cdf565b9050919050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c65642062792074686520525000000000000000000000000000000000000000602082015250565b5f611d79602d83611c81565b9150611d8482611d1f565b604082019050919050565b5f6020820190508181035f830152611da681611d6d565b9050919050565b7f4c696c657061645061796d656e74733a20546f6b656e2061646472657373206d5f8201527f75737420626520646566696e6564000000000000000000000000000000000000602082015250565b5f611e07602e83611c81565b9150611e1282611dad565b604082019050919050565b5f6020820190508181035f830152611e3481611dfb565b9050919050565b7f4c696c79706164546f6b656e3a2063616e4368616e6765546f6b656e416464725f8201527f6573732069732064697361626c65640000000000000000000000000000000000602082015250565b5f611e95602f83611c81565b9150611ea082611e3b565b604082019050919050565b5f6020820190508181035f830152611ec281611e89565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f008261191e565b9150611f0b8361191e565b9250828203905081811115611f2357611f22611ec9565b5b92915050565b7f4c696c797061645061796d656e74733a2043616e206f6e6c792062652063616c5f8201527f6c656420627920746865205250206f72204a4300000000000000000000000000602082015250565b5f611f83603383611c81565b9150611f8e82611f29565b604082019050919050565b5f6020820190508181035f830152611fb081611f77565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f612011602e83611c81565b915061201c82611fb7565b604082019050919050565b5f6020820190508181035f83015261203e81612005565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61207d61207861207384612045565b61205a565b61204e565b9050919050565b61208d81612063565b82525050565b5f6020820190506120a65f830184612084565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612106602683611c81565b9150612111826120ac565b604082019050919050565b5f6020820190508181035f830152612133816120fa565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f612194603583611c81565b915061219f8261213a565b604082019050919050565b5f6020820190508181035f8301526121c181612188565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f612222603983611c81565b915061222d826121c8565b604082019050919050565b5f6020820190508181035f83015261224f81612216565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6122b0603b83611c81565b91506122bb82612256565b604082019050919050565b5f6020820190508181035f8301526122dd816122a4565b9050919050565b6122ed8161191e565b82525050565b5f6040820190506123065f830185611ad0565b61231360208301846122e4565b9392505050565b5f8115159050919050565b61232e8161231a565b8114612338575f80fd5b50565b5f8151905061234981612325565b92915050565b5f6020828403121561236457612363611780565b5b5f6123718482850161233b565b91505092915050565b7f4c696c797061645061796d656e74733a20526566756e6420657363726f7720665f8201527f61696c6564000000000000000000000000000000000000000000000000000000602082015250565b5f6123d4602583611c81565b91506123df8261237a565b604082019050919050565b5f6020820190508181035f830152612401816123c8565b9050919050565b5f81519050919050565b5f5b8381101561242f578082015181840152602081019050612414565b5f8484015250505050565b5f61244482612408565b61244e8185611c81565b935061245e818560208601612412565b61246781611790565b840191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600581106124b0576124af612472565b5b50565b5f8190506124c08261249f565b919050565b5f6124cf826124b3565b9050919050565b6124df816124c5565b82525050565b600481106124f6576124f5612472565b5b50565b5f819050612506826124e5565b919050565b5f612515826124f9565b9050919050565b6125258161250b565b82525050565b5f60a0820190508181035f830152612543818861243a565b90506125526020830187611ad0565b61255f60408301866122e4565b61256c60608301856124d6565b612579608083018461251c565b9695505050505050565b7f4c696c797061645061796d656e74733a20536c61736820657363726f772066615f8201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b5f6125dd602483611c81565b91506125e882612583565b604082019050919050565b5f6020820190508181035f83015261260a816125d1565b9050919050565b5f8151905061261f81611927565b92915050565b5f6020828403121561263a57612639611780565b5b5f61264784828501612611565b91505092915050565b7f4c696c797061645061796d656e74733a20496e73756666696369656e742062615f8201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b5f6126aa602583611c81565b91506126b582612650565b604082019050919050565b5f6020820190508181035f8301526126d78161269e565b9050919050565b5f6020820190506126f15f8301846122e4565b92915050565b7f4c696c797061645061796d656e74733a2050617920657363726f77206661696c5f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f612751602283611c81565b915061275c826126f7565b604082019050919050565b5f6020820190508181035f83015261277e81612745565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6127b9602083611c81565b91506127c482612785565b602082019050919050565b5f6020820190508181035f8301526127e6816127ad565b9050919050565b5f6060820190506128005f830186611ad0565b61280d6020830185611ad0565b61281a60408301846122e4565b949350505050565b7f4c696c797061645061796d656e74733a20506179206a6f62206661696c6564005f82015250565b5f612856601f83611c81565b915061286182612822565b602082019050919050565b5f6020820190508181035f8301526128838161284a565b905091905056fea264697066735822122055ff335a3901ce1bb55b485e62f915fd5eec008c00175337ff438c6d2738e4f564736f6c63430008150033", } // PaymentsABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/bindings/storage/storage.go b/pkg/web3/bindings/storage/storage.go index 1ec751ba..b563be23 100644 --- a/pkg/web3/bindings/storage/storage.go +++ b/pkg/web3/bindings/storage/storage.go @@ -96,7 +96,7 @@ type SharedStructsResult struct { // StorageMetaData contains all meta data concerning the Storage contract. var StorageMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"DealStateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"acceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"addResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeJobCreator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"agreeResourceProvider\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"checkResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"name\":\"ensureDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getAgreement\",\"outputs\":[{\"components\":[{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"resourceProviderAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jobCreatorAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealCreatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dealAgreedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsSubmittedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCheckedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationAcceptedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationRejectedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutAgreeAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutSubmitResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutJudgeResultsAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeoutMediateResultsAt\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Agreement\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getDeal\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"solver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jobCreator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resourceProvider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"mediators\",\"type\":\"address[]\"}],\"internalType\":\"structSharedStructs.DealMembers\",\"name\":\"members\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"agree\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"submitResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"judgeResults\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealTimeout\",\"name\":\"mediateResults\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.DealTimeouts\",\"name\":\"timeouts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"instructionPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"paymentCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"resultsCollateralMultiple\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mediationFee\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.DealPricing\",\"name\":\"pricing\",\"type\":\"tuple\"}],\"internalType\":\"structSharedStructs.Deal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"party\",\"type\":\"address\"}],\"name\":\"getDealsForParty\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getJobCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResult\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"internalType\":\"structSharedStructs.Result\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"getResultsCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"hasDeal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.AgreementState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"isState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationAcceptResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"mediationRejectResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutAgree\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutJudgeResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutMediateResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"}],\"name\":\"timeoutSubmitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600260146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61500380620001425f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80638224ce5f116100f7578063cdd82d1d11610095578063e850be371161006f578063e850be37146104d9578063ec95b967146104f5578063f2fde38b14610525578063f3d3d44814610541576101a7565b8063cdd82d1d1461045d578063e70791801461048d578063e7b957d1146104bd576101a7565b8063a4702958116100d1578063a4702958146103d5578063a6370b0e146103df578063b050e74b1461040f578063c57380a21461043f576101a7565b80638224ce5f1461036b578063824518aa1461039b5780638da5cb5b146103b7576101a7565b8063498cc70d1161016457806373db5c6a1161013e57806373db5c6a146102f9578063795f9abf1461032957806380ffdfe0146103455780638129fc1c14610361576101a7565b8063498cc70d146102a3578063511a9f68146102d3578063715018a6146102ef576101a7565b806311d5af33146101ab5780632244ad2b146101db578063297f9e551461020b5780633955548e146102275780633c4135da1461025757806346834d1e14610287575b5f80fd5b6101c560048036038101906101c091906130bc565b61055d565b6040516101d2919061322c565b60405180910390f35b6101f560048036038101906101f09190613378565b61066e565b60405161020291906133d9565b60405180910390f35b61022560048036038101906102209190613378565b610685565b005b610241600480360381019061023c9190613425565b61070c565b60405161024e919061355a565b60405180910390f35b610271600480360381019061026c9190613378565b610a10565b60405161027e919061370b565b60405180910390f35b6102a1600480360381019061029c9190613378565b610be7565b005b6102bd60048036038101906102b89190613378565b610c6e565b6040516102ca919061355a565b60405180910390f35b6102ed60048036038101906102e89190613378565b610e5f565b005b6102f7610ee6565b005b610313600480360381019061030e9190613378565b610ef9565b6040516103209190613734565b60405180910390f35b610343600480360381019061033e9190613378565b610f51565b005b61035f600480360381019061035a9190613378565b610fd7565b005b61036961105e565b005b61038560048036038101906103809190613378565b611195565b6040516103929190613734565b60405180910390f35b6103b560048036038101906103b09190613378565b6111d5565b005b6103bf61125c565b6040516103cc919061375c565b60405180910390f35b6103dd611283565b005b6103f960048036038101906103f49190613a0a565b6112a7565b6040516104069190613cfc565b60405180910390f35b61042960048036038101906104249190613d3f565b611985565b60405161043691906133d9565b60405180910390f35b610447611a1d565b604051610454919061375c565b60405180910390f35b61047760048036038101906104729190613378565b611a45565b604051610484919061370b565b60405180910390f35b6104a760048036038101906104a29190613378565b611b39565b6040516104b49190613cfc565b60405180910390f35b6104d760048036038101906104d29190613378565b611e87565b005b6104f360048036038101906104ee9190613378565b611f0e565b005b61050f600480360381019061050a9190613378565b611f95565b60405161051c919061370b565b60405180910390f35b61053f600480360381019061053a91906130bc565b61216c565b005b61055b600480360381019061055691906130bc565b6121ee565b005b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610663578382905f5260205f200180546105d890613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613dc6565b801561064f5780601f106106265761010080835404028352916020019161064f565b820191905f5260205f20905b81548152906001019060200180831161063257829003601f168201915b5050505050815260200190600101906105bb565b505050509050919050565b5f8061067983611b39565b5f015151119050919050565b61068d6122f6565b50610699816002611985565b6106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90613e50565b60405180910390fd5b426005826040516106e99190613ea8565b908152602001604051809103902060060181905550610709816003612423565b50565b610714612df8565b61071c6122f6565b50610728856001611985565b610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90613f08565b60405180910390fd5b426005866040516107789190613ea8565b908152602001604051809103902060050181905550610798856002612423565b6040518060800160405280868152602001858152602001848152602001838152506006866040516107c99190613ea8565b90815260200160405180910390205f820151815f0190816107ea91906140c3565b50602082015181600101908161080091906140c3565b50604082015181600201908161081691906140c3565b50606082015181600301559050506006856040516108349190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461085c90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461088890613dc6565b80156108d35780601f106108aa576101008083540402835291602001916108d3565b820191905f5260205f20905b8154815290600101906020018083116108b657829003601f168201915b505050505081526020016001820180546108ec90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461091890613dc6565b80156109635780601f1061093a57610100808354040283529160200191610963565b820191905f5260205f20905b81548152906001019060200180831161094657829003601f168201915b5050505050815260200160028201805461097c90613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890613dc6565b80156109f35780601f106109ca576101008083540402835291602001916109f3565b820191905f5260205f20905b8154815290600101906020018083116109d657829003601f168201915b505050505081526020016003820154815250509050949350505050565b610a18612e1f565b610a206122f6565b50610a2a8261066e565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a60906141dc565b60405180910390fd5b5f600583604051610a7a9190613ea8565b90815260200160405180910390206002015414610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390614244565b60405180910390fd5b42600583604051610add9190613ea8565b908152602001604051809103902060020181905550610afb826124a7565b600582604051610b0b9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115610b4857610b4761357a565b5b600a811115610b5a57610b5961357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b610bef6122f6565b50610bfb816002611985565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613e50565b60405180910390fd5b42600582604051610c4b9190613ea8565b908152602001604051809103902060070181905550610c6b816004612423565b50565b610c76612df8565b600682604051610c869190613ea8565b90815260200160405180910390206040518060800160405290815f82018054610cae90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90613dc6565b8015610d255780601f10610cfc57610100808354040283529160200191610d25565b820191905f5260205f20905b815481529060010190602001808311610d0857829003601f168201915b50505050508152602001600182018054610d3e90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6a90613dc6565b8015610db55780601f10610d8c57610100808354040283529160200191610db5565b820191905f5260205f20905b815481529060010190602001808311610d9857829003601f168201915b50505050508152602001600282018054610dce90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfa90613dc6565b8015610e455780601f10610e1c57610100808354040283529160200191610e45565b820191905f5260205f20905b815481529060010190602001808311610e2857829003601f168201915b505050505081526020016003820154815250509050919050565b610e676122f6565b50610e73816001611985565b610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613f08565b60405180910390fd5b42600582604051610ec39190613ea8565b9081526020016040518091039020600b0181905550610ee3816008612423565b50565b610eee61255e565b610ef75f6125dc565b565b5f600682604051610f0a9190613ea8565b908152602001604051809103902060030154600383604051610f2c9190613ea8565b9081526020016040518091039020600d015f0154610f4a919061428f565b9050919050565b610f596122f6565b50610f64815f611985565b610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9061431a565b60405180910390fd5b42600582604051610fb49190613ea8565b9081526020016040518091039020600a0181905550610fd4816007612423565b50565b610fdf6122f6565b50610feb816004611985565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614382565b60405180910390fd5b4260058260405161103b9190613ea8565b90815260200160405180910390206009018190555061105b816006612423565b50565b5f600160169054906101000a900460ff16159050808015611090575060018060159054906101000a900460ff1660ff16105b806110be575061109f3061269d565b1580156110bd575060018060159054906101000a900460ff1660ff16145b5b6110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614410565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156111395760018060166101000a81548160ff0219169083151502179055505b8015611192575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111899190614473565b60405180910390a15b50565b5f61119f82610ef9565b6003836040516111af9190613ea8565b9081526020016040518091039020600d01600201546111ce919061428f565b9050919050565b6111dd6122f6565b506111e9816004611985565b611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614382565b60405180910390fd5b426005826040516112399190613ea8565b908152602001604051809103902060080181905550611259816005612423565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61128b61255e565b5f600160146101000a81548160ff021916908315150217905550565b6112af612e92565b6112b76122f6565b506112c2855f611985565b611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f89061431a565b60405180910390fd5b61130a846126bf565b611313836128d4565b61131c8561066e565b1561135d575f61132b86611b39565b905061133b81602001518661296a565b611349816040015185612be7565b611357816060015184612c31565b5061163c565b60405180608001604052808681526020018581526020018481526020018381525060038660405161138e9190613ea8565b90815260200160405180910390205f820151815f0190816113af91906140c3565b506020820151816001015f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190805190602001906114a5929190612ecc565b5050506040820151816005015f820151815f015f820151815f01556020820151816001015550506020820151816002015f820151815f01556020820151816001015550506040820151816004015f820151815f01556020820151816001015550506060820151816006015f820151815f01556020820151816001015550505050606082015181600d015f820151815f0155602082015181600101556040820151816002015560608201518160030155505090505060045f856040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f9091909190915090816115c991906140c3565b5060045f856020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f90919091909150908161163a91906140c3565b505b60038560405161164c9190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461167490613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546116a090613dc6565b80156116eb5780601f106116c2576101008083540402835291602001916116eb565b820191905f5260205f20905b8154815290600101906020018083116116ce57829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820180548060200260200160405190810160405280929190818152602001828054801561188457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161183b575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050949350505050565b5f61198f8361066e565b6119c1575f600a8111156119a6576119a561357a565b5b82600a8111156119b9576119b861357a565b5b149050611a17565b81600a8111156119d4576119d361357a565b5b6005846040516119e49190613ea8565b90815260200160405180910390205f015f9054906101000a900460ff16600a811115611a1357611a1261357a565b5b1490505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4d612e1f565b600582604051611a5d9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115611a9a57611a9961357a565b5b600a811115611aac57611aab61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b611b41612e92565b600382604051611b519190613ea8565b90815260200160405180910390206040518060800160405290815f82018054611b7990613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba590613dc6565b8015611bf05780601f10611bc757610100808354040283529160200191611bf0565b820191905f5260205f20905b815481529060010190602001808311611bd357829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201805480602002602001604051908101604052809291908181526020018280548015611d8957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d40575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050919050565b611e8f6122f6565b50611e9b816004611985565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190614382565b60405180910390fd5b42600582604051611eeb9190613ea8565b9081526020016040518091039020600d0181905550611f0b81600a612423565b50565b611f166122f6565b50611f22816002611985565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613e50565b60405180910390fd5b42600582604051611f729190613ea8565b9081526020016040518091039020600c0181905550611f92816009612423565b50565b611f9d612e1f565b611fa56122f6565b50611faf8261066e565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141dc565b60405180910390fd5b5f600583604051611fff9190613ea8565b90815260200160405180910390206001015414612051576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612048906144d6565b60405180910390fd5b426005836040516120629190613ea8565b908152602001604051809103902060010181905550612080826124a7565b6005826040516120909190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a8111156120cd576120cc61357a565b5b600a8111156120df576120de61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b61217461255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614564565b60405180910390fd5b6121eb816125dc565b50565b6121f661255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b906145f2565b60405180910390fd5b600160149054906101000a900460ff166122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614680565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d906145f2565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123c6612d5b565b73ffffffffffffffffffffffffffffffffffffffff161461241c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124139061470e565b60405180910390fd5b6001905090565b806005836040516124349190613ea8565b90815260200160405180910390205f015f6101000a81548160ff0219169083600a8111156124655761246461357a565b5b02179055507f10ca3d89184491f5d8de422bd36534abe6eb4b4aa1429a261bdb5ff1dd9ac386828260405161249b929190614773565b60405180910390a15050565b5f6005826040516124b89190613ea8565b908152602001604051809103902060010154141580156124f957505f6005826040516124e49190613ea8565b90815260200160405180910390206002015414155b15612534574260058260405161250f9190613ea8565b90815260200160405180910390206004018190555061252f816001612423565b61255b565b426005826040516125459190613ea8565b9081526020016040518091039020600301819055505b50565b612566612d5b565b73ffffffffffffffffffffffffffffffffffffffff1661258461125c565b73ffffffffffffffffffffffffffffffffffffffff16146125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d1906147eb565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614853565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16036127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a906148bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1603612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90614923565b60405180910390fd5b5f8160600151511161285b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128529061498b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16036128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c8906149f3565b60405180910390fd5b50565b5f815f0151602001511461291d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291490614a5b565b60405180910390fd5b5f81606001516020015114612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614ac3565b60405180910390fd5b50565b806040015173ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff16146129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614b2b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614b93565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff16825f015173ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614bfb565b60405180910390fd5b80606001515182606001515114612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614c63565b60405180910390fd5b5f5b826060015151811015612be25781606001518181518110612b3c57612b3b614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1683606001518281518110612b7157612b70614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc690614cf8565b60405180910390fd5b8080612bda90614d16565b915050612b18565b505050565b612bf7825f0151825f0151612d62565b612c0982602001518260200151612d62565b612c1b82604001518260400151612d62565b612c2d82606001518260600151612d62565b5050565b805f0151825f015114612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090614da7565b60405180910390fd5b8060200151826020015114612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba90614e0f565b60405180910390fd5b8060400151826040015114612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614e77565b60405180910390fd5b8060600151826060015114612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614edf565b60405180910390fd5b5050565b5f33905090565b805f0151825f015114612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da190614f47565b60405180910390fd5b8060200151826020015114612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90614faf565b60405180910390fd5b5050565b60405180608001604052806060815260200160608152602001606081526020015f81525090565b604051806101c001604052805f600a811115612e3e57612e3d61357a565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806080016040528060608152602001612eac612f53565b8152602001612eb9612fba565b8152602001612ec6612ffa565b81525090565b828054828255905f5260205f20908101928215612f42579160200282015b82811115612f41578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612eea565b5b509050612f4f919061301e565b5090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060800160405280612fcd613039565b8152602001612fda613039565b8152602001612fe7613039565b8152602001612ff4613039565b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5b80821115613035575f815f90555060010161301f565b5090565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308b82613062565b9050919050565b61309b81613081565b81146130a5575f80fd5b50565b5f813590506130b681613092565b92915050565b5f602082840312156130d1576130d061305a565b5b5f6130de848285016130a8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561314757808201518184015260208101905061312c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61316c82613110565b613176818561311a565b935061318681856020860161312a565b61318f81613152565b840191505092915050565b5f6131a58383613162565b905092915050565b5f602082019050919050565b5f6131c3826130e7565b6131cd81856130f1565b9350836020820285016131df85613101565b805f5b8581101561321a57848403895281516131fb858261319a565b9450613206836131ad565b925060208a019950506001810190506131e2565b50829750879550505050505092915050565b5f6020820190508181035f83015261324481846131b9565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61328a82613152565b810181811067ffffffffffffffff821117156132a9576132a8613254565b5b80604052505050565b5f6132bb613051565b90506132c78282613281565b919050565b5f67ffffffffffffffff8211156132e6576132e5613254565b5b6132ef82613152565b9050602081019050919050565b828183375f83830152505050565b5f61331c613317846132cc565b6132b2565b90508281526020810184848401111561333857613337613250565b5b6133438482856132fc565b509392505050565b5f82601f83011261335f5761335e61324c565b5b813561336f84826020860161330a565b91505092915050565b5f6020828403121561338d5761338c61305a565b5b5f82013567ffffffffffffffff8111156133aa576133a961305e565b5b6133b68482850161334b565b91505092915050565b5f8115159050919050565b6133d3816133bf565b82525050565b5f6020820190506133ec5f8301846133ca565b92915050565b5f819050919050565b613404816133f2565b811461340e575f80fd5b50565b5f8135905061341f816133fb565b92915050565b5f805f806080858703121561343d5761343c61305a565b5b5f85013567ffffffffffffffff81111561345a5761345961305e565b5b6134668782880161334b565b945050602085013567ffffffffffffffff8111156134875761348661305e565b5b6134938782880161334b565b935050604085013567ffffffffffffffff8111156134b4576134b361305e565b5b6134c08782880161334b565b92505060606134d187828801613411565b91505092959194509250565b6134e6816133f2565b82525050565b5f608083015f8301518482035f8601526135068282613162565b915050602083015184820360208601526135208282613162565b9150506040830151848203604086015261353a8282613162565b915050606083015161354f60608601826134dd565b508091505092915050565b5f6020820190508181035f83015261357281846134ec565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106135b8576135b761357a565b5b50565b5f8190506135c8826135a7565b919050565b5f6135d7826135bb565b9050919050565b6135e7816135cd565b82525050565b6101c082015f8201516136025f8501826135de565b50602082015161361560208501826134dd565b50604082015161362860408501826134dd565b50606082015161363b60608501826134dd565b50608082015161364e60808501826134dd565b5060a082015161366160a08501826134dd565b5060c082015161367460c08501826134dd565b5060e082015161368760e08501826134dd565b5061010082015161369c6101008501826134dd565b506101208201516136b16101208501826134dd565b506101408201516136c66101408501826134dd565b506101608201516136db6101608501826134dd565b506101808201516136f06101808501826134dd565b506101a08201516137056101a08501826134dd565b50505050565b5f6101c08201905061371f5f8301846135ed565b92915050565b61372e816133f2565b82525050565b5f6020820190506137475f830184613725565b92915050565b61375681613081565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561379757613796613254565b5b602082029050602081019050919050565b5f80fd5b5f6137be6137b98461377d565b6132b2565b905080838252602082019050602084028301858111156137e1576137e06137a8565b5b835b8181101561380a57806137f688826130a8565b8452602084019350506020810190506137e3565b5050509392505050565b5f82601f8301126138285761382761324c565b5b81356138388482602086016137ac565b91505092915050565b5f6080828403121561385657613855613775565b5b61386060806132b2565b90505f61386f848285016130a8565b5f830152506020613882848285016130a8565b6020830152506040613896848285016130a8565b604083015250606082013567ffffffffffffffff8111156138ba576138b9613779565b5b6138c684828501613814565b60608301525092915050565b5f604082840312156138e7576138e6613775565b5b6138f160406132b2565b90505f61390084828501613411565b5f83015250602061391384828501613411565b60208301525092915050565b5f610100828403121561393557613934613775565b5b61393f60806132b2565b90505f61394e848285016138d2565b5f830152506040613961848285016138d2565b6020830152506080613975848285016138d2565b60408301525060c0613989848285016138d2565b60608301525092915050565b5f608082840312156139aa576139a9613775565b5b6139b460806132b2565b90505f6139c384828501613411565b5f8301525060206139d684828501613411565b60208301525060406139ea84828501613411565b60408301525060606139fe84828501613411565b60608301525092915050565b5f805f806101c08587031215613a2357613a2261305a565b5b5f85013567ffffffffffffffff811115613a4057613a3f61305e565b5b613a4c8782880161334b565b945050602085013567ffffffffffffffff811115613a6d57613a6c61305e565b5b613a7987828801613841565b9350506040613a8a8782880161391f565b925050610140613a9c87828801613995565b91505092959194509250565b613ab181613081565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f613aeb8383613aa8565b60208301905092915050565b5f602082019050919050565b5f613b0d82613ab7565b613b178185613ac1565b9350613b2283613ad1565b805f5b83811015613b52578151613b398882613ae0565b9750613b4483613af7565b925050600181019050613b25565b5085935050505092915050565b5f608083015f830151613b745f860182613aa8565b506020830151613b876020860182613aa8565b506040830151613b9a6040860182613aa8565b5060608301518482036060860152613bb28282613b03565b9150508091505092915050565b604082015f820151613bd35f8501826134dd565b506020820151613be660208501826134dd565b50505050565b61010082015f820151613c015f850182613bbf565b506020820151613c146040850182613bbf565b506040820151613c276080850182613bbf565b506060820151613c3a60c0850182613bbf565b50505050565b608082015f820151613c545f8501826134dd565b506020820151613c6760208501826134dd565b506040820151613c7a60408501826134dd565b506060820151613c8d60608501826134dd565b50505050565b5f6101c083015f8301518482035f860152613cae8282613162565b91505060208301518482036020860152613cc88282613b5f565b9150506040830151613cdd6040860182613bec565b506060830151613cf1610140860182613c40565b508091505092915050565b5f6020820190508181035f830152613d148184613c93565b905092915050565b600b8110613d28575f80fd5b50565b5f81359050613d3981613d1c565b92915050565b5f8060408385031215613d5557613d5461305a565b5b5f83013567ffffffffffffffff811115613d7257613d7161305e565b5b613d7e8582860161334b565b9250506020613d8f85828601613d2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ddd57607f821691505b602082108103613df057613def613d99565b5b50919050565b5f82825260208201905092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613e3a601083613df6565b9150613e4582613e06565b602082019050919050565b5f6020820190508181035f830152613e6781613e2e565b9050919050565b5f81905092915050565b5f613e8282613110565b613e8c8185613e6e565b9350613e9c81856020860161312a565b80840191505092915050565b5f613eb38284613e78565b915081905092915050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f613ef2600a83613df6565b9150613efd82613ebe565b602082019050919050565b5f6020820190508181035f830152613f1f81613ee6565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f47565b613f8c8683613f47565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613fc7613fc2613fbd846133f2565b613fa4565b6133f2565b9050919050565b5f819050919050565b613fe083613fad565b613ff4613fec82613fce565b848454613f53565b825550505050565b5f90565b614008613ffc565b614013818484613fd7565b505050565b5b818110156140365761402b5f82614000565b600181019050614019565b5050565b601f82111561407b5761404c81613f26565b61405584613f38565b81016020851015614064578190505b61407861407085613f38565b830182614018565b50505b505050565b5f82821c905092915050565b5f61409b5f1984600802614080565b1980831691505092915050565b5f6140b3838361408c565b9150826002028217905092915050565b6140cc82613110565b67ffffffffffffffff8111156140e5576140e4613254565b5b6140ef8254613dc6565b6140fa82828561403a565b5f60209050601f83116001811461412b575f8415614119578287015190505b61412385826140a8565b86555061418a565b601f19841661413986613f26565b5f5b828110156141605784890151825560018201915060208501945060208101905061413b565b8683101561417d5784890151614179601f89168261408c565b8355505b6001600288020188555050505b505050505050565b7f4465616c20646f6573206e6f74206578697374000000000000000000000000005f82015250565b5f6141c6601383613df6565b91506141d182614192565b602082019050919050565b5f6020820190508181035f8301526141f3816141ba565b9050919050565b7f4a432068617320616c72656164792061677265656400000000000000000000005f82015250565b5f61422e601583613df6565b9150614239826141fa565b602082019050919050565b5f6020820190508181035f83015261425b81614222565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614299826133f2565b91506142a4836133f2565b92508282026142b2816133f2565b915082820484148315176142c9576142c8614262565b5b5092915050565b7f4465616c4e65676f74696174696e6700000000000000000000000000000000005f82015250565b5f614304600f83613df6565b915061430f826142d0565b602082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f61436c600e83613df6565b915061437782614338565b602082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6143fa602e83613df6565b9150614405826143a0565b604082019050919050565b5f6020820190508181035f830152614427816143ee565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f61445d6144586144538461442e565b613fa4565b614437565b9050919050565b61446d81614443565b82525050565b5f6020820190506144865f830184614464565b92915050565b7f52502068617320616c72656164792061677265656400000000000000000000005f82015250565b5f6144c0601583613df6565b91506144cb8261448c565b602082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61454e602683613df6565b9150614559826144f4565b604082019050919050565b5f6020820190508181035f83015261457b81614542565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f6145dc603583613df6565b91506145e782614582565b604082019050919050565b5f6020820190508181035f830152614609816145d0565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61466a603983613df6565b915061467582614610565b604082019050919050565b5f6020820190508181035f8301526146978161465e565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6146f8603b83613df6565b91506147038261469e565b604082019050919050565b5f6020820190508181035f830152614725816146ec565b9050919050565b5f61473682613110565b6147408185613df6565b935061475081856020860161312a565b61475981613152565b840191505092915050565b61476d816135cd565b82525050565b5f6040820190508181035f83015261478b818561472c565b905061479a6020830184614764565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147d5602083613df6565b91506147e0826147a1565b602082019050919050565b5f6020820190508181035f830152614802816147c9565b9050919050565b7f5250206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f61483d600a83613df6565b915061484882614809565b602082019050919050565b5f6020820190508181035f83015261486a81614831565b9050919050565b7f4a43206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f6148a5600a83613df6565b91506148b082614871565b602082019050919050565b5f6020820190508181035f8301526148d281614899565b9050919050565b7f536f6c766572206d697373696e670000000000000000000000000000000000005f82015250565b5f61490d600e83613df6565b9150614918826148d9565b602082019050919050565b5f6020820190508181035f83015261493a81614901565b9050919050565b7f4d65646961746f7273203c3d20300000000000000000000000000000000000005f82015250565b5f614975600e83613df6565b915061498082614941565b602082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f5250202f204a432073616d6500000000000000000000000000000000000000005f82015250565b5f6149dd600c83613df6565b91506149e8826149a9565b602082019050919050565b5f6020820190508181035f830152614a0a816149d1565b9050919050565b7f4167726565206465706f736974206d75737420626520300000000000000000005f82015250565b5f614a45601783613df6565b9150614a5082614a11565b602082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f4d656469617465206465706f736974206d7573742062652030000000000000005f82015250565b5f614aad601983613df6565b9150614ab882614a79565b602082019050919050565b5f6020820190508181035f830152614ada81614aa1565b9050919050565b7f52500000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b15600283613df6565b9150614b2082614ae1565b602082019050919050565b5f6020820190508181035f830152614b4281614b09565b9050919050565b7f4a430000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b7d600283613df6565b9150614b8882614b49565b602082019050919050565b5f6020820190508181035f830152614baa81614b71565b9050919050565b7f536f6c76657200000000000000000000000000000000000000000000000000005f82015250565b5f614be5600683613df6565b9150614bf082614bb1565b602082019050919050565b5f6020820190508181035f830152614c1281614bd9565b9050919050565b7f4d65646961746f727300000000000000000000000000000000000000000000005f82015250565b5f614c4d600983613df6565b9150614c5882614c19565b602082019050919050565b5f6020820190508181035f830152614c7a81614c41565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d65646961746f720000000000000000000000000000000000000000000000005f82015250565b5f614ce2600883613df6565b9150614ced82614cae565b602082019050919050565b5f6020820190508181035f830152614d0f81614cd6565b9050919050565b5f614d20826133f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5257614d51614262565b5b600182019050919050565b7f50726963650000000000000000000000000000000000000000000000000000005f82015250565b5f614d91600583613df6565b9150614d9c82614d5d565b602082019050919050565b5f6020820190508181035f830152614dbe81614d85565b9050919050565b7f5061796d656e74000000000000000000000000000000000000000000000000005f82015250565b5f614df9600783613df6565b9150614e0482614dc5565b602082019050919050565b5f6020820190508181035f830152614e2681614ded565b9050919050565b7f526573756c7473000000000000000000000000000000000000000000000000005f82015250565b5f614e61600783613df6565b9150614e6c82614e2d565b602082019050919050565b5f6020820190508181035f830152614e8e81614e55565b9050919050565b7f4d6564696174696f6e00000000000000000000000000000000000000000000005f82015250565b5f614ec9600983613df6565b9150614ed482614e95565b602082019050919050565b5f6020820190508181035f830152614ef681614ebd565b9050919050565b7f54696d656f7574000000000000000000000000000000000000000000000000005f82015250565b5f614f31600783613df6565b9150614f3c82614efd565b602082019050919050565b5f6020820190508181035f830152614f5e81614f25565b9050919050565b7f436f6c6c61746572616c000000000000000000000000000000000000000000005f82015250565b5f614f99600a83613df6565b9150614fa482614f65565b602082019050919050565b5f6020820190508181035f830152614fc681614f8d565b905091905056fea2646970667358221220ebd9e754409be1374e872691ba0704d73f23ad73d92a8ea2da9d10284faf1c8864736f6c63430008150033", + Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055506001600260146101000a81548160ff02191690831515021790555034801562000045575f80fd5b50620000666200005a6200006c60201b60201c565b6200007360201b60201c565b62000134565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61500380620001425f395ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80638224ce5f116100f7578063cdd82d1d11610095578063e850be371161006f578063e850be37146104d9578063ec95b967146104f5578063f2fde38b14610525578063f3d3d44814610541576101a7565b8063cdd82d1d1461045d578063e70791801461048d578063e7b957d1146104bd576101a7565b8063a4702958116100d1578063a4702958146103d5578063a6370b0e146103df578063b050e74b1461040f578063c57380a21461043f576101a7565b80638224ce5f1461036b578063824518aa1461039b5780638da5cb5b146103b7576101a7565b8063498cc70d1161016457806373db5c6a1161013e57806373db5c6a146102f9578063795f9abf1461032957806380ffdfe0146103455780638129fc1c14610361576101a7565b8063498cc70d146102a3578063511a9f68146102d3578063715018a6146102ef576101a7565b806311d5af33146101ab5780632244ad2b146101db578063297f9e551461020b5780633955548e146102275780633c4135da1461025757806346834d1e14610287575b5f80fd5b6101c560048036038101906101c091906130bc565b61055d565b6040516101d2919061322c565b60405180910390f35b6101f560048036038101906101f09190613378565b61066e565b60405161020291906133d9565b60405180910390f35b61022560048036038101906102209190613378565b610685565b005b610241600480360381019061023c9190613425565b61070c565b60405161024e919061355a565b60405180910390f35b610271600480360381019061026c9190613378565b610a10565b60405161027e919061370b565b60405180910390f35b6102a1600480360381019061029c9190613378565b610be7565b005b6102bd60048036038101906102b89190613378565b610c6e565b6040516102ca919061355a565b60405180910390f35b6102ed60048036038101906102e89190613378565b610e5f565b005b6102f7610ee6565b005b610313600480360381019061030e9190613378565b610ef9565b6040516103209190613734565b60405180910390f35b610343600480360381019061033e9190613378565b610f51565b005b61035f600480360381019061035a9190613378565b610fd7565b005b61036961105e565b005b61038560048036038101906103809190613378565b611195565b6040516103929190613734565b60405180910390f35b6103b560048036038101906103b09190613378565b6111d5565b005b6103bf61125c565b6040516103cc919061375c565b60405180910390f35b6103dd611283565b005b6103f960048036038101906103f49190613a0a565b6112a7565b6040516104069190613cfc565b60405180910390f35b61042960048036038101906104249190613d3f565b611985565b60405161043691906133d9565b60405180910390f35b610447611a1d565b604051610454919061375c565b60405180910390f35b61047760048036038101906104729190613378565b611a45565b604051610484919061370b565b60405180910390f35b6104a760048036038101906104a29190613378565b611b39565b6040516104b49190613cfc565b60405180910390f35b6104d760048036038101906104d29190613378565b611e87565b005b6104f360048036038101906104ee9190613378565b611f0e565b005b61050f600480360381019061050a9190613378565b611f95565b60405161051c919061370b565b60405180910390f35b61053f600480360381019061053a91906130bc565b61216c565b005b61055b600480360381019061055691906130bc565b6121ee565b005b606060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610663578382905f5260205f200180546105d890613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461060490613dc6565b801561064f5780601f106106265761010080835404028352916020019161064f565b820191905f5260205f20905b81548152906001019060200180831161063257829003601f168201915b5050505050815260200190600101906105bb565b505050509050919050565b5f8061067983611b39565b5f015151119050919050565b61068d6122f6565b50610699816002611985565b6106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90613e50565b60405180910390fd5b426005826040516106e99190613ea8565b908152602001604051809103902060060181905550610709816003612423565b50565b610714612df8565b61071c6122f6565b50610728856001611985565b610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90613f08565b60405180910390fd5b426005866040516107789190613ea8565b908152602001604051809103902060050181905550610798856002612423565b6040518060800160405280868152602001858152602001848152602001838152506006866040516107c99190613ea8565b90815260200160405180910390205f820151815f0190816107ea91906140c3565b50602082015181600101908161080091906140c3565b50604082015181600201908161081691906140c3565b50606082015181600301559050506006856040516108349190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461085c90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461088890613dc6565b80156108d35780601f106108aa576101008083540402835291602001916108d3565b820191905f5260205f20905b8154815290600101906020018083116108b657829003601f168201915b505050505081526020016001820180546108ec90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461091890613dc6565b80156109635780601f1061093a57610100808354040283529160200191610963565b820191905f5260205f20905b81548152906001019060200180831161094657829003601f168201915b5050505050815260200160028201805461097c90613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890613dc6565b80156109f35780601f106109ca576101008083540402835291602001916109f3565b820191905f5260205f20905b8154815290600101906020018083116109d657829003601f168201915b505050505081526020016003820154815250509050949350505050565b610a18612e1f565b610a206122f6565b50610a2a8261066e565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a60906141dc565b60405180910390fd5b5f600583604051610a7a9190613ea8565b90815260200160405180910390206002015414610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390614244565b60405180910390fd5b42600583604051610add9190613ea8565b908152602001604051809103902060020181905550610afb826124a7565b600582604051610b0b9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115610b4857610b4761357a565b5b600a811115610b5a57610b5961357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b610bef6122f6565b50610bfb816002611985565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613e50565b60405180910390fd5b42600582604051610c4b9190613ea8565b908152602001604051809103902060070181905550610c6b816004612423565b50565b610c76612df8565b600682604051610c869190613ea8565b90815260200160405180910390206040518060800160405290815f82018054610cae90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90613dc6565b8015610d255780601f10610cfc57610100808354040283529160200191610d25565b820191905f5260205f20905b815481529060010190602001808311610d0857829003601f168201915b50505050508152602001600182018054610d3e90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6a90613dc6565b8015610db55780601f10610d8c57610100808354040283529160200191610db5565b820191905f5260205f20905b815481529060010190602001808311610d9857829003601f168201915b50505050508152602001600282018054610dce90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfa90613dc6565b8015610e455780601f10610e1c57610100808354040283529160200191610e45565b820191905f5260205f20905b815481529060010190602001808311610e2857829003601f168201915b505050505081526020016003820154815250509050919050565b610e676122f6565b50610e73816001611985565b610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea990613f08565b60405180910390fd5b42600582604051610ec39190613ea8565b9081526020016040518091039020600b0181905550610ee3816008612423565b50565b610eee61255e565b610ef75f6125dc565b565b5f600682604051610f0a9190613ea8565b908152602001604051809103902060030154600383604051610f2c9190613ea8565b9081526020016040518091039020600d015f0154610f4a919061428f565b9050919050565b610f596122f6565b50610f64815f611985565b610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9061431a565b60405180910390fd5b42600582604051610fb49190613ea8565b9081526020016040518091039020600a0181905550610fd4816007612423565b50565b610fdf6122f6565b50610feb816004611985565b61102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614382565b60405180910390fd5b4260058260405161103b9190613ea8565b90815260200160405180910390206009018190555061105b816006612423565b50565b5f600160169054906101000a900460ff16159050808015611090575060018060159054906101000a900460ff1660ff16105b806110be575061109f3061269d565b1580156110bd575060018060159054906101000a900460ff1660ff16145b5b6110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614410565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156111395760018060166101000a81548160ff0219169083151502179055505b8015611192575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516111899190614473565b60405180910390a15b50565b5f61119f82610ef9565b6003836040516111af9190613ea8565b9081526020016040518091039020600d01600201546111ce919061428f565b9050919050565b6111dd6122f6565b506111e9816004611985565b611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614382565b60405180910390fd5b426005826040516112399190613ea8565b908152602001604051809103902060080181905550611259816005612423565b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61128b61255e565b5f600160146101000a81548160ff021916908315150217905550565b6112af612e92565b6112b76122f6565b506112c2855f611985565b611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f89061431a565b60405180910390fd5b61130a846126bf565b611313836128d4565b61131c8561066e565b1561135d575f61132b86611b39565b905061133b81602001518661296a565b611349816040015185612be7565b611357816060015184612c31565b5061163c565b60405180608001604052808681526020018581526020018481526020018381525060038660405161138e9190613ea8565b90815260200160405180910390205f820151815f0190816113af91906140c3565b506020820151816001015f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190805190602001906114a5929190612ecc565b5050506040820151816005015f820151815f015f820151815f01556020820151816001015550506020820151816002015f820151815f01556020820151816001015550506040820151816004015f820151815f01556020820151816001015550506060820151816006015f820151815f01556020820151816001015550505050606082015181600d015f820151815f0155602082015181600101556040820151816002015560608201518160030155505090505060045f856040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f9091909190915090816115c991906140c3565b5060045f856020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2085908060018154018082558091505060019003905f5260205f20015f90919091909150908161163a91906140c3565b505b60038560405161164c9190613ea8565b90815260200160405180910390206040518060800160405290815f8201805461167490613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546116a090613dc6565b80156116eb5780601f106116c2576101008083540402835291602001916116eb565b820191905f5260205f20905b8154815290600101906020018083116116ce57829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820180548060200260200160405190810160405280929190818152602001828054801561188457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161183b575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050949350505050565b5f61198f8361066e565b6119c1575f600a8111156119a6576119a561357a565b5b82600a8111156119b9576119b861357a565b5b149050611a17565b81600a8111156119d4576119d361357a565b5b6005846040516119e49190613ea8565b90815260200160405180910390205f015f9054906101000a900460ff16600a811115611a1357611a1261357a565b5b1490505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4d612e1f565b600582604051611a5d9190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a811115611a9a57611a9961357a565b5b600a811115611aac57611aab61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b611b41612e92565b600382604051611b519190613ea8565b90815260200160405180910390206040518060800160405290815f82018054611b7990613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba590613dc6565b8015611bf05780601f10611bc757610100808354040283529160200191611bf0565b820191905f5260205f20905b815481529060010190602001808311611bd357829003601f168201915b50505050508152602001600182016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201805480602002602001604051908101604052809291908181526020018280548015611d8957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d40575b5050505050815250508152602001600582016040518060800160405290815f82016040518060400160405290815f82015481526020016001820154815250508152602001600282016040518060400160405290815f82015481526020016001820154815250508152602001600482016040518060400160405290815f82015481526020016001820154815250508152602001600682016040518060400160405290815f8201548152602001600182015481525050815250508152602001600d82016040518060800160405290815f82015481526020016001820154815260200160028201548152602001600382015481525050815250509050919050565b611e8f6122f6565b50611e9b816004611985565b611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190614382565b60405180910390fd5b42600582604051611eeb9190613ea8565b9081526020016040518091039020600d0181905550611f0b81600a612423565b50565b611f166122f6565b50611f22816002611985565b611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613e50565b60405180910390fd5b42600582604051611f729190613ea8565b9081526020016040518091039020600c0181905550611f92816009612423565b50565b611f9d612e1f565b611fa56122f6565b50611faf8261066e565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906141dc565b60405180910390fd5b5f600583604051611fff9190613ea8565b90815260200160405180910390206001015414612051576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612048906144d6565b60405180910390fd5b426005836040516120629190613ea8565b908152602001604051809103902060010181905550612080826124a7565b6005826040516120909190613ea8565b9081526020016040518091039020604051806101c00160405290815f82015f9054906101000a900460ff16600a8111156120cd576120cc61357a565b5b600a8111156120df576120de61357a565b5b8152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820154815250509050919050565b61217461255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614564565b60405180910390fd5b6121eb816125dc565b50565b6121f661255e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b906145f2565b60405180910390fd5b600160149054906101000a900460ff166122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614680565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d906145f2565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123c6612d5b565b73ffffffffffffffffffffffffffffffffffffffff161461241c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124139061470e565b60405180910390fd5b6001905090565b806005836040516124349190613ea8565b90815260200160405180910390205f015f6101000a81548160ff0219169083600a8111156124655761246461357a565b5b02179055507f10ca3d89184491f5d8de422bd36534abe6eb4b4aa1429a261bdb5ff1dd9ac386828260405161249b929190614773565b60405180910390a15050565b5f6005826040516124b89190613ea8565b908152602001604051809103902060010154141580156124f957505f6005826040516124e49190613ea8565b90815260200160405180910390206002015414155b15612534574260058260405161250f9190613ea8565b90815260200160405180910390206004018190555061252f816001612423565b61255b565b426005826040516125459190613ea8565b9081526020016040518091039020600301819055505b50565b612566612d5b565b73ffffffffffffffffffffffffffffffffffffffff1661258461125c565b73ffffffffffffffffffffffffffffffffffffffff16146125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d1906147eb565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614853565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16036127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a906148bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff1603612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b90614923565b60405180910390fd5b5f8160600151511161285b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128529061498b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16036128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c8906149f3565b60405180910390fd5b50565b5f815f0151602001511461291d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291490614a5b565b60405180910390fd5b5f81606001516020015114612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e90614ac3565b60405180910390fd5b50565b806040015173ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff16146129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614b2b565b60405180910390fd5b806020015173ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff1614612a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4d90614b93565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff16825f015173ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614bfb565b60405180910390fd5b80606001515182606001515114612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90614c63565b60405180910390fd5b5f5b826060015151811015612be25781606001518181518110612b3c57612b3b614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1683606001518281518110612b7157612b70614c81565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc690614cf8565b60405180910390fd5b8080612bda90614d16565b915050612b18565b505050565b612bf7825f0151825f0151612d62565b612c0982602001518260200151612d62565b612c1b82604001518260400151612d62565b612c2d82606001518260600151612d62565b5050565b805f0151825f015114612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7090614da7565b60405180910390fd5b8060200151826020015114612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba90614e0f565b60405180910390fd5b8060400151826040015114612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614e77565b60405180910390fd5b8060600151826060015114612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614edf565b60405180910390fd5b5050565b5f33905090565b805f0151825f015114612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da190614f47565b60405180910390fd5b8060200151826020015114612df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612deb90614faf565b60405180910390fd5b5050565b60405180608001604052806060815260200160608152602001606081526020015f81525090565b604051806101c001604052805f600a811115612e3e57612e3d61357a565b5b81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806080016040528060608152602001612eac612f53565b8152602001612eb9612fba565b8152602001612ec6612ffa565b81525090565b828054828255905f5260205f20908101928215612f42579160200282015b82811115612f41578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612eea565b5b509050612f4f919061301e565b5090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6040518060800160405280612fcd613039565b8152602001612fda613039565b8152602001612fe7613039565b8152602001612ff4613039565b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5b80821115613035575f815f90555060010161301f565b5090565b60405180604001604052805f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61308b82613062565b9050919050565b61309b81613081565b81146130a5575f80fd5b50565b5f813590506130b681613092565b92915050565b5f602082840312156130d1576130d061305a565b5b5f6130de848285016130a8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561314757808201518184015260208101905061312c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61316c82613110565b613176818561311a565b935061318681856020860161312a565b61318f81613152565b840191505092915050565b5f6131a58383613162565b905092915050565b5f602082019050919050565b5f6131c3826130e7565b6131cd81856130f1565b9350836020820285016131df85613101565b805f5b8581101561321a57848403895281516131fb858261319a565b9450613206836131ad565b925060208a019950506001810190506131e2565b50829750879550505050505092915050565b5f6020820190508181035f83015261324481846131b9565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61328a82613152565b810181811067ffffffffffffffff821117156132a9576132a8613254565b5b80604052505050565b5f6132bb613051565b90506132c78282613281565b919050565b5f67ffffffffffffffff8211156132e6576132e5613254565b5b6132ef82613152565b9050602081019050919050565b828183375f83830152505050565b5f61331c613317846132cc565b6132b2565b90508281526020810184848401111561333857613337613250565b5b6133438482856132fc565b509392505050565b5f82601f83011261335f5761335e61324c565b5b813561336f84826020860161330a565b91505092915050565b5f6020828403121561338d5761338c61305a565b5b5f82013567ffffffffffffffff8111156133aa576133a961305e565b5b6133b68482850161334b565b91505092915050565b5f8115159050919050565b6133d3816133bf565b82525050565b5f6020820190506133ec5f8301846133ca565b92915050565b5f819050919050565b613404816133f2565b811461340e575f80fd5b50565b5f8135905061341f816133fb565b92915050565b5f805f806080858703121561343d5761343c61305a565b5b5f85013567ffffffffffffffff81111561345a5761345961305e565b5b6134668782880161334b565b945050602085013567ffffffffffffffff8111156134875761348661305e565b5b6134938782880161334b565b935050604085013567ffffffffffffffff8111156134b4576134b361305e565b5b6134c08782880161334b565b92505060606134d187828801613411565b91505092959194509250565b6134e6816133f2565b82525050565b5f608083015f8301518482035f8601526135068282613162565b915050602083015184820360208601526135208282613162565b9150506040830151848203604086015261353a8282613162565b915050606083015161354f60608601826134dd565b508091505092915050565b5f6020820190508181035f83015261357281846134ec565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600b81106135b8576135b761357a565b5b50565b5f8190506135c8826135a7565b919050565b5f6135d7826135bb565b9050919050565b6135e7816135cd565b82525050565b6101c082015f8201516136025f8501826135de565b50602082015161361560208501826134dd565b50604082015161362860408501826134dd565b50606082015161363b60608501826134dd565b50608082015161364e60808501826134dd565b5060a082015161366160a08501826134dd565b5060c082015161367460c08501826134dd565b5060e082015161368760e08501826134dd565b5061010082015161369c6101008501826134dd565b506101208201516136b16101208501826134dd565b506101408201516136c66101408501826134dd565b506101608201516136db6101608501826134dd565b506101808201516136f06101808501826134dd565b506101a08201516137056101a08501826134dd565b50505050565b5f6101c08201905061371f5f8301846135ed565b92915050565b61372e816133f2565b82525050565b5f6020820190506137475f830184613725565b92915050565b61375681613081565b82525050565b5f60208201905061376f5f83018461374d565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561379757613796613254565b5b602082029050602081019050919050565b5f80fd5b5f6137be6137b98461377d565b6132b2565b905080838252602082019050602084028301858111156137e1576137e06137a8565b5b835b8181101561380a57806137f688826130a8565b8452602084019350506020810190506137e3565b5050509392505050565b5f82601f8301126138285761382761324c565b5b81356138388482602086016137ac565b91505092915050565b5f6080828403121561385657613855613775565b5b61386060806132b2565b90505f61386f848285016130a8565b5f830152506020613882848285016130a8565b6020830152506040613896848285016130a8565b604083015250606082013567ffffffffffffffff8111156138ba576138b9613779565b5b6138c684828501613814565b60608301525092915050565b5f604082840312156138e7576138e6613775565b5b6138f160406132b2565b90505f61390084828501613411565b5f83015250602061391384828501613411565b60208301525092915050565b5f610100828403121561393557613934613775565b5b61393f60806132b2565b90505f61394e848285016138d2565b5f830152506040613961848285016138d2565b6020830152506080613975848285016138d2565b60408301525060c0613989848285016138d2565b60608301525092915050565b5f608082840312156139aa576139a9613775565b5b6139b460806132b2565b90505f6139c384828501613411565b5f8301525060206139d684828501613411565b60208301525060406139ea84828501613411565b60408301525060606139fe84828501613411565b60608301525092915050565b5f805f806101c08587031215613a2357613a2261305a565b5b5f85013567ffffffffffffffff811115613a4057613a3f61305e565b5b613a4c8782880161334b565b945050602085013567ffffffffffffffff811115613a6d57613a6c61305e565b5b613a7987828801613841565b9350506040613a8a8782880161391f565b925050610140613a9c87828801613995565b91505092959194509250565b613ab181613081565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f613aeb8383613aa8565b60208301905092915050565b5f602082019050919050565b5f613b0d82613ab7565b613b178185613ac1565b9350613b2283613ad1565b805f5b83811015613b52578151613b398882613ae0565b9750613b4483613af7565b925050600181019050613b25565b5085935050505092915050565b5f608083015f830151613b745f860182613aa8565b506020830151613b876020860182613aa8565b506040830151613b9a6040860182613aa8565b5060608301518482036060860152613bb28282613b03565b9150508091505092915050565b604082015f820151613bd35f8501826134dd565b506020820151613be660208501826134dd565b50505050565b61010082015f820151613c015f850182613bbf565b506020820151613c146040850182613bbf565b506040820151613c276080850182613bbf565b506060820151613c3a60c0850182613bbf565b50505050565b608082015f820151613c545f8501826134dd565b506020820151613c6760208501826134dd565b506040820151613c7a60408501826134dd565b506060820151613c8d60608501826134dd565b50505050565b5f6101c083015f8301518482035f860152613cae8282613162565b91505060208301518482036020860152613cc88282613b5f565b9150506040830151613cdd6040860182613bec565b506060830151613cf1610140860182613c40565b508091505092915050565b5f6020820190508181035f830152613d148184613c93565b905092915050565b600b8110613d28575f80fd5b50565b5f81359050613d3981613d1c565b92915050565b5f8060408385031215613d5557613d5461305a565b5b5f83013567ffffffffffffffff811115613d7257613d7161305e565b5b613d7e8582860161334b565b9250506020613d8f85828601613d2b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ddd57607f821691505b602082108103613df057613def613d99565b5b50919050565b5f82825260208201905092915050565b7f526573756c74735375626d6974746564000000000000000000000000000000005f82015250565b5f613e3a601083613df6565b9150613e4582613e06565b602082019050919050565b5f6020820190508181035f830152613e6781613e2e565b9050919050565b5f81905092915050565b5f613e8282613110565b613e8c8185613e6e565b9350613e9c81856020860161312a565b80840191505092915050565b5f613eb38284613e78565b915081905092915050565b7f4465616c416772656564000000000000000000000000000000000000000000005f82015250565b5f613ef2600a83613df6565b9150613efd82613ebe565b602082019050919050565b5f6020820190508181035f830152613f1f81613ee6565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f47565b613f8c8683613f47565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613fc7613fc2613fbd846133f2565b613fa4565b6133f2565b9050919050565b5f819050919050565b613fe083613fad565b613ff4613fec82613fce565b848454613f53565b825550505050565b5f90565b614008613ffc565b614013818484613fd7565b505050565b5b818110156140365761402b5f82614000565b600181019050614019565b5050565b601f82111561407b5761404c81613f26565b61405584613f38565b81016020851015614064578190505b61407861407085613f38565b830182614018565b50505b505050565b5f82821c905092915050565b5f61409b5f1984600802614080565b1980831691505092915050565b5f6140b3838361408c565b9150826002028217905092915050565b6140cc82613110565b67ffffffffffffffff8111156140e5576140e4613254565b5b6140ef8254613dc6565b6140fa82828561403a565b5f60209050601f83116001811461412b575f8415614119578287015190505b61412385826140a8565b86555061418a565b601f19841661413986613f26565b5f5b828110156141605784890151825560018201915060208501945060208101905061413b565b8683101561417d5784890151614179601f89168261408c565b8355505b6001600288020188555050505b505050505050565b7f4465616c20646f6573206e6f74206578697374000000000000000000000000005f82015250565b5f6141c6601383613df6565b91506141d182614192565b602082019050919050565b5f6020820190508181035f8301526141f3816141ba565b9050919050565b7f4a432068617320616c72656164792061677265656400000000000000000000005f82015250565b5f61422e601583613df6565b9150614239826141fa565b602082019050919050565b5f6020820190508181035f83015261425b81614222565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614299826133f2565b91506142a4836133f2565b92508282026142b2816133f2565b915082820484148315176142c9576142c8614262565b5b5092915050565b7f4465616c4e65676f74696174696e6700000000000000000000000000000000005f82015250565b5f614304600f83613df6565b915061430f826142d0565b602082019050919050565b5f6020820190508181035f830152614331816142f8565b9050919050565b7f526573756c7473436865636b65640000000000000000000000000000000000005f82015250565b5f61436c600e83613df6565b915061437782614338565b602082019050919050565b5f6020820190508181035f83015261439981614360565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6143fa602e83613df6565b9150614405826143a0565b604082019050919050565b5f6020820190508181035f830152614427816143ee565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f61445d6144586144538461442e565b613fa4565b614437565b9050919050565b61446d81614443565b82525050565b5f6020820190506144865f830184614464565b92915050565b7f52502068617320616c72656164792061677265656400000000000000000000005f82015250565b5f6144c0601583613df6565b91506144cb8261448c565b602082019050919050565b5f6020820190508181035f8301526144ed816144b4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61454e602683613df6565b9150614559826144f4565b604082019050919050565b5f6020820190508181035f83015261457b81614542565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f6145dc603583613df6565b91506145e782614582565b604082019050919050565b5f6020820190508181035f830152614609816145d0565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f61466a603983613df6565b915061467582614610565b604082019050919050565b5f6020820190508181035f8301526146978161465e565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f6146f8603b83613df6565b91506147038261469e565b604082019050919050565b5f6020820190508181035f830152614725816146ec565b9050919050565b5f61473682613110565b6147408185613df6565b935061475081856020860161312a565b61475981613152565b840191505092915050565b61476d816135cd565b82525050565b5f6040820190508181035f83015261478b818561472c565b905061479a6020830184614764565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147d5602083613df6565b91506147e0826147a1565b602082019050919050565b5f6020820190508181035f830152614802816147c9565b9050919050565b7f5250206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f61483d600a83613df6565b915061484882614809565b602082019050919050565b5f6020820190508181035f83015261486a81614831565b9050919050565b7f4a43206d697373696e67000000000000000000000000000000000000000000005f82015250565b5f6148a5600a83613df6565b91506148b082614871565b602082019050919050565b5f6020820190508181035f8301526148d281614899565b9050919050565b7f536f6c766572206d697373696e670000000000000000000000000000000000005f82015250565b5f61490d600e83613df6565b9150614918826148d9565b602082019050919050565b5f6020820190508181035f83015261493a81614901565b9050919050565b7f4d65646961746f7273203c3d20300000000000000000000000000000000000005f82015250565b5f614975600e83613df6565b915061498082614941565b602082019050919050565b5f6020820190508181035f8301526149a281614969565b9050919050565b7f5250202f204a432073616d6500000000000000000000000000000000000000005f82015250565b5f6149dd600c83613df6565b91506149e8826149a9565b602082019050919050565b5f6020820190508181035f830152614a0a816149d1565b9050919050565b7f4167726565206465706f736974206d75737420626520300000000000000000005f82015250565b5f614a45601783613df6565b9150614a5082614a11565b602082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f4d656469617465206465706f736974206d7573742062652030000000000000005f82015250565b5f614aad601983613df6565b9150614ab882614a79565b602082019050919050565b5f6020820190508181035f830152614ada81614aa1565b9050919050565b7f52500000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b15600283613df6565b9150614b2082614ae1565b602082019050919050565b5f6020820190508181035f830152614b4281614b09565b9050919050565b7f4a430000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b7d600283613df6565b9150614b8882614b49565b602082019050919050565b5f6020820190508181035f830152614baa81614b71565b9050919050565b7f536f6c76657200000000000000000000000000000000000000000000000000005f82015250565b5f614be5600683613df6565b9150614bf082614bb1565b602082019050919050565b5f6020820190508181035f830152614c1281614bd9565b9050919050565b7f4d65646961746f727300000000000000000000000000000000000000000000005f82015250565b5f614c4d600983613df6565b9150614c5882614c19565b602082019050919050565b5f6020820190508181035f830152614c7a81614c41565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4d65646961746f720000000000000000000000000000000000000000000000005f82015250565b5f614ce2600883613df6565b9150614ced82614cae565b602082019050919050565b5f6020820190508181035f830152614d0f81614cd6565b9050919050565b5f614d20826133f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d5257614d51614262565b5b600182019050919050565b7f50726963650000000000000000000000000000000000000000000000000000005f82015250565b5f614d91600583613df6565b9150614d9c82614d5d565b602082019050919050565b5f6020820190508181035f830152614dbe81614d85565b9050919050565b7f5061796d656e74000000000000000000000000000000000000000000000000005f82015250565b5f614df9600783613df6565b9150614e0482614dc5565b602082019050919050565b5f6020820190508181035f830152614e2681614ded565b9050919050565b7f526573756c7473000000000000000000000000000000000000000000000000005f82015250565b5f614e61600783613df6565b9150614e6c82614e2d565b602082019050919050565b5f6020820190508181035f830152614e8e81614e55565b9050919050565b7f4d6564696174696f6e00000000000000000000000000000000000000000000005f82015250565b5f614ec9600983613df6565b9150614ed482614e95565b602082019050919050565b5f6020820190508181035f830152614ef681614ebd565b9050919050565b7f54696d656f7574000000000000000000000000000000000000000000000000005f82015250565b5f614f31600783613df6565b9150614f3c82614efd565b602082019050919050565b5f6020820190508181035f830152614f5e81614f25565b9050919050565b7f436f6c6c61746572616c000000000000000000000000000000000000000000005f82015250565b5f614f99600a83613df6565b9150614fa482614f65565b602082019050919050565b5f6020820190508181035f830152614fc681614f8d565b905091905056fea2646970667358221220b85216dfd5e2f27ee71c0e2a49a6b80d6ee0e4d9d689bca5626ba67ab837a77964736f6c63430008150033", } // StorageABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/bindings/token/token.go b/pkg/web3/bindings/token/token.go index 47b5c0b4..480952e5 100644 --- a/pkg/web3/bindings/token/token.go +++ b/pkg/web3/bindings/token/token.go @@ -32,7 +32,7 @@ var ( // TokenMetaData contains all meta data concerning the Token contract. var TokenMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"escrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"payEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"payJob\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"refundEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slashedAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"slashEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055503480156200002a575f80fd5b5060405162002a0038038062002a008339818101604052810190620000509190620004a8565b82826200007262000066620000b360201b60201c565b620000ba60201b60201c565b81600590816200008391906200076d565b5080600690816200009591906200076d565b505050620000aa33826200017b60201b60201c565b50505062000962565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e390620008af565b60405180910390fd5b620001ff5f8383620002e160201b60201c565b8060045f828254620002129190620008fc565b925050819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002c2919062000947565b60405180910390a3620002dd5f8383620002e660201b60201c565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200034c8262000304565b810181811067ffffffffffffffff821117156200036e576200036d62000314565b5b80604052505050565b5f62000382620002eb565b905062000390828262000341565b919050565b5f67ffffffffffffffff821115620003b257620003b162000314565b5b620003bd8262000304565b9050602081019050919050565b5f5b83811015620003e9578082015181840152602081019050620003cc565b5f8484015250505050565b5f6200040a620004048462000395565b62000377565b90508281526020810184848401111562000429576200042862000300565b5b62000436848285620003ca565b509392505050565b5f82601f830112620004555762000454620002fc565b5b815162000467848260208601620003f4565b91505092915050565b5f819050919050565b620004848162000470565b81146200048f575f80fd5b50565b5f81519050620004a28162000479565b92915050565b5f805f60608486031215620004c257620004c1620002f4565b5b5f84015167ffffffffffffffff811115620004e257620004e1620002f8565b5b620004f0868287016200043e565b935050602084015167ffffffffffffffff811115620005145762000513620002f8565b5b62000522868287016200043e565b9250506040620005358682870162000492565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200058e57607f821691505b602082108103620005a457620005a362000549565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005cb565b620006148683620005cb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620006556200064f620006498462000470565b6200062c565b62000470565b9050919050565b5f819050919050565b620006708362000635565b620006886200067f826200065c565b848454620005d7565b825550505050565b5f90565b6200069e62000690565b620006ab81848462000665565b505050565b5b81811015620006d257620006c65f8262000694565b600181019050620006b1565b5050565b601f8211156200072157620006eb81620005aa565b620006f684620005bc565b8101602085101562000706578190505b6200071e6200071585620005bc565b830182620006b0565b50505b505050565b5f82821c905092915050565b5f620007435f198460080262000726565b1980831691505092915050565b5f6200075d838362000732565b9150826002028217905092915050565b62000778826200053f565b67ffffffffffffffff81111562000794576200079362000314565b5b620007a0825462000576565b620007ad828285620006d6565b5f60209050601f831160018114620007e3575f8415620007ce578287015190505b620007da858262000750565b86555062000849565b601f198416620007f386620005aa565b5f5b828110156200081c57848901518255600182019150602085019450602081019050620007f5565b868310156200083c578489015162000838601f89168262000732565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000897601f8362000851565b9150620008a48262000861565b602082019050919050565b5f6020820190508181035f830152620008c88162000889565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620009088262000470565b9150620009158362000470565b925082820190508082111562000930576200092f620008cf565b5b92915050565b620009418162000470565b82525050565b5f6020820190506200095c5f83018462000936565b92915050565b61209080620009705f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806388c2bdfe116100b6578063a47029581161007a578063a4702958146103c4578063a9059cbb146103ce578063c57380a2146103fe578063dd62ed3e1461041c578063f2fde38b1461044c578063f3d3d4481461046857610140565b806388c2bdfe146102f85780638da5cb5b1461032857806395d89b4114610346578063987bf9a714610364578063a457c2d71461039457610140565b8063313ce56711610108578063313ce56714610210578063395093511461022e5780635407e93c1461025e578063599efa6b1461028e57806370a08231146102be578063715018a6146102ee57610140565b8063065e86c81461014457806306fdde0314610174578063095ea7b31461019257806318160ddd146101c257806323b872dd146101e0575b5f80fd5b61015e6004803603810190610159919061156f565b610484565b60405161016b91906115d9565b60405180910390f35b61017c610577565b604051610189919061167c565b60405180910390f35b6101ac60048036038101906101a7919061169c565b610607565b6040516101b991906115d9565b60405180910390f35b6101ca610629565b6040516101d791906116e9565b60405180910390f35b6101fa60048036038101906101f5919061156f565b610632565b60405161020791906115d9565b60405180910390f35b610218610660565b604051610225919061171d565b60405180910390f35b6102486004803603810190610243919061169c565b610668565b60405161025591906115d9565b60405180910390f35b61027860048036038101906102739190611736565b61069e565b60405161028591906115d9565b60405180910390f35b6102a860048036038101906102a3919061169c565b610706565b6040516102b591906115d9565b60405180910390f35b6102d860048036038101906102d39190611761565b610866565b6040516102e591906116e9565b60405180910390f35b6102f66108ac565b005b610312600480360381019061030d919061169c565b6108bf565b60405161031f91906115d9565b60405180910390f35b6103306109b8565b60405161033d919061179b565b60405180910390f35b61034e6109df565b60405161035b919061167c565b60405180910390f35b61037e60048036038101906103799190611761565b610a6f565b60405161038b91906116e9565b60405180910390f35b6103ae60048036038101906103a9919061169c565b610ab5565b6040516103bb91906115d9565b60405180910390f35b6103cc610b2a565b005b6103e860048036038101906103e3919061169c565b610b4e565b6040516103f591906115d9565b60405180910390f35b610406610b70565b604051610413919061179b565b60405180910390f35b610436600480360381019061043191906117b4565b610b98565b60405161044391906116e9565b60405180910390f35b61046660048036038101906104619190611761565b610c1a565b005b610482600480360381019061047d9190611761565b610c9c565b005b5f61048d610da4565b508160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050590611862565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055a91906118ad565b9250508190555061056c308484610ed1565b600190509392505050565b6060600580546105869061190d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b29061190d565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b5050505050905090565b5f80610611611140565b905061061e818585611147565b600191505092915050565b5f600454905090565b5f8061063c611140565b905061064985828561130a565b610654858585610ed1565b60019150509392505050565b5f6012905090565b5f80610672611140565b90506106938185856106848589610b98565b61068e919061193d565b611147565b600191505092915050565b5f6106aa323084610ed1565b8160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106f6919061193d565b9250508190555060019050919050565b5f61070f610da4565b505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906119e0565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156107fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f590611862565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461084a91906118ad565b9250508190555061085c308484610ed1565b6001905092915050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108b4611395565b6108bd5f611413565b565b5f6108c8610da4565b508160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611862565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461099591906118ad565b925050819055506109ae306109a86109b8565b84610ed1565b6001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546109ee9061190d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a9061190d565b8015610a655780601f10610a3c57610100808354040283529160200191610a65565b820191905f5260205f20905b815481529060010190602001808311610a4857829003601f168201915b5050505050905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80610abf611140565b90505f610acc8286610b98565b905083811015610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890611a6e565b60405180910390fd5b610b1e8286868403611147565b60019250505092915050565b610b32611395565b5f600160146101000a81548160ff021916908315150217905550565b5f80610b58611140565b9050610b65818585610ed1565b600191505092915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610c22611395565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611afc565b60405180910390fd5b610c9981611413565b50565b610ca4611395565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990611b8a565b60405180910390fd5b600160149054906101000a900460ff16610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5890611c18565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611b8a565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e74611140565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190611ca6565b60405180910390fd5b6001905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690611d34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490611dc2565b60405180910390fd5b610fb88383836114d4565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390611e50565b60405180910390fd5b81810360025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161112791906116e9565b60405180910390a361113a8484846114d9565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90611ede565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90611f6c565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112fd91906116e9565b60405180910390a3505050565b5f6113158484610b98565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461138f5781811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890611fd4565b60405180910390fd5b61138e8484848403611147565b5b50505050565b61139d611140565b73ffffffffffffffffffffffffffffffffffffffff166113bb6109b8565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061203c565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61150b826114e2565b9050919050565b61151b81611501565b8114611525575f80fd5b50565b5f8135905061153681611512565b92915050565b5f819050919050565b61154e8161153c565b8114611558575f80fd5b50565b5f8135905061156981611545565b92915050565b5f805f60608486031215611586576115856114de565b5b5f61159386828701611528565b93505060206115a486828701611528565b92505060406115b58682870161155b565b9150509250925092565b5f8115159050919050565b6115d3816115bf565b82525050565b5f6020820190506115ec5f8301846115ca565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561162957808201518184015260208101905061160e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61164e826115f2565b61165881856115fc565b935061166881856020860161160c565b61167181611634565b840191505092915050565b5f6020820190508181035f8301526116948184611644565b905092915050565b5f80604083850312156116b2576116b16114de565b5b5f6116bf85828601611528565b92505060206116d08582860161155b565b9150509250929050565b6116e38161153c565b82525050565b5f6020820190506116fc5f8301846116da565b92915050565b5f60ff82169050919050565b61171781611702565b82525050565b5f6020820190506117305f83018461170e565b92915050565b5f6020828403121561174b5761174a6114de565b5b5f6117588482850161155b565b91505092915050565b5f60208284031215611776576117756114de565b5b5f61178384828501611528565b91505092915050565b61179581611501565b82525050565b5f6020820190506117ae5f83018461178c565b92915050565b5f80604083850312156117ca576117c96114de565b5b5f6117d785828601611528565b92505060206117e885828601611528565b9150509250929050565b7f4c696c79706164546f6b656e3a206e6f7420656e6f7567682066756e647320695f8201527f6e20657363726f77000000000000000000000000000000000000000000000000602082015250565b5f61184c6028836115fc565b9150611857826117f2565b604082019050919050565b5f6020820190508181035f83015261187981611840565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118b78261153c565b91506118c28361153c565b92508282039050818111156118da576118d9611880565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061192457607f821691505b602082108103611937576119366118e0565b5b50919050565b5f6119478261153c565b91506119528361153c565b925082820190508082111561196a57611969611880565b5b92915050565b7f4c696c79706164546f6b656e3a20746f416464726573732063616e6e6f7420625f8201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b5f6119ca602e836115fc565b91506119d582611970565b604082019050919050565b5f6020820190508181035f8301526119f7816119be565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611a586025836115fc565b9150611a63826119fe565b604082019050919050565b5f6020820190508181035f830152611a8581611a4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611ae66026836115fc565b9150611af182611a8c565b604082019050919050565b5f6020820190508181035f830152611b1381611ada565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611b746035836115fc565b9150611b7f82611b1a565b604082019050919050565b5f6020820190508181035f830152611ba181611b68565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611c026039836115fc565b9150611c0d82611ba8565b604082019050919050565b5f6020820190508181035f830152611c2f81611bf6565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611c90603b836115fc565b9150611c9b82611c36565b604082019050919050565b5f6020820190508181035f830152611cbd81611c84565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611d1e6025836115fc565b9150611d2982611cc4565b604082019050919050565b5f6020820190508181035f830152611d4b81611d12565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611dac6023836115fc565b9150611db782611d52565b604082019050919050565b5f6020820190508181035f830152611dd981611da0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611e3a6026836115fc565b9150611e4582611de0565b604082019050919050565b5f6020820190508181035f830152611e6781611e2e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611ec86024836115fc565b9150611ed382611e6e565b604082019050919050565b5f6020820190508181035f830152611ef581611ebc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f566022836115fc565b9150611f6182611efc565b604082019050919050565b5f6020820190508181035f830152611f8381611f4a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611fbe601d836115fc565b9150611fc982611f8a565b602082019050919050565b5f6020820190508181035f830152611feb81611fb2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6120266020836115fc565b915061203182611ff2565b602082019050919050565b5f6020820190508181035f8301526120538161201a565b905091905056fea2646970667358221220745731f5d3ff8ec6d43a885cc63ce6c9fccc7680b8949610c14c83cc4681c03064736f6c63430008150033", + Bin: "0x608060405260018060146101000a81548160ff0219169083151502179055503480156200002a575f80fd5b5060405162002a0038038062002a008339818101604052810190620000509190620004a8565b82826200007262000066620000b360201b60201c565b620000ba60201b60201c565b81600590816200008391906200076d565b5080600690816200009591906200076d565b505050620000aa33826200017b60201b60201c565b50505062000962565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e390620008af565b60405180910390fd5b620001ff5f8383620002e160201b60201c565b8060045f828254620002129190620008fc565b925050819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002c2919062000947565b60405180910390a3620002dd5f8383620002e660201b60201c565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200034c8262000304565b810181811067ffffffffffffffff821117156200036e576200036d62000314565b5b80604052505050565b5f62000382620002eb565b905062000390828262000341565b919050565b5f67ffffffffffffffff821115620003b257620003b162000314565b5b620003bd8262000304565b9050602081019050919050565b5f5b83811015620003e9578082015181840152602081019050620003cc565b5f8484015250505050565b5f6200040a620004048462000395565b62000377565b90508281526020810184848401111562000429576200042862000300565b5b62000436848285620003ca565b509392505050565b5f82601f830112620004555762000454620002fc565b5b815162000467848260208601620003f4565b91505092915050565b5f819050919050565b620004848162000470565b81146200048f575f80fd5b50565b5f81519050620004a28162000479565b92915050565b5f805f60608486031215620004c257620004c1620002f4565b5b5f84015167ffffffffffffffff811115620004e257620004e1620002f8565b5b620004f0868287016200043e565b935050602084015167ffffffffffffffff811115620005145762000513620002f8565b5b62000522868287016200043e565b9250506040620005358682870162000492565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200058e57607f821691505b602082108103620005a457620005a362000549565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005cb565b620006148683620005cb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620006556200064f620006498462000470565b6200062c565b62000470565b9050919050565b5f819050919050565b620006708362000635565b620006886200067f826200065c565b848454620005d7565b825550505050565b5f90565b6200069e62000690565b620006ab81848462000665565b505050565b5b81811015620006d257620006c65f8262000694565b600181019050620006b1565b5050565b601f8211156200072157620006eb81620005aa565b620006f684620005bc565b8101602085101562000706578190505b6200071e6200071585620005bc565b830182620006b0565b50505b505050565b5f82821c905092915050565b5f620007435f198460080262000726565b1980831691505092915050565b5f6200075d838362000732565b9150826002028217905092915050565b62000778826200053f565b67ffffffffffffffff81111562000794576200079362000314565b5b620007a0825462000576565b620007ad828285620006d6565b5f60209050601f831160018114620007e3575f8415620007ce578287015190505b620007da858262000750565b86555062000849565b601f198416620007f386620005aa565b5f5b828110156200081c57848901518255600182019150602085019450602081019050620007f5565b868310156200083c578489015162000838601f89168262000732565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000897601f8362000851565b9150620008a48262000861565b602082019050919050565b5f6020820190508181035f830152620008c88162000889565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620009088262000470565b9150620009158362000470565b925082820190508082111562000930576200092f620008cf565b5b92915050565b620009418162000470565b82525050565b5f6020820190506200095c5f83018462000936565b92915050565b61209080620009705f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806388c2bdfe116100b6578063a47029581161007a578063a4702958146103c4578063a9059cbb146103ce578063c57380a2146103fe578063dd62ed3e1461041c578063f2fde38b1461044c578063f3d3d4481461046857610140565b806388c2bdfe146102f85780638da5cb5b1461032857806395d89b4114610346578063987bf9a714610364578063a457c2d71461039457610140565b8063313ce56711610108578063313ce56714610210578063395093511461022e5780635407e93c1461025e578063599efa6b1461028e57806370a08231146102be578063715018a6146102ee57610140565b8063065e86c81461014457806306fdde0314610174578063095ea7b31461019257806318160ddd146101c257806323b872dd146101e0575b5f80fd5b61015e6004803603810190610159919061156f565b610484565b60405161016b91906115d9565b60405180910390f35b61017c610577565b604051610189919061167c565b60405180910390f35b6101ac60048036038101906101a7919061169c565b610607565b6040516101b991906115d9565b60405180910390f35b6101ca610629565b6040516101d791906116e9565b60405180910390f35b6101fa60048036038101906101f5919061156f565b610632565b60405161020791906115d9565b60405180910390f35b610218610660565b604051610225919061171d565b60405180910390f35b6102486004803603810190610243919061169c565b610668565b60405161025591906115d9565b60405180910390f35b61027860048036038101906102739190611736565b61069e565b60405161028591906115d9565b60405180910390f35b6102a860048036038101906102a3919061169c565b610706565b6040516102b591906115d9565b60405180910390f35b6102d860048036038101906102d39190611761565b610866565b6040516102e591906116e9565b60405180910390f35b6102f66108ac565b005b610312600480360381019061030d919061169c565b6108bf565b60405161031f91906115d9565b60405180910390f35b6103306109b8565b60405161033d919061179b565b60405180910390f35b61034e6109df565b60405161035b919061167c565b60405180910390f35b61037e60048036038101906103799190611761565b610a6f565b60405161038b91906116e9565b60405180910390f35b6103ae60048036038101906103a9919061169c565b610ab5565b6040516103bb91906115d9565b60405180910390f35b6103cc610b2a565b005b6103e860048036038101906103e3919061169c565b610b4e565b6040516103f591906115d9565b60405180910390f35b610406610b70565b604051610413919061179b565b60405180910390f35b610436600480360381019061043191906117b4565b610b98565b60405161044391906116e9565b60405180910390f35b61046660048036038101906104619190611761565b610c1a565b005b610482600480360381019061047d9190611761565b610c9c565b005b5f61048d610da4565b508160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561050e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050590611862565b60405180910390fd5b8160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055a91906118ad565b9250508190555061056c308484610ed1565b600190509392505050565b6060600580546105869061190d565b80601f01602080910402602001604051908101604052809291908181526020018280546105b29061190d565b80156105fd5780601f106105d4576101008083540402835291602001916105fd565b820191905f5260205f20905b8154815290600101906020018083116105e057829003601f168201915b5050505050905090565b5f80610611611140565b905061061e818585611147565b600191505092915050565b5f600454905090565b5f8061063c611140565b905061064985828561130a565b610654858585610ed1565b60019150509392505050565b5f6012905090565b5f80610672611140565b90506106938185856106848589610b98565b61068e919061193d565b611147565b600191505092915050565b5f6106aa323084610ed1565b8160075f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106f6919061193d565b9250508190555060019050919050565b5f61070f610da4565b505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610775906119e0565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156107fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f590611862565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461084a91906118ad565b9250508190555061085c308484610ed1565b6001905092915050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108b4611395565b6108bd5f611413565b565b5f6108c8610da4565b508160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611862565b60405180910390fd5b8160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461099591906118ad565b925050819055506109ae306109a86109b8565b84610ed1565b6001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546109ee9061190d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a9061190d565b8015610a655780601f10610a3c57610100808354040283529160200191610a65565b820191905f5260205f20905b815481529060010190602001808311610a4857829003601f168201915b5050505050905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80610abf611140565b90505f610acc8286610b98565b905083811015610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890611a6e565b60405180910390fd5b610b1e8286868403611147565b60019250505092915050565b610b32611395565b5f600160146101000a81548160ff021916908315150217905550565b5f80610b58611140565b9050610b65818585610ed1565b600191505092915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610c22611395565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611afc565b60405180910390fd5b610c9981611413565b50565b610ca4611395565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990611b8a565b60405180910390fd5b600160149054906101000a900460ff16610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5890611c18565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611b8a565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e74611140565b73ffffffffffffffffffffffffffffffffffffffff1614610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190611ca6565b60405180910390fd5b6001905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3690611d34565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490611dc2565b60405180910390fd5b610fb88383836114d4565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103390611e50565b60405180910390fd5b81810360025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161112791906116e9565b60405180910390a361113a8484846114d9565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac90611ede565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90611f6c565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112fd91906116e9565b60405180910390a3505050565b5f6113158484610b98565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461138f5781811015611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890611fd4565b60405180910390fd5b61138e8484848403611147565b5b50505050565b61139d611140565b73ffffffffffffffffffffffffffffffffffffffff166113bb6109b8565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061203c565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61150b826114e2565b9050919050565b61151b81611501565b8114611525575f80fd5b50565b5f8135905061153681611512565b92915050565b5f819050919050565b61154e8161153c565b8114611558575f80fd5b50565b5f8135905061156981611545565b92915050565b5f805f60608486031215611586576115856114de565b5b5f61159386828701611528565b93505060206115a486828701611528565b92505060406115b58682870161155b565b9150509250925092565b5f8115159050919050565b6115d3816115bf565b82525050565b5f6020820190506115ec5f8301846115ca565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561162957808201518184015260208101905061160e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61164e826115f2565b61165881856115fc565b935061166881856020860161160c565b61167181611634565b840191505092915050565b5f6020820190508181035f8301526116948184611644565b905092915050565b5f80604083850312156116b2576116b16114de565b5b5f6116bf85828601611528565b92505060206116d08582860161155b565b9150509250929050565b6116e38161153c565b82525050565b5f6020820190506116fc5f8301846116da565b92915050565b5f60ff82169050919050565b61171781611702565b82525050565b5f6020820190506117305f83018461170e565b92915050565b5f6020828403121561174b5761174a6114de565b5b5f6117588482850161155b565b91505092915050565b5f60208284031215611776576117756114de565b5b5f61178384828501611528565b91505092915050565b61179581611501565b82525050565b5f6020820190506117ae5f83018461178c565b92915050565b5f80604083850312156117ca576117c96114de565b5b5f6117d785828601611528565b92505060206117e885828601611528565b9150509250929050565b7f4c696c79706164546f6b656e3a206e6f7420656e6f7567682066756e647320695f8201527f6e20657363726f77000000000000000000000000000000000000000000000000602082015250565b5f61184c6028836115fc565b9150611857826117f2565b604082019050919050565b5f6020820190508181035f83015261187981611840565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118b78261153c565b91506118c28361153c565b92508282039050818111156118da576118d9611880565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061192457607f821691505b602082108103611937576119366118e0565b5b50919050565b5f6119478261153c565b91506119528361153c565b925082820190508082111561196a57611969611880565b5b92915050565b7f4c696c79706164546f6b656e3a20746f416464726573732063616e6e6f7420625f8201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b5f6119ca602e836115fc565b91506119d582611970565b604082019050919050565b5f6020820190508181035f8301526119f7816119be565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611a586025836115fc565b9150611a63826119fe565b604082019050919050565b5f6020820190508181035f830152611a8581611a4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611ae66026836115fc565b9150611af182611a8c565b604082019050919050565b5f6020820190508181035f830152611b1381611ada565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611b746035836115fc565b9150611b7f82611b1a565b604082019050919050565b5f6020820190508181035f830152611ba181611b68565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611c026039836115fc565b9150611c0d82611ba8565b604082019050919050565b5f6020820190508181035f830152611c2f81611bf6565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611c90603b836115fc565b9150611c9b82611c36565b604082019050919050565b5f6020820190508181035f830152611cbd81611c84565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611d1e6025836115fc565b9150611d2982611cc4565b604082019050919050565b5f6020820190508181035f830152611d4b81611d12565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611dac6023836115fc565b9150611db782611d52565b604082019050919050565b5f6020820190508181035f830152611dd981611da0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611e3a6026836115fc565b9150611e4582611de0565b604082019050919050565b5f6020820190508181035f830152611e6781611e2e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611ec86024836115fc565b9150611ed382611e6e565b604082019050919050565b5f6020820190508181035f830152611ef581611ebc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611f566022836115fc565b9150611f6182611efc565b604082019050919050565b5f6020820190508181035f830152611f8381611f4a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611fbe601d836115fc565b9150611fc982611f8a565b602082019050919050565b5f6020820190508181035f830152611feb81611fb2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6120266020836115fc565b915061203182611ff2565b602082019050919050565b5f6020820190508181035f8301526120538161201a565b905091905056fea264697066735822122030495cfd6581bec5818670cdcd147e9cad8885e8a153b6e0fd874e64af2e92d064736f6c63430008150033", } // TokenABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/bindings/users/users.go b/pkg/web3/bindings/users/users.go index ce61f647..7b865e4e 100644 --- a/pkg/web3/bindings/users/users.go +++ b/pkg/web3/bindings/users/users.go @@ -40,7 +40,7 @@ type SharedStructsUser struct { // UsersMetaData contains all meta data concerning the Users contract. var UsersMetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"addUserToList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"getUser\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"internalType\":\"structSharedStructs.User\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"removeUserFromList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSharedStructs.ServiceType\",\"name\":\"serviceType\",\"type\":\"uint8\"}],\"name\":\"showUsersInList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"name\":\"updateUser\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataCID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"enumSharedStructs.ServiceType[]\",\"name\":\"roles\",\"type\":\"uint8[]\"}],\"internalType\":\"structSharedStructs.User\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5061002c61002161003160201b60201c565b61003860201b60201c565b6100f9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612002806101065f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063a15dcc8a11610064578063a15dcc8a146100f7578063a7f96f0614610127578063aeb5ec0114610143578063ebbbca271461015f578063f2fde38b1461018f57610091565b80636f77926b14610095578063715018a6146100c55780638129fc1c146100cf5780638da5cb5b146100d9575b5f80fd5b6100af60048036038101906100aa91906111cf565b6101ab565b6040516100bc919061141c565b60405180910390f35b6100cd6103ff565b005b6100d7610412565b005b6100e1610547565b6040516100ee919061144b565b60405180910390f35b610111600480360381019061010c9190611487565b61056e565b60405161011e919061155a565b60405180910390f35b610141600480360381019061013c9190611487565b61062e565b005b61015d60048036038101906101589190611487565b610932565b005b6101796004803603810190610174919061176a565b610b2d565b604051610186919061141c565b60405180910390f35b6101a960048036038101906101a491906111cf565b610c48565b005b6101b361105b565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461025f9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461028b9061183b565b80156102d65780601f106102ad576101008083540402835291602001916102d6565b820191905f5260205f20905b8154815290600101906020018083116102b957829003601f168201915b505050505081526020016002820180546102ef9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461031b9061183b565b80156103665780601f1061033d57610100808354040283529160200191610366565b820191905f5260205f20905b81548152906001019060200180831161034957829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156103ef57602002820191905f5260205f20905f905b82829054906101000a900460ff1660038111156103ca576103c96112bc565b5b815260200190600101906020825f010492830192600103820291508084116103aa5790505b5050505050815250509050919050565b610407610cca565b6104105f610d48565b565b5f8060159054906101000a900460ff16159050808015610443575060015f60149054906101000a900460ff1660ff16105b80610471575061045230610e09565b158015610470575060015f60149054906101000a900460ff1660ff16145b5b6104b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a7906118eb565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156104ec5760015f60156101000a81548160ff0219169083151502179055505b8015610544575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161053b9190611957565b60405180910390a15b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060025f836003811115610586576105856112bc565b5b6003811115610598576105976112bc565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561062257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105d9575b50505050509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906119ba565b60405180910390fd5b5f806107068332610e2b565b915091508061074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a22565b60405180910390fd5b5f8290505b600160025f866003811115610767576107666112bc565b5b6003811115610779576107786112bc565b5b81526020019081526020015f20805490506107949190611a76565b8110156108b55760025f8560038111156107b1576107b06112bc565b5b60038111156107c3576107c26112bc565b5b81526020019081526020015f206001826107dd9190611aa9565b815481106107ee576107ed611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f86600381111561082c5761082b6112bc565b5b600381111561083e5761083d6112bc565b5b81526020019081526020015f20828154811061085d5761085c611adc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806108ad90611b09565b91505061074f565b5060025f8460038111156108cc576108cb6112bc565b5b60038111156108de576108dd6112bc565b5b81526020019081526020015f208054806108fb576108fa611b50565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906119ba565b60405180910390fd5b5f610a098232610e2b565b9150508015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611bed565b60405180910390fd5b610a578232610f41565b610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90611c55565b60405180910390fd5b60025f836003811115610aac57610aab6112bc565b5b6003811115610abe57610abd6112bc565b5b81526020019081526020015f2032908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b3561105b565b5f60405180608001604052803273ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481525090508060015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610c069190611e07565b506040820151816002019081610c1c9190611e07565b506060820151816003019080519060200190610c39929190611098565b50905050809150509392505050565b610c50610cca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590611f46565b60405180910390fd5b610cc781610d48565b50565b610cd2611054565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610547565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90611fae565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f805f805f5b60025f886003811115610e4757610e466112bc565b5b6003811115610e5957610e586112bc565b5b81526020019081526020015f2080549050811015610f31578573ffffffffffffffffffffffffffffffffffffffff1660025f896003811115610e9e57610e9d6112bc565b5b6003811115610eb057610eaf6112bc565b5b81526020019081526020015f208281548110610ecf57610ece611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f1e5780925060019150610f31565b8080610f2990611b09565b915050610e31565b5081819350935050509250929050565b5f805f90505f5b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018054905081101561104957846003811115610fa657610fa56112bc565b5b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018281548110610ff857610ff7611adc565b5b905f5260205f2090602091828204019190069054906101000a900460ff166003811115611028576110276112bc565b5b036110365760019150611049565b808061104190611b09565b915050610f48565b508091505092915050565b5f33905090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b828054828255905f5260205f2090601f01602090048101928215611138579160200282015f5b8382111561110a57835183826101000a81548160ff021916908360038111156110ea576110e96112bc565b5b021790555092602001926001016020815f010492830192600103026110be565b80156111365782816101000a81549060ff02191690556001016020815f0104928301926001030261110a565b505b5090506111459190611149565b5090565b5b80821115611160575f815f90555060010161114a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61119e82611175565b9050919050565b6111ae81611194565b81146111b8575f80fd5b50565b5f813590506111c9816111a5565b92915050565b5f602082840312156111e4576111e361116d565b5b5f6111f1848285016111bb565b91505092915050565b61120381611194565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611240578082015181840152602081019050611225565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126582611209565b61126f8185611213565b935061127f818560208601611223565b6112888161124b565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106112fa576112f96112bc565b5b50565b5f81905061130a826112e9565b919050565b5f611319826112fd565b9050919050565b6113298161130f565b82525050565b5f61133a8383611320565b60208301905092915050565b5f602082019050919050565b5f61135c82611293565b611366818561129d565b9350611371836112ad565b805f5b838110156113a1578151611388888261132f565b975061139383611346565b925050600181019050611374565b5085935050505092915050565b5f608083015f8301516113c35f8601826111fa565b50602083015184820360208601526113db828261125b565b915050604083015184820360408601526113f5828261125b565b9150506060830151848203606086015261140f8282611352565b9150508091505092915050565b5f6020820190508181035f83015261143481846113ae565b905092915050565b61144581611194565b82525050565b5f60208201905061145e5f83018461143c565b92915050565b60048110611470575f80fd5b50565b5f8135905061148181611464565b92915050565b5f6020828403121561149c5761149b61116d565b5b5f6114a984828501611473565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6114e683836111fa565b60208301905092915050565b5f602082019050919050565b5f611508826114b2565b61151281856114bc565b935061151d836114cc565b805f5b8381101561154d57815161153488826114db565b975061153f836114f2565b925050600181019050611520565b5085935050505092915050565b5f6020820190508181035f83015261157281846114fe565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115b88261124b565b810181811067ffffffffffffffff821117156115d7576115d6611582565b5b80604052505050565b5f6115e9611164565b90506115f582826115af565b919050565b5f67ffffffffffffffff82111561161457611613611582565b5b61161d8261124b565b9050602081019050919050565b828183375f83830152505050565b5f61164a611645846115fa565b6115e0565b9050828152602081018484840111156116665761166561157e565b5b61167184828561162a565b509392505050565b5f82601f83011261168d5761168c61157a565b5b813561169d848260208601611638565b91505092915050565b5f67ffffffffffffffff8211156116c0576116bf611582565b5b602082029050602081019050919050565b5f80fd5b5f6116e76116e2846116a6565b6115e0565b9050808382526020820190506020840283018581111561170a576117096116d1565b5b835b81811015611733578061171f8882611473565b84526020840193505060208101905061170c565b5050509392505050565b5f82601f8301126117515761175061157a565b5b81356117618482602086016116d5565b91505092915050565b5f805f606084860312156117815761178061116d565b5b5f84013567ffffffffffffffff81111561179e5761179d611171565b5b6117aa86828701611679565b935050602084013567ffffffffffffffff8111156117cb576117ca611171565b5b6117d786828701611679565b925050604084013567ffffffffffffffff8111156117f8576117f7611171565b5b6118048682870161173d565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061185257607f821691505b6020821081036118655761186461180e565b5b50919050565b5f82825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6118d5602e8361186b565b91506118e08261187b565b604082019050919050565b5f6020820190508181035f830152611902816118c9565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61194161193c61193784611909565b61191e565b611912565b9050919050565b61195181611927565b82525050565b5f60208201905061196a5f830184611948565b92915050565b7f55736572206d75737420657869737400000000000000000000000000000000005f82015250565b5f6119a4600f8361186b565b91506119af82611970565b602082019050919050565b5f6020820190508181035f8301526119d181611998565b9050919050565b7f55736572206973206e6f742070617274206f662074686174206c6973740000005f82015250565b5f611a0c601d8361186b565b9150611a17826119d8565b602082019050919050565b5f6020820190508181035f830152611a3981611a00565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a8082611a40565b9150611a8b83611a40565b9250828203905081811115611aa357611aa2611a49565b5b92915050565b5f611ab382611a40565b9150611abe83611a40565b9250828201905080821115611ad657611ad5611a49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1382611a40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4557611b44611a49565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5573657220697320616c72656164792070617274206f662074686174206c69735f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611bd760218361186b565b9150611be282611b7d565b604082019050919050565b5f6020820190508181035f830152611c0481611bcb565b9050919050565b7f55736572206d7573742068617665207468617420726f6c6500000000000000005f82015250565b5f611c3f60188361186b565b9150611c4a82611c0b565b602082019050919050565b5f6020820190508181035f830152611c6c81611c33565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c94565b611cd98683611c94565b95508019841693508086168417925050509392505050565b5f611d0b611d06611d0184611a40565b61191e565b611a40565b9050919050565b5f819050919050565b611d2483611cf1565b611d38611d3082611d12565b848454611ca0565b825550505050565b5f90565b611d4c611d40565b611d57818484611d1b565b505050565b5b81811015611d7a57611d6f5f82611d44565b600181019050611d5d565b5050565b601f821115611dbf57611d9081611c73565b611d9984611c85565b81016020851015611da8578190505b611dbc611db485611c85565b830182611d5c565b50505b505050565b5f82821c905092915050565b5f611ddf5f1984600802611dc4565b1980831691505092915050565b5f611df78383611dd0565b9150826002028217905092915050565b611e1082611209565b67ffffffffffffffff811115611e2957611e28611582565b5b611e33825461183b565b611e3e828285611d7e565b5f60209050601f831160018114611e6f575f8415611e5d578287015190505b611e678582611dec565b865550611ece565b601f198416611e7d86611c73565b5f5b82811015611ea457848901518255600182019150602085019450602081019050611e7f565b86831015611ec15784890151611ebd601f891682611dd0565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611f3060268361186b565b9150611f3b82611ed6565b604082019050919050565b5f6020820190508181035f830152611f5d81611f24565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611f9860208361186b565b9150611fa382611f64565b602082019050919050565b5f6020820190508181035f830152611fc581611f8c565b905091905056fea2646970667358221220f031ad70f6ddf83ce96fe42eb907f15084ef1bb1fc8895dfdfe0f8993c4fc44064736f6c63430008150033", + Bin: "0x608060405234801561000f575f80fd5b5061002c61002161003160201b60201c565b61003860201b60201c565b6100f9565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612002806101065f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063a15dcc8a11610064578063a15dcc8a146100f7578063a7f96f0614610127578063aeb5ec0114610143578063ebbbca271461015f578063f2fde38b1461018f57610091565b80636f77926b14610095578063715018a6146100c55780638129fc1c146100cf5780638da5cb5b146100d9575b5f80fd5b6100af60048036038101906100aa91906111cf565b6101ab565b6040516100bc919061141c565b60405180910390f35b6100cd6103ff565b005b6100d7610412565b005b6100e1610547565b6040516100ee919061144b565b60405180910390f35b610111600480360381019061010c9190611487565b61056e565b60405161011e919061155a565b60405180910390f35b610141600480360381019061013c9190611487565b61062e565b005b61015d60048036038101906101589190611487565b610932565b005b6101796004803603810190610174919061176a565b610b2d565b604051610186919061141c565b60405180910390f35b6101a960048036038101906101a491906111cf565b610c48565b005b6101b361105b565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461025f9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461028b9061183b565b80156102d65780601f106102ad576101008083540402835291602001916102d6565b820191905f5260205f20905b8154815290600101906020018083116102b957829003601f168201915b505050505081526020016002820180546102ef9061183b565b80601f016020809104026020016040519081016040528092919081815260200182805461031b9061183b565b80156103665780601f1061033d57610100808354040283529160200191610366565b820191905f5260205f20905b81548152906001019060200180831161034957829003601f168201915b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156103ef57602002820191905f5260205f20905f905b82829054906101000a900460ff1660038111156103ca576103c96112bc565b5b815260200190600101906020825f010492830192600103820291508084116103aa5790505b5050505050815250509050919050565b610407610cca565b6104105f610d48565b565b5f8060159054906101000a900460ff16159050808015610443575060015f60149054906101000a900460ff1660ff16105b80610471575061045230610e09565b158015610470575060015f60149054906101000a900460ff1660ff16145b5b6104b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a7906118eb565b60405180910390fd5b60015f60146101000a81548160ff021916908360ff16021790555080156104ec5760015f60156101000a81548160ff0219169083151502179055505b8015610544575f8060156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161053b9190611957565b60405180910390a15b50565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060025f836003811115610586576105856112bc565b5b6003811115610598576105976112bc565b5b81526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561062257602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105d9575b50505050509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906119ba565b60405180910390fd5b5f806107068332610e2b565b915091508061074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a22565b60405180910390fd5b5f8290505b600160025f866003811115610767576107666112bc565b5b6003811115610779576107786112bc565b5b81526020019081526020015f20805490506107949190611a76565b8110156108b55760025f8560038111156107b1576107b06112bc565b5b60038111156107c3576107c26112bc565b5b81526020019081526020015f206001826107dd9190611aa9565b815481106107ee576107ed611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025f86600381111561082c5761082b6112bc565b5b600381111561083e5761083d6112bc565b5b81526020019081526020015f20828154811061085d5761085c611adc565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806108ad90611b09565b91505061074f565b5060025f8460038111156108cc576108cb6112bc565b5b60038111156108de576108dd6112bc565b5b81526020019081526020015f208054806108fb576108fa611b50565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f5906119ba565b60405180910390fd5b5f610a098232610e2b565b9150508015610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611bed565b60405180910390fd5b610a578232610f41565b610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90611c55565b60405180910390fd5b60025f836003811115610aac57610aab6112bc565b5b6003811115610abe57610abd6112bc565b5b81526020019081526020015f2032908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b3561105b565b5f60405180608001604052803273ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481525090508060015f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610c069190611e07565b506040820151816002019081610c1c9190611e07565b506060820151816003019080519060200190610c39929190611098565b50905050809150509392505050565b610c50610cca565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590611f46565b60405180910390fd5b610cc781610d48565b50565b610cd2611054565b73ffffffffffffffffffffffffffffffffffffffff16610cf0610547565b73ffffffffffffffffffffffffffffffffffffffff1614610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90611fae565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f805f805f5b60025f886003811115610e4757610e466112bc565b5b6003811115610e5957610e586112bc565b5b81526020019081526020015f2080549050811015610f31578573ffffffffffffffffffffffffffffffffffffffff1660025f896003811115610e9e57610e9d6112bc565b5b6003811115610eb057610eaf6112bc565b5b81526020019081526020015f208281548110610ecf57610ece611adc565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f1e5780925060019150610f31565b8080610f2990611b09565b915050610e31565b5081819350935050509250929050565b5f805f90505f5b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018054905081101561104957846003811115610fa657610fa56112bc565b5b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206003018281548110610ff857610ff7611adc565b5b905f5260205f2090602091828204019190069054906101000a900460ff166003811115611028576110276112bc565b5b036110365760019150611049565b808061104190611b09565b915050610f48565b508091505092915050565b5f33905090565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b828054828255905f5260205f2090601f01602090048101928215611138579160200282015f5b8382111561110a57835183826101000a81548160ff021916908360038111156110ea576110e96112bc565b5b021790555092602001926001016020815f010492830192600103026110be565b80156111365782816101000a81549060ff02191690556001016020815f0104928301926001030261110a565b505b5090506111459190611149565b5090565b5b80821115611160575f815f90555060010161114a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61119e82611175565b9050919050565b6111ae81611194565b81146111b8575f80fd5b50565b5f813590506111c9816111a5565b92915050565b5f602082840312156111e4576111e361116d565b5b5f6111f1848285016111bb565b91505092915050565b61120381611194565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611240578082015181840152602081019050611225565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126582611209565b61126f8185611213565b935061127f818560208601611223565b6112888161124b565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600481106112fa576112f96112bc565b5b50565b5f81905061130a826112e9565b919050565b5f611319826112fd565b9050919050565b6113298161130f565b82525050565b5f61133a8383611320565b60208301905092915050565b5f602082019050919050565b5f61135c82611293565b611366818561129d565b9350611371836112ad565b805f5b838110156113a1578151611388888261132f565b975061139383611346565b925050600181019050611374565b5085935050505092915050565b5f608083015f8301516113c35f8601826111fa565b50602083015184820360208601526113db828261125b565b915050604083015184820360408601526113f5828261125b565b9150506060830151848203606086015261140f8282611352565b9150508091505092915050565b5f6020820190508181035f83015261143481846113ae565b905092915050565b61144581611194565b82525050565b5f60208201905061145e5f83018461143c565b92915050565b60048110611470575f80fd5b50565b5f8135905061148181611464565b92915050565b5f6020828403121561149c5761149b61116d565b5b5f6114a984828501611473565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6114e683836111fa565b60208301905092915050565b5f602082019050919050565b5f611508826114b2565b61151281856114bc565b935061151d836114cc565b805f5b8381101561154d57815161153488826114db565b975061153f836114f2565b925050600181019050611520565b5085935050505092915050565b5f6020820190508181035f83015261157281846114fe565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115b88261124b565b810181811067ffffffffffffffff821117156115d7576115d6611582565b5b80604052505050565b5f6115e9611164565b90506115f582826115af565b919050565b5f67ffffffffffffffff82111561161457611613611582565b5b61161d8261124b565b9050602081019050919050565b828183375f83830152505050565b5f61164a611645846115fa565b6115e0565b9050828152602081018484840111156116665761166561157e565b5b61167184828561162a565b509392505050565b5f82601f83011261168d5761168c61157a565b5b813561169d848260208601611638565b91505092915050565b5f67ffffffffffffffff8211156116c0576116bf611582565b5b602082029050602081019050919050565b5f80fd5b5f6116e76116e2846116a6565b6115e0565b9050808382526020820190506020840283018581111561170a576117096116d1565b5b835b81811015611733578061171f8882611473565b84526020840193505060208101905061170c565b5050509392505050565b5f82601f8301126117515761175061157a565b5b81356117618482602086016116d5565b91505092915050565b5f805f606084860312156117815761178061116d565b5b5f84013567ffffffffffffffff81111561179e5761179d611171565b5b6117aa86828701611679565b935050602084013567ffffffffffffffff8111156117cb576117ca611171565b5b6117d786828701611679565b925050604084013567ffffffffffffffff8111156117f8576117f7611171565b5b6118048682870161173d565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061185257607f821691505b6020821081036118655761186461180e565b5b50919050565b5f82825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f6118d5602e8361186b565b91506118e08261187b565b604082019050919050565b5f6020820190508181035f830152611902816118c9565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61194161193c61193784611909565b61191e565b611912565b9050919050565b61195181611927565b82525050565b5f60208201905061196a5f830184611948565b92915050565b7f55736572206d75737420657869737400000000000000000000000000000000005f82015250565b5f6119a4600f8361186b565b91506119af82611970565b602082019050919050565b5f6020820190508181035f8301526119d181611998565b9050919050565b7f55736572206973206e6f742070617274206f662074686174206c6973740000005f82015250565b5f611a0c601d8361186b565b9150611a17826119d8565b602082019050919050565b5f6020820190508181035f830152611a3981611a00565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a8082611a40565b9150611a8b83611a40565b9250828203905081811115611aa357611aa2611a49565b5b92915050565b5f611ab382611a40565b9150611abe83611a40565b9250828201905080821115611ad657611ad5611a49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1382611a40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4557611b44611a49565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5573657220697320616c72656164792070617274206f662074686174206c69735f8201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611bd760218361186b565b9150611be282611b7d565b604082019050919050565b5f6020820190508181035f830152611c0481611bcb565b9050919050565b7f55736572206d7573742068617665207468617420726f6c6500000000000000005f82015250565b5f611c3f60188361186b565b9150611c4a82611c0b565b602082019050919050565b5f6020820190508181035f830152611c6c81611c33565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c94565b611cd98683611c94565b95508019841693508086168417925050509392505050565b5f611d0b611d06611d0184611a40565b61191e565b611a40565b9050919050565b5f819050919050565b611d2483611cf1565b611d38611d3082611d12565b848454611ca0565b825550505050565b5f90565b611d4c611d40565b611d57818484611d1b565b505050565b5b81811015611d7a57611d6f5f82611d44565b600181019050611d5d565b5050565b601f821115611dbf57611d9081611c73565b611d9984611c85565b81016020851015611da8578190505b611dbc611db485611c85565b830182611d5c565b50505b505050565b5f82821c905092915050565b5f611ddf5f1984600802611dc4565b1980831691505092915050565b5f611df78383611dd0565b9150826002028217905092915050565b611e1082611209565b67ffffffffffffffff811115611e2957611e28611582565b5b611e33825461183b565b611e3e828285611d7e565b5f60209050601f831160018114611e6f575f8415611e5d578287015190505b611e678582611dec565b865550611ece565b601f198416611e7d86611c73565b5f5b82811015611ea457848901518255600182019150602085019450602081019050611e7f565b86831015611ec15784890151611ebd601f891682611dd0565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611f3060268361186b565b9150611f3b82611ed6565b604082019050919050565b5f6020820190508181035f830152611f5d81611f24565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611f9860208361186b565b9150611fa382611f64565b602082019050919050565b5f6020820190508181035f830152611fc581611f8c565b905091905056fea2646970667358221220c0135d551ce553a21ef28ca9ba3ec44dece3cb17a8e77fba94ef717c0b09f59c64736f6c63430008150033", } // UsersABI is the input ABI used to generate the binding from. diff --git a/pkg/web3/events.go b/pkg/web3/events.go index 64afabc5..d13b882a 100644 --- a/pkg/web3/events.go +++ b/pkg/web3/events.go @@ -11,6 +11,7 @@ type EventChannels struct { Token *TokenEventChannels Payment *PaymentEventChannels Storage *StorageEventChannels + JobCreator *JobCreatorEventChannels Mediation *MediationEventChannels collections []EventChannelCollection } @@ -19,17 +20,20 @@ func NewEventChannels() *EventChannels { tokenChannels := NewTokenEventChannels() paymentChannels := NewPaymentEventChannels() storageChannels := NewStorageEventChannels() + jobCreatorChannels := NewJobCreatorEventChannels() mediationChannels := NewMediationEventChannels() collections := []EventChannelCollection{ tokenChannels, paymentChannels, storageChannels, + jobCreatorChannels, mediationChannels, } return &EventChannels{ Token: tokenChannels, Payment: paymentChannels, Storage: storageChannels, + JobCreator: jobCreatorChannels, Mediation: mediationChannels, collections: collections, } diff --git a/pkg/web3/events_jobcreator.go b/pkg/web3/events_jobcreator.go new file mode 100644 index 00000000..8ac4bcab --- /dev/null +++ b/pkg/web3/events_jobcreator.go @@ -0,0 +1,78 @@ +package web3 + +import ( + "context" + + "github.com/bacalhau-project/lilypad/pkg/system" + "github.com/bacalhau-project/lilypad/pkg/web3/bindings/jobcreator" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/event" + "github.com/rs/zerolog/log" +) + +type JobCreatorEventChannels struct { + jobAddedChan chan *jobcreator.JobcreatorJobAdded + jobAddedSubs []func(jobcreator.JobcreatorJobAdded) +} + +func NewJobCreatorEventChannels() *JobCreatorEventChannels { + return &JobCreatorEventChannels{ + jobAddedChan: make(chan *jobcreator.JobcreatorJobAdded), + jobAddedSubs: []func(jobcreator.JobcreatorJobAdded){}, + } +} + +func (s *JobCreatorEventChannels) Start( + sdk *Web3SDK, + ctx context.Context, + cm *system.CleanupManager, +) error { + blockNumber, err := sdk.getBlockNumber() + if err != nil { + return err + } + + var jobAddedSub event.Subscription + + connectJobAddedSub := func() (event.Subscription, error) { + log.Debug(). + Str("jobcreator->connect", "JobAdded"). + Msgf("") + return sdk.Contracts.JobCreator.WatchJobAdded( + &bind.WatchOpts{Start: &blockNumber, Context: ctx}, + s.jobAddedChan, + ) + } + + jobAddedSub, err = connectJobAddedSub() + if err != nil { + return err + } + + go func() { + <-ctx.Done() + jobAddedSub.Unsubscribe() + }() + + for { + select { + case event := <-s.jobAddedChan: + log.Debug(). + Str("storage->event", "DealStateChange"). + Msgf("%+v", event) + for _, handler := range s.jobAddedSubs { + go handler(*event) + } + case err := <-jobAddedSub.Err(): + jobAddedSub.Unsubscribe() + jobAddedSub, err = connectJobAddedSub() + if err != nil { + return err + } + } + } +} + +func (t *JobCreatorEventChannels) SubscribeJobAdded(handler func(jobcreator.JobcreatorJobAdded)) { + t.jobAddedSubs = append(t.jobAddedSubs, handler) +} diff --git a/pkg/web3/events_mediation.go b/pkg/web3/events_mediation.go index 31827233..d8b11c19 100644 --- a/pkg/web3/events_mediation.go +++ b/pkg/web3/events_mediation.go @@ -18,6 +18,7 @@ type MediationEventChannels struct { func NewMediationEventChannels() *MediationEventChannels { return &MediationEventChannels{ mediationRequestedChan: make(chan *mediation.MediationMediationRequested), + mediationRequestedSubs: []func(mediation.MediationMediationRequested){}, } } diff --git a/pkg/web3/events_payments.go b/pkg/web3/events_payments.go index 3a195f99..2105e5ed 100644 --- a/pkg/web3/events_payments.go +++ b/pkg/web3/events_payments.go @@ -18,6 +18,7 @@ type PaymentEventChannels struct { func NewPaymentEventChannels() *PaymentEventChannels { return &PaymentEventChannels{ paymentChan: make(chan *payments.PaymentsPayment), + paymentSubs: []func(payments.PaymentsPayment){}, } } diff --git a/pkg/web3/events_storage.go b/pkg/web3/events_storage.go index a720daef..ea2b6793 100644 --- a/pkg/web3/events_storage.go +++ b/pkg/web3/events_storage.go @@ -18,6 +18,7 @@ type StorageEventChannels struct { func NewStorageEventChannels() *StorageEventChannels { return &StorageEventChannels{ dealStateChangeChan: make(chan *storage.StorageDealStateChange), + dealStateChangeSubs: []func(storage.StorageDealStateChange){}, } } diff --git a/pkg/web3/events_token.go b/pkg/web3/events_token.go index 6a9fc3e8..e402a140 100644 --- a/pkg/web3/events_token.go +++ b/pkg/web3/events_token.go @@ -19,6 +19,7 @@ type TokenEventChannels struct { func NewTokenEventChannels() *TokenEventChannels { return &TokenEventChannels{ transferChan: make(chan *token.TokenTransfer), + transferSubs: []func(token.TokenTransfer){}, } } diff --git a/pkg/web3/sdk.go b/pkg/web3/sdk.go index f78bb303..765efd95 100644 --- a/pkg/web3/sdk.go +++ b/pkg/web3/sdk.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/controller" + "github.com/bacalhau-project/lilypad/pkg/web3/bindings/jobcreator" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/mediation" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/payments" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/storage" @@ -27,6 +28,7 @@ type Contracts struct { Payments *payments.Payments Storage *storage.Storage Users *users.Users + JobCreator *jobcreator.Jobcreator Mediation *mediation.Mediation Controller *controller.Controller } @@ -122,6 +124,24 @@ func NewContracts( return nil, err } + jobcreatorAddress := options.JobCreatorAddress + + if jobcreatorAddress == "" { + loadedJobCreatorAddress, err := controller.GetJobCreatorAddress(callOpts) + if err != nil { + return nil, err + } + jobcreatorAddress = loadedJobCreatorAddress.String() + log.Debug(). + Str("load jobcreator address", jobcreatorAddress). + Msgf("") + } + + jobCreator, err := jobcreator.NewJobcreator(common.HexToAddress(jobcreatorAddress), client) + if err != nil { + return nil, err + } + mediationAddress := options.MediationAddress if mediationAddress == "" { @@ -145,6 +165,7 @@ func NewContracts( Payments: payments, Storage: storage, Users: users, + JobCreator: jobCreator, Mediation: mediation, Controller: controller, }, nil diff --git a/pkg/web3/types.go b/pkg/web3/types.go index c004e52a..ce0a2992 100644 --- a/pkg/web3/types.go +++ b/pkg/web3/types.go @@ -19,6 +19,7 @@ type Web3Options struct { StorageAddress string `json:"storage_address"` UsersAddress string `json:"users_address"` MediationAddress string `json:"mediation_address"` + JobCreatorAddress string `json:"jobcreator_address"` TokenAddress string `json:"token_address"` // this is injected by whatever service we are running diff --git a/stack b/stack index 763e311d..764451ba 100755 --- a/stack +++ b/stack @@ -201,6 +201,7 @@ function go-bindings() { go-binding LilypadStorage storage go-binding LilypadUsers users go-binding LilypadMediationRandom mediation + go-binding LilypadOnChainJobCreator jobcreator go-binding LilypadController controller echo "Generated all go bindings pkg/contract/bindings/" From c323ba73184e5fc24689d81461f88d3726271f54 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Thu, 26 Oct 2023 15:15:19 +0100 Subject: [PATCH 5/7] copy jsonl package it had an odd circular go mod problem --- go.mod | 1 - go.sum | 2 -- pkg/jsonl/reader.go | 49 ++++++++++++++++++++++++++++++++ pkg/jsonl/writer.go | 48 +++++++++++++++++++++++++++++++ pkg/solver/controller.go | 38 +++++++++++++++++++++++++ pkg/solver/store/memory/store.go | 2 +- 6 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 pkg/jsonl/reader.go create mode 100644 pkg/jsonl/writer.go diff --git a/go.mod b/go.mod index e0b27489..bef14eb6 100644 --- a/go.mod +++ b/go.mod @@ -87,7 +87,6 @@ require ( github.com/rivo/uniseg v0.4.4 // indirect github.com/sergi/go-diff v1.1.0 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/simonfrey/jsonl v0.0.0-20230718192858-195f01ae6957 github.com/skeema/knownhosts v1.2.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect diff --git a/go.sum b/go.sum index 8f622d93..af90767a 100644 --- a/go.sum +++ b/go.sum @@ -323,8 +323,6 @@ github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/simonfrey/jsonl v0.0.0-20230718192858-195f01ae6957 h1:x4Ok+mXir8ZApXlFuAf2JayR1ZhiVgqBBCQ8msaNJkk= -github.com/simonfrey/jsonl v0.0.0-20230718192858-195f01ae6957/go.mod h1:G4w16caPmc6at7u4fmkj/8OAoOnM9mkmJr2fvL0vhaw= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= diff --git a/pkg/jsonl/reader.go b/pkg/jsonl/reader.go new file mode 100644 index 00000000..03f5d64b --- /dev/null +++ b/pkg/jsonl/reader.go @@ -0,0 +1,49 @@ +package jsonl + +import ( + "bufio" + "encoding/json" + "fmt" + "io" +) + +type Reader struct { + r io.Reader + scanner *bufio.Scanner +} + +func NewReader(r io.Reader) Reader { + scanner := bufio.NewScanner(r) + scanner.Split(bufio.ScanLines) + + return Reader{ + r: r, + scanner: scanner, + } +} + +func (r Reader) Close() error { + if c, ok := r.r.(io.ReadCloser); ok { + return c.Close() + } + return fmt.Errorf("given reader is no ReadCloser") +} + +func (r Reader) ReadSingleLine(output interface{}) error { + ok := r.scanner.Scan() + if !ok { + return fmt.Errorf("could not read from scanner. Scanner done") + } + + return json.Unmarshal(r.scanner.Bytes(), output) +} + +func (r Reader) ReadLines(callback func(data []byte) error) error { + for r.scanner.Scan() { + err := callback(r.scanner.Bytes()) + if err != nil { + return fmt.Errorf("error in callback: %w", err) + } + } + return nil +} diff --git a/pkg/jsonl/writer.go b/pkg/jsonl/writer.go new file mode 100644 index 00000000..d13557a1 --- /dev/null +++ b/pkg/jsonl/writer.go @@ -0,0 +1,48 @@ +package jsonl + +import ( + "encoding/json" + "fmt" + "io" + "net/http" +) + +type Writer struct { + w io.Writer +} + +func NewWriter(w io.Writer) Writer { + return Writer{ + w: w, + } +} + +func (w Writer) Close() error { + if c, ok := w.w.(io.WriteCloser); ok { + return c.Close() + } + return fmt.Errorf("given writer is no WriteCloser") +} + +func (w Writer) Write(data interface{}) error { + j, err := json.Marshal(data) + if err != nil { + return fmt.Errorf("could not json marshal data: %w", err) + } + + _, err = w.w.Write(j) + if err != nil { + return fmt.Errorf("could not write json data to underlying io.Writer: %w", err) + } + + _, err = w.w.Write([]byte("\n")) + if err != nil { + return fmt.Errorf("could not write newline to underlying io.Writer: %w", err) + } + + if f, ok := w.w.(http.Flusher); ok { + // If http writer, flush as well + f.Flush() + } + return nil +} diff --git a/pkg/solver/controller.go b/pkg/solver/controller.go index 581ae674..b89b7e5b 100644 --- a/pkg/solver/controller.go +++ b/pkg/solver/controller.go @@ -6,11 +6,14 @@ import ( "time" "github.com/bacalhau-project/lilypad/pkg/data" + optionsfactory "github.com/bacalhau-project/lilypad/pkg/options" "github.com/bacalhau-project/lilypad/pkg/solver/store" "github.com/bacalhau-project/lilypad/pkg/system" "github.com/bacalhau-project/lilypad/pkg/web3" + jobcreatorweb3 "github.com/bacalhau-project/lilypad/pkg/web3/bindings/jobcreator" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/mediation" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/storage" + "github.com/davecgh/go-spew/spew" ) // add an enum for various types of event @@ -156,6 +159,20 @@ func (controller *SolverController) subscribeToWeb3() error { controller.loop.Trigger() }) + // hear about new jobs added to the job creator + controller.web3Events.JobCreator.SubscribeJobAdded(func(ev jobcreatorweb3.JobcreatorJobAdded) { + controller.log.Info("JobcreatorJobAdded", "") + system.DumpObjectDebug(ev) + _, err := controller.runJob(ev) + if err != nil { + controller.log.Error("error running job", err) + return + } + + // update the store with the state change + controller.loop.Trigger() + }) + return nil } @@ -479,3 +496,24 @@ func (controller *SolverController) updateDealTransactionsMediator(id string, pa }) return dealContainer, nil } + +/* +* +* +* + +# Run onchain job + +* +* +* +*/ + +func (controller *SolverController) runJob(ev jobcreatorweb3.JobcreatorJobAdded) (*data.DealContainer, error) { + options := optionsfactory.NewJobCreatorOptions() + fmt.Printf("options --------------------------------------\n") + spew.Dump(options) + fmt.Printf("ev --------------------------------------\n") + spew.Dump(ev) + return nil, nil +} diff --git a/pkg/solver/store/memory/store.go b/pkg/solver/store/memory/store.go index 0f4d1ae8..9808d03f 100644 --- a/pkg/solver/store/memory/store.go +++ b/pkg/solver/store/memory/store.go @@ -6,8 +6,8 @@ import ( "sync" "github.com/bacalhau-project/lilypad/pkg/data" + "github.com/bacalhau-project/lilypad/pkg/jsonl" "github.com/bacalhau-project/lilypad/pkg/solver/store" - "github.com/simonfrey/jsonl" ) type SolverStoreMemory struct { From 755fa0f525f9e9e2bf06652537f99a08c5f7a340 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Thu, 26 Oct 2023 18:54:46 +0100 Subject: [PATCH 6/7] client smart contract --- cmd/lilypad/jobcreator.go | 58 ++++ cmd/lilypad/root.go | 1 + go.mod | 93 +++--- go.sum | 287 ++++++++---------- hardhat/contracts/ExampleClient.sol | 53 ++++ hardhat/contracts/ILilypadJobClient.sol | 7 +- .../contracts/LilypadOnChainJobCreator.sol | 17 +- pkg/jobcreator/jobcreator.go | 25 +- pkg/jobcreator/onchain_jobcreator.go | 133 ++++++++ pkg/jobcreator/utils.go | 33 ++ pkg/options/job-creator.go | 21 ++ pkg/solver/controller.go | 34 +-- pkg/web3/api.go | 17 +- pkg/web3/sdk.go | 4 +- stack | 10 + 15 files changed, 522 insertions(+), 271 deletions(-) create mode 100644 cmd/lilypad/jobcreator.go create mode 100644 hardhat/contracts/ExampleClient.sol create mode 100644 pkg/jobcreator/onchain_jobcreator.go create mode 100644 pkg/jobcreator/utils.go diff --git a/cmd/lilypad/jobcreator.go b/cmd/lilypad/jobcreator.go new file mode 100644 index 00000000..db22fb4b --- /dev/null +++ b/cmd/lilypad/jobcreator.go @@ -0,0 +1,58 @@ +package lilypad + +import ( + "github.com/bacalhau-project/lilypad/pkg/jobcreator" + optionsfactory "github.com/bacalhau-project/lilypad/pkg/options" + "github.com/bacalhau-project/lilypad/pkg/system" + "github.com/bacalhau-project/lilypad/pkg/web3" + "github.com/spf13/cobra" +) + +func newJobCreatorCmd() *cobra.Command { + options := optionsfactory.NewJobCreatorOptions() + + solverCmd := &cobra.Command{ + Use: "jobcreator", + Short: "Start the lilypad job creator service.", + Long: "Start the lilypad job creator service.", + Example: "", + RunE: func(cmd *cobra.Command, args []string) error { + options, err := optionsfactory.ProcessOnChainJobCreatorOptions(options, args) + if err != nil { + return err + } + return runJobCreator(cmd, options) + }, + } + + optionsfactory.AddJobCreatorCliFlags(solverCmd, &options) + + return solverCmd +} + +func runJobCreator(cmd *cobra.Command, options jobcreator.JobCreatorOptions) error { + commandCtx := system.NewCommandContext(cmd) + defer commandCtx.Cleanup() + + web3SDK, err := web3.NewContractSDK(options.Web3) + if err != nil { + return err + } + + // create the job creator and start it's control loop + jobCreatorService, err := jobcreator.NewOnChainJobCreator(options, web3SDK) + if err != nil { + return err + } + + jobCreatorErrors := jobCreatorService.Start(commandCtx.Ctx, commandCtx.Cm) + + for { + select { + case err := <-jobCreatorErrors: + return err + case <-commandCtx.Ctx.Done(): + return nil + } + } +} diff --git a/cmd/lilypad/root.go b/cmd/lilypad/root.go index 67e3a94d..72a79e77 100644 --- a/cmd/lilypad/root.go +++ b/cmd/lilypad/root.go @@ -23,6 +23,7 @@ func NewRootCmd() *cobra.Command { RootCmd.AddCommand(newResourceProviderCmd()) RootCmd.AddCommand(newRunCmd()) RootCmd.AddCommand(newMediatorCmd()) + RootCmd.AddCommand(newJobCreatorCmd()) return RootCmd } diff --git a/go.mod b/go.mod index bef14eb6..6795aacc 100644 --- a/go.mod +++ b/go.mod @@ -4,50 +4,55 @@ go 1.20 require ( github.com/davecgh/go-spew v1.1.1 - github.com/ethereum/go-ethereum v1.12.2 - github.com/go-git/go-git/v5 v5.8.1 + github.com/ethereum/go-ethereum v1.13.4 + github.com/fatih/color v1.15.0 + github.com/go-git/go-git/v5 v5.10.0 github.com/gorilla/mux v1.8.0 github.com/gorilla/websocket v1.5.0 github.com/hashicorp/go-retryablehttp v0.7.4 github.com/ipfs/go-merkledag v0.11.0 - github.com/rs/zerolog v1.30.0 + github.com/rs/zerolog v1.31.0 github.com/spf13/cobra v1.7.0 - github.com/stretchr/testify v1.8.2 - k8s.io/apimachinery v0.27.2 + github.com/stretchr/testify v1.8.4 + github.com/theckman/yacspin v0.13.12 + k8s.io/apimachinery v0.28.3 ) require ( dario.cat/mergo v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect github.com/acomagu/bufpipe v1.0.4 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v0.3.0 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/fatih/color v1.15.0 + github.com/ethereum/c-kzg-4844 v0.3.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.4.1 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.1 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/holiman/uint256 v1.2.3 // indirect - github.com/huin/goupnp v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/bbloom v0.0.4 // indirect - github.com/ipfs/go-block-format v0.1.1 // indirect + github.com/ipfs/go-block-format v0.0.3 // indirect github.com/ipfs/go-blockservice v0.5.0 // indirect - github.com/ipfs/go-cid v0.4.1 // indirect + github.com/ipfs/go-cid v0.3.2 // indirect github.com/ipfs/go-datastore v0.6.0 // indirect github.com/ipfs/go-ipfs-blockstore v1.2.0 // indirect github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect @@ -55,60 +60,56 @@ require ( github.com/ipfs/go-ipfs-util v0.0.2 // indirect github.com/ipfs/go-ipld-format v0.5.0 // indirect github.com/ipfs/go-ipld-legacy v0.2.1 // indirect - github.com/ipfs/go-libipfs v0.6.2 // indirect github.com/ipfs/go-log v1.0.5 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect github.com/ipfs/go-metrics-interface v0.0.1 // indirect - github.com/ipfs/go-verifcid v0.0.2 // indirect + github.com/ipfs/go-verifcid v0.0.1 // indirect github.com/ipld/go-codec-dagpb v1.6.0 // indirect github.com/ipld/go-ipld-prime v0.20.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jbenet/goprocess v0.1.4 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/libp2p/go-libp2p v0.27.4 // indirect + github.com/klauspost/cpuid/v2 v2.1.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect github.com/minio/sha256-simd v1.0.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.9.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.8.1 // indirect - github.com/multiformats/go-multihash v0.2.2 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect + github.com/multiformats/go-base32 v0.0.4 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multibase v0.1.1 // indirect + github.com/multiformats/go-multihash v0.2.1 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/polydawn/refmt v0.89.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/sergi/go-diff v1.1.0 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect github.com/skeema/knownhosts v1.2.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/theckman/yacspin v0.13.12 - github.com/tklauser/go-sysconf v0.3.5 // indirect - github.com/tklauser/numcpus v0.2.2 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - go.opentelemetry.io/otel v1.14.0 // indirect - go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.opentelemetry.io/otel v1.7.0 // indirect + go.opentelemetry.io/otel/trace v1.7.0 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/goleak v1.1.12 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.11.0 // indirect - golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.12.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/tools v0.9.1 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.22.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect google.golang.org/protobuf v1.30.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.1.7 // indirect + rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/go.sum b/go.sum index af90767a..da1d0817 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,15 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= -github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= @@ -18,95 +18,94 @@ github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/gnark-crypto v0.10.0 h1:zRh22SR7o4K35SoNqouS9J/TKHTyU2QWaj5ldehyXtA= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-kzg-4844 v0.3.0 h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/crate-crypto/go-kzg-4844 v0.3.0/go.mod h1:SBP7ikXEgDnUPONgm33HtuDZEDtWa3L4QtN1ocJSEQ4= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/ethereum/c-kzg-4844 v0.3.1 h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg= -github.com/ethereum/go-ethereum v1.12.2 h1:eGHJ4ij7oyVqUQn48LBz3B7pvQ8sV0wGJiIE6gDq/6Y= -github.com/ethereum/go-ethereum v1.12.2/go.mod h1:1cRAEV+rp/xX0zraSCBnu9Py3HQ+geRMj3HdR+k0wfI= +github.com/ethereum/c-kzg-4844 v0.3.1/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.4 h1:25HJnaWVg3q1O7Z62LaaI6S9wVq8QCw3K88g8wEzrcM= +github.com/ethereum/go-ethereum v1.13.4/go.mod h1:I0U5VewuuTzvBtVzKo7b3hJzDhXOUtn9mJW7SsIPB0Q= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.8.1 h1:Zo79E4p7TRk0xoRgMq0RShiTHGKcKI4+DI6BfJc/Q+A= -github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git/v5 v5.10.0 h1:F0x3xXrAWmhwtzoCokU4IMPcBdncG+HAAqi9FcOOjbQ= +github.com/go-git/go-git/v5 v5.10.0/go.mod h1:1FOZ/pQnqw24ghP2n7cunVl0ON55BsjPYvhWHvZGhoo= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b h1:Qcx5LM0fSiks9uCyFZwDBUasd3lxd1RM0GYpL+Li5o4= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -126,25 +125,23 @@ github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZ github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= -github.com/huin/goupnp v1.1.0 h1:gEe0Dp/lZmPZiDFzJJaOfUpOvv2MKUkoBX8lDrn9vKU= -github.com/huin/goupnp v1.1.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= -github.com/ipfs/go-block-format v0.1.1 h1:129vSO3zwbsYADcyQWcOYiuCpAqt462SFfqFHdFJhhI= -github.com/ipfs/go-block-format v0.1.1/go.mod h1:+McEIT+g52p+zz5xGAABGSOKrzmrdX97bc0USBdWPUs= github.com/ipfs/go-blockservice v0.5.0 h1:B2mwhhhVQl2ntW2EIpaWPwSCxSuqr5fFA93Ms4bYLEY= github.com/ipfs/go-blockservice v0.5.0/go.mod h1:W6brZ5k20AehbmERplmERn8o2Ni3ZZubvAxaIUeaT6w= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= -github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/ipfs/go-cid v0.3.2 h1:OGgOd+JCFM+y1DjWPmVH+2/4POtpDzwcr7VgnB7mZXc= +github.com/ipfs/go-cid v0.3.2/go.mod h1:gQ8pKqT/sUxGY+tIwy1RPpAojYu7jAyCp5Tz1svoupw= github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= @@ -160,7 +157,7 @@ github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNo github.com/ipfs/go-ipfs-exchange-interface v0.2.0 h1:8lMSJmKogZYNo2jjhUs0izT+dck05pqUw4mWNW9Pw6Y= github.com/ipfs/go-ipfs-exchange-interface v0.2.0/go.mod h1:z6+RhJuDQbqKguVyslSOuVDhqF9JtTrO3eptSAiW2/Y= github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA= -github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE= +github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY= github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc= github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= @@ -170,8 +167,6 @@ github.com/ipfs/go-ipld-format v0.5.0 h1:WyEle9K96MSrvr47zZHKKcDxJ/vlpET6PSiQsAF github.com/ipfs/go-ipld-format v0.5.0/go.mod h1:ImdZqJQaEouMjCvqCe0ORUS+uoBmf7Hf+EO/jh+nk3M= github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk= github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM= -github.com/ipfs/go-libipfs v0.6.2 h1:QUf3kS3RrCjgtE0QW2d18PFFfOLeEt24Ft892ipLzRI= -github.com/ipfs/go-libipfs v0.6.2/go.mod h1:FmhKgxMOQA572TK5DA3MZ5GL44ZqsMHIrkgK4gLn4A8= github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= @@ -182,9 +177,9 @@ github.com/ipfs/go-merkledag v0.11.0 h1:DgzwK5hprESOzS4O1t/wi6JDpyVQdvm9Bs59N/jq github.com/ipfs/go-merkledag v0.11.0/go.mod h1:Q4f/1ezvBiJV0YCIXvt51W/9/kqJGH4I1LsA7+djsM4= github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= -github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg= -github.com/ipfs/go-verifcid v0.0.2 h1:XPnUv0XmdH+ZIhLGKg6U2vaPaRDXb9urMyNVCE7uvTs= -github.com/ipfs/go-verifcid v0.0.2/go.mod h1:40cD9x1y4OWnFXbLNJYRe7MpNvWlMn3LZAG5Wb4xnPU= +github.com/ipfs/go-peertaskqueue v0.8.0 h1:JyNO144tfu9bx6Hpo119zvbEL9iQ760FHOiJYsUjqaU= +github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= +github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc= github.com/ipld/go-codec-dagpb v1.6.0/go.mod h1:ANzFhfP2uMJxRBr8CE+WQWs5UsNa0pYtmKZ+agnUw9s= github.com/ipld/go-ipld-prime v0.20.0 h1:Ud3VwE9ClxpO2LkCYP7vWPc0Fo+dYdYzgxUJZ3uRG4g= @@ -193,98 +188,91 @@ github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7Bd github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= +github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0= +github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-libp2p v0.27.4 h1:zliwN9xuzCBqCtWe0XjLKJGK6EIZTkp9L1e15wBpiOU= -github.com/libp2p/go-libp2p v0.27.4/go.mod h1:oMfQGTb9CHnrOuSM6yMmyK2lXz3qIhnkn2+oK3B1Y2g= -github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= -github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= +github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= +github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= -github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= +github.com/multiformats/go-multiaddr v0.7.0 h1:gskHcdaCyPtp9XskVwtvEeQOG465sCohbQIirSyqxrc= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.8.1 h1:ycepHwavHafh3grIbR1jIXnKCsFm0fqsfEOsJ8NtKE8= -github.com/multiformats/go-multicodec v0.8.1/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.8.0 h1:evBmgkbSQux+Ds2IgfhkO38Dl2GDtRW8/Rp6YiSHX/Q= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.2.2 h1:Uu7LWs/PmWby1gkj1S1DXx3zyd3aVabA4FiMKn/2tAc= -github.com/multiformats/go-multihash v0.2.2/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -295,41 +283,32 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= -github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= -github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= -github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= -github.com/quic-go/webtransport-go v0.5.2 h1:GA6Bl6oZY+g/flt00Pnu0XtivSD8vukOu3lYhJjnGEk= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e h1:ZOcivgkkFRnjfoTcGsDq3UQYiBmekwLA+qg0OjyB/ls= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg= +github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= -github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= +github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= -github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= -github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= -github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= -github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= @@ -338,31 +317,26 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk= -github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.24.1 h1:/QYYr7g0EhwXEML8jO+8OYt5trPnLHS0p3mrgExJ5NU= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/warpfork/go-testmark v0.11.0 h1:J6LnV8KpceDvo7spaNU4+DauH2n1x+6RaO2rJrmpQ9U= -github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= -github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= @@ -371,26 +345,25 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= -go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= -go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= -go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -401,10 +374,10 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU= -golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -412,8 +385,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -427,8 +400,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -436,21 +409,21 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -461,14 +434,17 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -476,12 +452,11 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -491,8 +466,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -504,11 +479,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -520,8 +492,9 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg= -k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A= +k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/hardhat/contracts/ExampleClient.sol b/hardhat/contracts/ExampleClient.sol new file mode 100644 index 00000000..2f5604e8 --- /dev/null +++ b/hardhat/contracts/ExampleClient.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.6; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "./ILilypadJobManager.sol"; +import "./ILilypadJobClient.sol"; + +contract ExampleClient is Ownable, Initializable, ILilypadJobClient { + + address private jobManagerAddress; + ILilypadJobManager private jobManagerContract; + + event JobCompleted( + uint256 id, + string dealId, + string dataId + ); + + function initialize(address _jobManagerAddress) public initializer { + setJobManagerAddress(_jobManagerAddress); + } + + function setJobManagerAddress(address _jobManagerAddress) public onlyOwner { + require(_jobManagerAddress != address(0), "Job manager address"); + jobManagerAddress = _jobManagerAddress; + jobManagerContract = ILilypadJobManager(jobManagerAddress); + } + + function runCowsay( + string memory message + ) public { + string[] memory inputs = new string[](1); + inputs[0] = string(abi.encodePacked("Message=", message)); + jobManagerContract.runJob( + "cowsay:v0.0.1", + inputs, + msg.sender + ); + } + + function submitResults( + uint256 id, + string memory dealId, + string memory dataId + ) public override { + emit JobCompleted( + id, + dealId, + dataId + ); + } +} diff --git a/hardhat/contracts/ILilypadJobClient.sol b/hardhat/contracts/ILilypadJobClient.sol index d3f9dd4e..d313b202 100644 --- a/hardhat/contracts/ILilypadJobClient.sol +++ b/hardhat/contracts/ILilypadJobClient.sol @@ -5,10 +5,9 @@ pragma solidity ^0.8.6; // it will call the IOnChainJobManager with it's job // which will end up with the resultsAdded function being called by the manager interface ILilypadJobClient { - function resultsAdded( + function submitResults( + uint256 id, string memory dealId, - string memory resultsId, - string memory dataId, - uint256 instructionCount + string memory dataId ) external; } diff --git a/hardhat/contracts/LilypadOnChainJobCreator.sol b/hardhat/contracts/LilypadOnChainJobCreator.sol index aa420dc7..6b2f77c4 100644 --- a/hardhat/contracts/LilypadOnChainJobCreator.sol +++ b/hardhat/contracts/LilypadOnChainJobCreator.sol @@ -68,6 +68,7 @@ contract LilypadOnChainJobCreator is ILilypadJobManager, ControllerOwnable, Init } // called by on-chain clients to make an offer for a job + // this will return a ticketID which is a unique onchain identifier for the job function runJob( // what is the module name we are making an offer for string memory module, @@ -104,12 +105,18 @@ contract LilypadOnChainJobCreator is ILilypadJobManager, ControllerOwnable, Init // this is called by the solver once we've got results out of the controller // it will call the "resultsAdded" function on the original client contract - function resultsAdded( + function submitResults( + uint256 id, string memory dealId, - string memory resultsId, - string memory dataId, - uint256 instructionCount + string memory dataId ) public override { - + SharedStructs.JobOffer storage offer = jobOffers[id]; + require(offer.id != 0, "Job not found"); + require(offer.payee == msg.sender, "Not payee"); + ILilypadJobClient(offer.calling_contract).submitResults( + id, + dealId, + dataId + ); } } diff --git a/pkg/jobcreator/jobcreator.go b/pkg/jobcreator/jobcreator.go index 22d15ebd..dc0d8a94 100644 --- a/pkg/jobcreator/jobcreator.go +++ b/pkg/jobcreator/jobcreator.go @@ -2,11 +2,8 @@ package jobcreator import ( "context" - "fmt" - "time" "github.com/bacalhau-project/lilypad/pkg/data" - "github.com/bacalhau-project/lilypad/pkg/module" "github.com/bacalhau-project/lilypad/pkg/system" "github.com/bacalhau-project/lilypad/pkg/web3" ) @@ -68,28 +65,8 @@ func (jobCreator *JobCreator) Start(ctx context.Context, cm *system.CleanupManag return jobCreator.controller.Start(ctx, cm) } -// this will load the module in the offer options -// and hoist the machine spec from the module into the offer func (jobCreator *JobCreator) GetJobOfferFromOptions(options JobCreatorOfferOptions) (data.JobOffer, error) { - // process the given module so we know what spec the job is asking for - // this will also validate the module the user is asking for - loadedModule, err := module.LoadModule(options.Module, options.Inputs) - if err != nil { - return data.JobOffer{}, fmt.Errorf("error loading module: %s opts=%+v", err.Error(), options) - } - - return data.JobOffer{ - // assign CreatedAt to the current millisecond timestamp - CreatedAt: int(time.Now().UnixNano() / int64(time.Millisecond)), - JobCreator: jobCreator.web3SDK.GetAddress().String(), - Module: options.Module, - Spec: loadedModule.Machine, - Inputs: options.Inputs, - Mode: options.Mode, - Pricing: options.Pricing, - Timeouts: options.Timeouts, - Services: options.Services, - }, nil + return getJobOfferFromOptions(options, jobCreator.web3SDK.GetAddress().String()) } // adds the job offer to the solver diff --git a/pkg/jobcreator/onchain_jobcreator.go b/pkg/jobcreator/onchain_jobcreator.go new file mode 100644 index 00000000..19a6722f --- /dev/null +++ b/pkg/jobcreator/onchain_jobcreator.go @@ -0,0 +1,133 @@ +package jobcreator + +import ( + "context" + "fmt" + "math/big" + "strings" + + "github.com/bacalhau-project/lilypad/pkg/data" + "github.com/bacalhau-project/lilypad/pkg/system" + "github.com/bacalhau-project/lilypad/pkg/web3" + jobcreatorweb3 "github.com/bacalhau-project/lilypad/pkg/web3/bindings/jobcreator" + "github.com/davecgh/go-spew/spew" +) + +const JOB_PRICE = 2 + +type OnChainJobCreator struct { + web3SDK *web3.Web3SDK + web3Events *web3.EventChannels + options JobCreatorOptions + controller *JobCreatorController +} + +func NewOnChainJobCreator( + options JobCreatorOptions, + web3SDK *web3.Web3SDK, +) (*OnChainJobCreator, error) { + controller, err := NewJobCreatorController(options, web3SDK) + if err != nil { + return nil, err + } + jc := &OnChainJobCreator{ + controller: controller, + options: options, + web3SDK: web3SDK, + web3Events: web3.NewEventChannels(), + } + return jc, nil +} + +func (jobCreator *OnChainJobCreator) Start(ctx context.Context, cm *system.CleanupManager) chan error { + errorChan := jobCreator.controller.Start(ctx, cm) + + // TODO: work out how to do dynamic pricing + tx, err := jobCreator.web3SDK.Contracts.JobCreator.SetRequiredDeposit(jobCreator.web3SDK.TransactOpts, big.NewInt(JOB_PRICE)) + if err != nil { + errorChan <- err + return errorChan + } + + _, err = jobCreator.web3SDK.WaitTx(ctx, tx) + if err != nil { + errorChan <- err + return errorChan + } + + err = jobCreator.web3Events.Start(jobCreator.web3SDK, ctx, cm) + if err != nil { + errorChan <- err + return errorChan + } + + jobCreator.controller.SubscribeToJobOfferUpdates(func(evOffer data.JobOfferContainer) { + + }) + + jobCreator.web3Events.JobCreator.SubscribeJobAdded(func(ev jobcreatorweb3.JobcreatorJobAdded) { + + // first we need to move the tokens into our account + tx, err := jobCreator.web3SDK.Contracts.Token.TransferFrom(jobCreator.web3SDK.TransactOpts, ev.Payee, jobCreator.web3SDK.GetAddress(), big.NewInt(JOB_PRICE)) + if err != nil { + fmt.Printf("error creating job offer: %s\n", err.Error()) + return + } + + _, err = jobCreator.web3SDK.WaitTx(ctx, tx) + if err != nil { + fmt.Printf("error creating job offer: %s\n", err.Error()) + return + } + + options := jobCreator.options.Offer + options.Module.Name = ev.Module + inputs := map[string]string{} + for _, input := range ev.Inputs { + parts := strings.Split(input, "=") + if len(parts) == 2 { + inputs[parts[0]] = parts[1] + } + } + options.Inputs = inputs + offer, err := getJobOfferFromOptions(options, jobCreator.web3SDK.GetAddress().String()) + if err != nil { + fmt.Printf("error creating job offer: %s\n", err.Error()) + return + } + fmt.Printf("options --------------------------------------\n") + spew.Dump(options) + fmt.Printf("ev --------------------------------------\n") + spew.Dump(ev) + fmt.Printf("offer --------------------------------------\n") + spew.Dump(offer) + + container, err := jobCreator.controller.AddJobOffer(offer) + if err != nil { + fmt.Printf("error creating job offer: %s\n", err.Error()) + return + } + + fmt.Printf("contianer --------------------------------------\n") + spew.Dump(container) + }) + + return errorChan +} + +func (jobCreator *OnChainJobCreator) GetJobOfferFromOptions(options JobCreatorOfferOptions) (data.JobOffer, error) { + return getJobOfferFromOptions(options, jobCreator.web3SDK.GetAddress().String()) +} + +// adds the job offer to the solver +func (jobCreator *OnChainJobCreator) AddJobOffer(offer data.JobOffer) (data.JobOfferContainer, error) { + return jobCreator.controller.AddJobOffer(offer) +} + +func (jobCreator *OnChainJobCreator) SubscribeToJobOfferUpdates(sub JobOfferSubscriber) { + jobCreator.controller.SubscribeToJobOfferUpdates(sub) +} + +func (jobCreator *OnChainJobCreator) GetResult(dealId string) (data.Result, error) { + return jobCreator.controller.solverClient.GetResult(dealId) +} diff --git a/pkg/jobcreator/utils.go b/pkg/jobcreator/utils.go new file mode 100644 index 00000000..1ab36d9f --- /dev/null +++ b/pkg/jobcreator/utils.go @@ -0,0 +1,33 @@ +package jobcreator + +import ( + "fmt" + "time" + + "github.com/bacalhau-project/lilypad/pkg/data" + "github.com/bacalhau-project/lilypad/pkg/module" +) + +// this will load the module in the offer options +// and hoist the machine spec from the module into the offer +func getJobOfferFromOptions(options JobCreatorOfferOptions, jobCreatorAddress string) (data.JobOffer, error) { + // process the given module so we know what spec the job is asking for + // this will also validate the module the user is asking for + loadedModule, err := module.LoadModule(options.Module, options.Inputs) + if err != nil { + return data.JobOffer{}, fmt.Errorf("error loading module: %s opts=%+v", err.Error(), options) + } + + return data.JobOffer{ + // assign CreatedAt to the current millisecond timestamp + CreatedAt: int(time.Now().UnixNano() / int64(time.Millisecond)), + JobCreator: jobCreatorAddress, + Module: options.Module, + Spec: loadedModule.Machine, + Inputs: options.Inputs, + Mode: options.Mode, + Pricing: options.Pricing, + Timeouts: options.Timeouts, + Services: options.Services, + }, nil +} diff --git a/pkg/options/job-creator.go b/pkg/options/job-creator.go index 862d023e..cc9395b6 100644 --- a/pkg/options/job-creator.go +++ b/pkg/options/job-creator.go @@ -106,3 +106,24 @@ func ProcessJobCreatorOptions(options jobcreator.JobCreatorOptions, args []strin options.Web3 = newWeb3Options return options, CheckJobCreatorOptions(options) } + +func ProcessOnChainJobCreatorOptions(options jobcreator.JobCreatorOptions, args []string) (jobcreator.JobCreatorOptions, error) { + newWeb3Options, err := ProcessWeb3Options(options.Web3) + if err != nil { + return options, err + } + options.Web3 = newWeb3Options + + err = CheckWeb3Options(options.Web3) + if err != nil { + return options, err + } + err = CheckServicesOptions(options.Offer.Services) + if err != nil { + return options, err + } + + options.Mediation.CheckResultsPercentage = 0 + + return options, nil +} diff --git a/pkg/solver/controller.go b/pkg/solver/controller.go index b89b7e5b..33b87d00 100644 --- a/pkg/solver/controller.go +++ b/pkg/solver/controller.go @@ -6,14 +6,11 @@ import ( "time" "github.com/bacalhau-project/lilypad/pkg/data" - optionsfactory "github.com/bacalhau-project/lilypad/pkg/options" "github.com/bacalhau-project/lilypad/pkg/solver/store" "github.com/bacalhau-project/lilypad/pkg/system" "github.com/bacalhau-project/lilypad/pkg/web3" - jobcreatorweb3 "github.com/bacalhau-project/lilypad/pkg/web3/bindings/jobcreator" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/mediation" "github.com/bacalhau-project/lilypad/pkg/web3/bindings/storage" - "github.com/davecgh/go-spew/spew" ) // add an enum for various types of event @@ -78,6 +75,7 @@ func (controller *SolverController) Start(ctx context.Context, cm *system.Cleanu errorChan <- err return errorChan } + // activate the web3 event listeners err = controller.web3Events.Start(controller.web3SDK, ctx, cm) if err != nil { @@ -159,20 +157,6 @@ func (controller *SolverController) subscribeToWeb3() error { controller.loop.Trigger() }) - // hear about new jobs added to the job creator - controller.web3Events.JobCreator.SubscribeJobAdded(func(ev jobcreatorweb3.JobcreatorJobAdded) { - controller.log.Info("JobcreatorJobAdded", "") - system.DumpObjectDebug(ev) - _, err := controller.runJob(ev) - if err != nil { - controller.log.Error("error running job", err) - return - } - - // update the store with the state change - controller.loop.Trigger() - }) - return nil } @@ -509,11 +493,11 @@ func (controller *SolverController) updateDealTransactionsMediator(id string, pa * */ -func (controller *SolverController) runJob(ev jobcreatorweb3.JobcreatorJobAdded) (*data.DealContainer, error) { - options := optionsfactory.NewJobCreatorOptions() - fmt.Printf("options --------------------------------------\n") - spew.Dump(options) - fmt.Printf("ev --------------------------------------\n") - spew.Dump(ev) - return nil, nil -} +// func (controller *SolverController) runJob(ev jobcreatorweb3.JobcreatorJobAdded) (*data.DealContainer, error) { +// options := optionsfactory.NewJobCreatorOptions() +// fmt.Printf("options --------------------------------------\n") +// spew.Dump(options) +// fmt.Printf("ev --------------------------------------\n") +// spew.Dump(ev) +// return nil, nil +// } diff --git a/pkg/web3/api.go b/pkg/web3/api.go index be175723..9fb765ef 100644 --- a/pkg/web3/api.go +++ b/pkg/web3/api.go @@ -1,6 +1,7 @@ package web3 import ( + "context" "fmt" "math/big" @@ -52,7 +53,7 @@ func (sdk *Web3SDK) UpdateUser( system.Info(sdk.Options.Service, "submitted users.UpdateUser", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return err } @@ -73,7 +74,7 @@ func (sdk *Web3SDK) AddUserToList( system.Info(sdk.Options.Service, "submitted users.AddUserToList", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return err } @@ -116,7 +117,7 @@ func (sdk *Web3SDK) Agree( system.Debug(sdk.Options.Service, "submitted controller.Agree() tx", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } @@ -143,7 +144,7 @@ func (sdk *Web3SDK) AddResult( system.Debug(sdk.Options.Service, "submitted controller.AddResult", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } @@ -164,7 +165,7 @@ func (sdk *Web3SDK) AcceptResult( system.Debug(sdk.Options.Service, "submitted controller.AcceptResult", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } @@ -185,7 +186,7 @@ func (sdk *Web3SDK) CheckResult( system.Debug(sdk.Options.Service, "submitted controller.CheckResult", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } @@ -206,7 +207,7 @@ func (sdk *Web3SDK) MediationAcceptResult( system.Debug(sdk.Options.Service, "submitted controller.MediationAcceptResult", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } @@ -227,7 +228,7 @@ func (sdk *Web3SDK) MediationRejectResult( system.Debug(sdk.Options.Service, "submitted controller.MediationRejectResult", tx.Hash().String()) system.DumpObjectDebug(tx) } - _, err = sdk.waitTx(tx) + _, err = sdk.WaitTx(context.Background(), tx) if err != nil { return "", err } diff --git a/pkg/web3/sdk.go b/pkg/web3/sdk.go index 765efd95..d097f47c 100644 --- a/pkg/web3/sdk.go +++ b/pkg/web3/sdk.go @@ -217,8 +217,8 @@ func (sdk *Web3SDK) getBlockNumber() (uint64, error) { return strconv.ParseUint(blockNumberHex, 16, 64) } -func (sdk *Web3SDK) waitTx(tx *types.Transaction) (*types.Receipt, error) { - return bind.WaitMined(context.Background(), sdk.Client, tx) +func (sdk *Web3SDK) WaitTx(ctx context.Context, tx *types.Transaction) (*types.Receipt, error) { + return bind.WaitMined(ctx, sdk.Client, tx) } func (sdk *Web3SDK) GetAddress() common.Address { diff --git a/stack b/stack index 764451ba..6dbbf665 100755 --- a/stack +++ b/stack @@ -282,6 +282,16 @@ function solver() { go run . solver "$@" } +# we run the jobcreator as the solver +function jobcreator() { + source .env + eval $(./stack print-local-dev-env) + export WEB3_PRIVATE_KEY=$SOLVER_PRIVATE_KEY + export SERVICE_SOLVER=$SOLVER_ADDRESS + export SERVICE_MEDIATORS=$MEDIATOR_ADDRESS + go run . jobcreator "$@" +} + function resource-provider() { source .env eval $(./stack print-local-dev-env) From bb7ec2c29c420831605ec13538a585dcbd5c69c9 Mon Sep 17 00:00:00 2001 From: Kai Davenport Date: Fri, 27 Oct 2023 17:02:26 +0100 Subject: [PATCH 7/7] on chain jobs being triggered and IPFS results being extracted from onchain client --- hardhat/contracts/ExampleClient.sol | 19 +++++- .../contracts/LilypadOnChainJobCreator.sol | 3 +- hardhat/deploy/006_deploy_jobcreator.ts | 17 +++++ hardhat/scripts/run-cowsay-onchain.ts | 63 +++++++++++++++++++ hardhat/utils/web3.ts | 29 +++++++++ pkg/jobcreator/onchain_jobcreator.go | 53 +++++++++++----- pkg/web3/bindings/jobcreator/jobcreator.go | 46 +++++++------- 7 files changed, 188 insertions(+), 42 deletions(-) create mode 100644 hardhat/scripts/run-cowsay-onchain.ts diff --git a/hardhat/contracts/ExampleClient.sol b/hardhat/contracts/ExampleClient.sol index 2f5604e8..4bddba49 100644 --- a/hardhat/contracts/ExampleClient.sol +++ b/hardhat/contracts/ExampleClient.sol @@ -11,6 +11,13 @@ contract ExampleClient is Ownable, Initializable, ILilypadJobClient { address private jobManagerAddress; ILilypadJobManager private jobManagerContract; + mapping(uint256 => string) private jobResults; + + event JobCreated( + uint256 id, + string message + ); + event JobCompleted( uint256 id, string dealId, @@ -27,16 +34,25 @@ contract ExampleClient is Ownable, Initializable, ILilypadJobClient { jobManagerContract = ILilypadJobManager(jobManagerAddress); } + function getJobResult(uint256 _jobID) public view returns (string memory) { + return jobResults[_jobID]; + } + function runCowsay( string memory message ) public { string[] memory inputs = new string[](1); inputs[0] = string(abi.encodePacked("Message=", message)); - jobManagerContract.runJob( + uint256 id = jobManagerContract.runJob( "cowsay:v0.0.1", inputs, msg.sender ); + + emit JobCreated( + id, + message + ); } function submitResults( @@ -44,6 +60,7 @@ contract ExampleClient is Ownable, Initializable, ILilypadJobClient { string memory dealId, string memory dataId ) public override { + jobResults[id] = dataId; emit JobCompleted( id, dealId, diff --git a/hardhat/contracts/LilypadOnChainJobCreator.sol b/hardhat/contracts/LilypadOnChainJobCreator.sol index 6b2f77c4..74969344 100644 --- a/hardhat/contracts/LilypadOnChainJobCreator.sol +++ b/hardhat/contracts/LilypadOnChainJobCreator.sol @@ -109,10 +109,9 @@ contract LilypadOnChainJobCreator is ILilypadJobManager, ControllerOwnable, Init uint256 id, string memory dealId, string memory dataId - ) public override { + ) public onlyController override { SharedStructs.JobOffer storage offer = jobOffers[id]; require(offer.id != 0, "Job not found"); - require(offer.payee == msg.sender, "Not payee"); ILilypadJobClient(offer.calling_contract).submitResults( id, dealId, diff --git a/hardhat/deploy/006_deploy_jobcreator.ts b/hardhat/deploy/006_deploy_jobcreator.ts index 88843105..32b14e19 100644 --- a/hardhat/deploy/006_deploy_jobcreator.ts +++ b/hardhat/deploy/006_deploy_jobcreator.ts @@ -14,7 +14,14 @@ const deployJobCreator: DeployFunction = async function (hre: HardhatRuntimeEnvi log: true, }) + await deploy("ExampleClient", { + from: admin, + args: [], + log: true, + }) + const tokenContract = await deployments.get('LilypadToken') + const jobCreator = await deployments.get('LilypadOnChainJobCreator') await execute( 'LilypadOnChainJobCreator', @@ -26,6 +33,16 @@ const deployJobCreator: DeployFunction = async function (hre: HardhatRuntimeEnvi tokenContract.address ) + await execute( + 'ExampleClient', + { + from: admin, + log: true, + }, + 'initialize', + jobCreator.address + ) + // we set the controller of the job creator to be the solver // because it will be the one pulling jobs from it await execute( diff --git a/hardhat/scripts/run-cowsay-onchain.ts b/hardhat/scripts/run-cowsay-onchain.ts new file mode 100644 index 00000000..d6ba46fb --- /dev/null +++ b/hardhat/scripts/run-cowsay-onchain.ts @@ -0,0 +1,63 @@ +import bluebird from 'bluebird' +import { + connectToken, + connectJobManager, + connectExampleClient, + getWallet, + getAddress, +} from '../utils/web3' + +async function main() { + // it's annoying to not be able to use argv but hardhat complains about it + const message = process.env.MESSAGE || 'Hello World!' + + const token = await connectToken() + const manager = await connectJobManager() + const client = await connectExampleClient() + + const requiredDeposit = await manager.getRequiredDeposit() + + console.log(`requiredDeposit: ${Number(requiredDeposit)}`) + + const paytokensTx = await token + .connect(getWallet('job_creator')) + .approve(getAddress('solver'), requiredDeposit) + await paytokensTx.wait() + + console.log(`tokens approved: ${paytokensTx.hash}`) + + const runjobTx = await client + .connect(getWallet('job_creator')) + .runCowsay(message) + const receipt = await runjobTx.wait() + if(!receipt) throw new Error(`no receipt`) + + console.log(`submitted job: ${runjobTx.hash}`) + + let jobID = 0 + + receipt.logs.forEach(log => { + const logs = client.interface.parseLog(log as any) + if(!logs) return + jobID = Number(logs.args[0]) + }) + + console.log(`Job ID: ${jobID}`) + console.log(`Waiting for job to be completed...`) + + let result = '' + + while(!result) { + result = await client.getJobResult(jobID) + if(!result) { + await bluebird.delay(1000) + } + } + + console.log(`Job result: ${result}`) +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/hardhat/utils/web3.ts b/hardhat/utils/web3.ts index 830f4a4d..7e73de5d 100644 --- a/hardhat/utils/web3.ts +++ b/hardhat/utils/web3.ts @@ -16,6 +16,8 @@ import { LilypadStorage, LilypadMediationRandom, LilypadController, + LilypadOnChainJobCreator, + ExampleClient, } from '../typechain-types' /* @@ -191,6 +193,33 @@ export async function getPaymentsAddress() { return getContractAddress('LilypadPayments') } + +/* + + job manager + +*/ +export async function connectJobManager() { + return connectContract('LilypadOnChainJobCreator') +} + +export async function getJobManagerAddress() { + return getContractAddress('LilypadOnChainJobCreator') +} + +/* + + example client + +*/ +export async function connectExampleClient() { + return connectContract('ExampleClient') +} + +export async function getExampleClientAddress() { + return getContractAddress('ExampleClient') +} + /* controller diff --git a/pkg/jobcreator/onchain_jobcreator.go b/pkg/jobcreator/onchain_jobcreator.go index 19a6722f..4cfe6b3d 100644 --- a/pkg/jobcreator/onchain_jobcreator.go +++ b/pkg/jobcreator/onchain_jobcreator.go @@ -16,10 +16,11 @@ import ( const JOB_PRICE = 2 type OnChainJobCreator struct { - web3SDK *web3.Web3SDK - web3Events *web3.EventChannels - options JobCreatorOptions - controller *JobCreatorController + web3SDK *web3.Web3SDK + web3Events *web3.EventChannels + options JobCreatorOptions + controller *JobCreatorController + onChainJobIDs map[string]uint64 } func NewOnChainJobCreator( @@ -31,10 +32,11 @@ func NewOnChainJobCreator( return nil, err } jc := &OnChainJobCreator{ - controller: controller, - options: options, - web3SDK: web3SDK, - web3Events: web3.NewEventChannels(), + controller: controller, + options: options, + web3SDK: web3SDK, + web3Events: web3.NewEventChannels(), + onChainJobIDs: map[string]uint64{}, } return jc, nil } @@ -62,7 +64,33 @@ func (jobCreator *OnChainJobCreator) Start(ctx context.Context, cm *system.Clean } jobCreator.controller.SubscribeToJobOfferUpdates(func(evOffer data.JobOfferContainer) { + if evOffer.State != data.GetAgreementStateIndex("ResultsAccepted") { + return + } + + onChainID, ok := jobCreator.onChainJobIDs[evOffer.DealID] + if !ok { + return + } + + result, err := jobCreator.GetResult(evOffer.DealID) + if err != nil { + return + } + fmt.Printf("result --------------------------------------\n") + spew.Dump(result) + spew.Dump(int64(onChainID)) + + tx, err := jobCreator.web3SDK.Contracts.JobCreator.SubmitResults(jobCreator.web3SDK.TransactOpts, big.NewInt(int64(onChainID)), evOffer.DealID, result.DataID) + if err != nil { + return + } + + _, err = jobCreator.web3SDK.WaitTx(ctx, tx) + if err != nil { + return + } }) jobCreator.web3Events.JobCreator.SubscribeJobAdded(func(ev jobcreatorweb3.JobcreatorJobAdded) { @@ -95,12 +123,6 @@ func (jobCreator *OnChainJobCreator) Start(ctx context.Context, cm *system.Clean fmt.Printf("error creating job offer: %s\n", err.Error()) return } - fmt.Printf("options --------------------------------------\n") - spew.Dump(options) - fmt.Printf("ev --------------------------------------\n") - spew.Dump(ev) - fmt.Printf("offer --------------------------------------\n") - spew.Dump(offer) container, err := jobCreator.controller.AddJobOffer(offer) if err != nil { @@ -108,8 +130,7 @@ func (jobCreator *OnChainJobCreator) Start(ctx context.Context, cm *system.Clean return } - fmt.Printf("contianer --------------------------------------\n") - spew.Dump(container) + jobCreator.onChainJobIDs[container.DealID] = ev.Id.Uint64() }) return errorChan diff --git a/pkg/web3/bindings/jobcreator/jobcreator.go b/pkg/web3/bindings/jobcreator/jobcreator.go index a551a82b..19d36cf8 100644 --- a/pkg/web3/bindings/jobcreator/jobcreator.go +++ b/pkg/web3/bindings/jobcreator/jobcreator.go @@ -31,8 +31,8 @@ var ( // JobcreatorMetaData contains all meta data concerning the Jobcreator contract. var JobcreatorMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"calling_contract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"}],\"name\":\"JobAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRequiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextJobID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resultsId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"instructionCount\",\"type\":\"uint256\"}],\"name\":\"resultsAdded\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"runJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setRequiredDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"setTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c8a806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063a470295811610095578063d2a715c011610064578063d2a715c014610223578063f2fde38b14610241578063f3d3d4481461025d578063fb7cfdd714610279576100f3565b8063a4702958146101af578063c4d66de8146101b9578063c57380a2146101d5578063c75555fa146101f3576100f3565b80634c526c76116100d15780634c526c761461014d57806358e56db414610169578063715018a6146101875780638da5cb5b14610191576100f3565b806310fe9ae8146100f757806312b69a8e1461011557806326a4e8d214610131575b5f80fd5b6100ff610297565b60405161010c9190610dc2565b60405180910390f35b61012f600480360381019061012a9190610f5b565b6102bf565b005b61014b6004803603810190610146919061103d565b6102c5565b005b61016760048036038101906101629190611068565b6103df565b005b610171610434565b60405161017e91906110a2565b60405180910390f35b61018f61043d565b005b610199610450565b6040516101a69190610dc2565b60405180910390f35b6101b7610477565b005b6101d360048036038101906101ce919061103d565b61049b565b005b6101dd6105e3565b6040516101ea9190610dc2565b60405180910390f35b61020d6004803603810190610208919061119d565b61060b565b60405161021a91906110a2565b60405180910390f35b61022b610886565b60405161023891906110a2565b60405180910390f35b61025b6004803603810190610256919061103d565b61088c565b005b6102776004803603810190610272919061103d565b61090e565b005b610281610a16565b60405161028e91906110a2565b60405180910390f35b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b50505050565b6102cd610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361033b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103329061127f565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e7610a9a565b505f811161042a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610421906112e7565b60405180910390fd5b8060048190555050565b5f600454905090565b610445610a1c565b61044e5f610bc7565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61047f610a1c565b5f600160146101000a81548160ff021916908315150217905550565b5f600160169054906101000a900460ff161590508080156104cd575060018060159054906101000a900460ff1660ff16105b806104fb57506104dc30610c88565b1580156104fa575060018060159054906101000a900460ff1660ff16145b5b61053a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053190611375565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156105765760018060166101000a81548160ff0219169083151502179055505b61057f826102c5565b5f60058190555080156105df575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105d691906113e1565b60405180910390a15b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60045460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e846106556105e3565b6040518363ffffffff1660e01b81526004016106729291906113fa565b602060405180830381865afa15801561068d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b19190611435565b10156106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e9906114aa565b60405180910390fd5b600160055461070191906114f5565b6005819055506040518060a0016040528060055481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481525060065f60055481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030190816108189190611723565b506080820151816004019080519060200190610835929190610cb1565b509050507faa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a60055433848787604051610872959493929190611955565b60405180910390a160055490509392505050565b60055481565b610894610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f990611a24565b60405180910390fd5b61090b81610bc7565b50565b610916610a1c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90611ab2565b60405180910390fd5b600160149054906101000a900460ff166109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90611b40565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b610a24610caa565b73ffffffffffffffffffffffffffffffffffffffff16610a42610450565b73ffffffffffffffffffffffffffffffffffffffff1614610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f90611ba8565b60405180910390fd5b565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190611ab2565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b6a610caa565b73ffffffffffffffffffffffffffffffffffffffff1614610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790611c36565b60405180910390fd5b6001905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b828054828255905f5260205f20908101928215610cf7579160200282015b82811115610cf6578251829081610ce69190611723565b5091602001919060010190610ccf565b5b509050610d049190610d08565b5090565b5b80821115610d27575f8181610d1e9190610d2b565b50600101610d09565b5090565b508054610d379061155f565b5f825580601f10610d485750610d65565b601f0160209004905f5260205f2090810190610d649190610d68565b5b50565b5b80821115610d7f575f815f905550600101610d69565b5090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dac82610d83565b9050919050565b610dbc81610da2565b82525050565b5f602082019050610dd55f830184610db3565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610e3a82610df4565b810181811067ffffffffffffffff82111715610e5957610e58610e04565b5b80604052505050565b5f610e6b610ddb565b9050610e778282610e31565b919050565b5f67ffffffffffffffff821115610e9657610e95610e04565b5b610e9f82610df4565b9050602081019050919050565b828183375f83830152505050565b5f610ecc610ec784610e7c565b610e62565b905082815260208101848484011115610ee857610ee7610df0565b5b610ef3848285610eac565b509392505050565b5f82601f830112610f0f57610f0e610dec565b5b8135610f1f848260208601610eba565b91505092915050565b5f819050919050565b610f3a81610f28565b8114610f44575f80fd5b50565b5f81359050610f5581610f31565b92915050565b5f805f8060808587031215610f7357610f72610de4565b5b5f85013567ffffffffffffffff811115610f9057610f8f610de8565b5b610f9c87828801610efb565b945050602085013567ffffffffffffffff811115610fbd57610fbc610de8565b5b610fc987828801610efb565b935050604085013567ffffffffffffffff811115610fea57610fe9610de8565b5b610ff687828801610efb565b925050606061100787828801610f47565b91505092959194509250565b61101c81610da2565b8114611026575f80fd5b50565b5f8135905061103781611013565b92915050565b5f6020828403121561105257611051610de4565b5b5f61105f84828501611029565b91505092915050565b5f6020828403121561107d5761107c610de4565b5b5f61108a84828501610f47565b91505092915050565b61109c81610f28565b82525050565b5f6020820190506110b55f830184611093565b92915050565b5f67ffffffffffffffff8211156110d5576110d4610e04565b5b602082029050602081019050919050565b5f80fd5b5f6110fc6110f7846110bb565b610e62565b9050808382526020820190506020840283018581111561111f5761111e6110e6565b5b835b8181101561116657803567ffffffffffffffff81111561114457611143610dec565b5b8086016111518982610efb565b85526020850194505050602081019050611121565b5050509392505050565b5f82601f83011261118457611183610dec565b5b81356111948482602086016110ea565b91505092915050565b5f805f606084860312156111b4576111b3610de4565b5b5f84013567ffffffffffffffff8111156111d1576111d0610de8565b5b6111dd86828701610efb565b935050602084013567ffffffffffffffff8111156111fe576111fd610de8565b5b61120a86828701611170565b925050604061121b86828701611029565b9150509250925092565b5f82825260208201905092915050565b7f546f6b656e2061646472657373000000000000000000000000000000000000005f82015250565b5f611269600d83611225565b915061127482611235565b602082019050919050565b5f6020820190508181035f8301526112968161125d565b9050919050565b7f4d696e206465706f7369740000000000000000000000000000000000000000005f82015250565b5f6112d1600b83611225565b91506112dc8261129d565b602082019050919050565b5f6020820190508181035f8301526112fe816112c5565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f61135f602e83611225565b915061136a82611305565b604082019050919050565b5f6020820190508181035f83015261138c81611353565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f6113cb6113c66113c184611393565b6113a8565b61139c565b9050919050565b6113db816113b1565b82525050565b5f6020820190506113f45f8301846113d2565b92915050565b5f60408201905061140d5f830185610db3565b61141a6020830184610db3565b9392505050565b5f8151905061142f81610f31565b92915050565b5f6020828403121561144a57611449610de4565b5b5f61145784828501611421565b91505092915050565b7f546f6b656e20616c6c6f77616e6365206e6f7420656e6f7567680000000000005f82015250565b5f611494601a83611225565b915061149f82611460565b602082019050919050565b5f6020820190508181035f8301526114c181611488565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114ff82610f28565b915061150a83610f28565b9250828201905080821115611522576115216114c8565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061157657607f821691505b60208210810361158957611588611532565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026115eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826115b0565b6115f586836115b0565b95508019841693508086168417925050509392505050565b5f61162761162261161d84610f28565b6113a8565b610f28565b9050919050565b5f819050919050565b6116408361160d565b61165461164c8261162e565b8484546115bc565b825550505050565b5f90565b61166861165c565b611673818484611637565b505050565b5b818110156116965761168b5f82611660565b600181019050611679565b5050565b601f8211156116db576116ac8161158f565b6116b5846115a1565b810160208510156116c4578190505b6116d86116d0856115a1565b830182611678565b50505b505050565b5f82821c905092915050565b5f6116fb5f19846008026116e0565b1980831691505092915050565b5f61171383836116ec565b9150826002028217905092915050565b61172c82611528565b67ffffffffffffffff81111561174557611744610e04565b5b61174f825461155f565b61175a82828561169a565b5f60209050601f83116001811461178b575f8415611779578287015190505b6117838582611708565b8655506117ea565b601f1984166117998661158f565b5f5b828110156117c05784890151825560018201915060208501945060208101905061179b565b868310156117dd57848901516117d9601f8916826116ec565b8355505b6001600288020188555050505b505050505050565b5f5b8381101561180f5780820151818401526020810190506117f4565b5f8484015250505050565b5f61182482611528565b61182e8185611225565b935061183e8185602086016117f2565b61184781610df4565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f61189582611528565b61189f818561187b565b93506118af8185602086016117f2565b6118b881610df4565b840191505092915050565b5f6118ce838361188b565b905092915050565b5f602082019050919050565b5f6118ec82611852565b6118f6818561185c565b9350836020820285016119088561186c565b805f5b85811015611943578484038952815161192485826118c3565b945061192f836118d6565b925060208a0199505060018101905061190b565b50829750879550505050505092915050565b5f60a0820190506119685f830188611093565b6119756020830187610db3565b6119826040830186610db3565b8181036060830152611994818561181a565b905081810360808301526119a881846118e2565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611a0e602683611225565b9150611a19826119b4565b604082019050919050565b5f6020820190508181035f830152611a3b81611a02565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611a9c603583611225565b9150611aa782611a42565b604082019050919050565b5f6020820190508181035f830152611ac981611a90565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611b2a603983611225565b9150611b3582611ad0565b604082019050919050565b5f6020820190508181035f830152611b5781611b1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611b92602083611225565b9150611b9d82611b5e565b602082019050919050565b5f6020820190508181035f830152611bbf81611b86565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611c20603b83611225565b9150611c2b82611bc6565b604082019050919050565b5f6020820190508181035f830152611c4d81611c14565b905091905056fea2646970667358221220b6ad28bc8d70d5d3d643f60aeb87c204788e7e17b0c66e5f8887f86d692da00664736f6c63430008150033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"calling_contract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"}],\"name\":\"JobAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRequiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextJobID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"module\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"inputs\",\"type\":\"string[]\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"runJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setRequiredDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"setTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"dealId\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"}],\"name\":\"submitResults\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405260018060146101000a81548160ff021916908315150217905550348015610029575f80fd5b5061004661003b61004b60201b60201c565b61005260201b60201c565b610113565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611df4806101205f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063a470295811610095578063d2a715c011610064578063d2a715c014610223578063f2fde38b14610241578063f3d3d4481461025d578063fb7cfdd714610279576100f3565b8063a4702958146101af578063c4d66de8146101b9578063c57380a2146101d5578063c75555fa146101f3576100f3565b806358e56db4116100d157806358e56db41461014d5780636c0f1f581461016b578063715018a6146101875780638da5cb5b14610191576100f3565b806310fe9ae8146100f757806326a4e8d2146101155780634c526c7614610131575b5f80fd5b6100ff610297565b60405161010c9190610eb1565b60405180910390f35b61012f600480360381019061012a9190610f05565b6102bf565b005b61014b60048036038101906101469190610f63565b6103d9565b005b61015561042e565b6040516101629190610f9d565b60405180910390f35b610185600480360381019061018091906110f2565b610437565b005b61018f61052c565b005b61019961053f565b6040516101a69190610eb1565b60405180910390f35b6101b7610566565b005b6101d360048036038101906101ce9190610f05565b61058a565b005b6101dd6106d2565b6040516101ea9190610eb1565b60405180910390f35b61020d6004803603810190610208919061125c565b6106fa565b60405161021a9190610f9d565b60405180910390f35b61022b610975565b6040516102389190610f9d565b60405180910390f35b61025b60048036038101906102569190610f05565b61097b565b005b61027760048036038101906102729190610f05565b6109fd565b005b610281610b05565b60405161028e9190610f9d565b60405180910390f35b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102c7610b0b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c9061133e565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e1610b89565b505f8111610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041b906113a6565b60405180910390fd5b8060048190555050565b5f600454905090565b61043f610b89565b505f60065f8581526020019081526020015f2090505f815f015403610499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104909061140e565b60405180910390fd5b806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c0f1f588585856040518463ffffffff1660e01b81526004016104f993929190611496565b5f604051808303815f87803b158015610510575f80fd5b505af1158015610522573d5f803e3d5ffd5b5050505050505050565b610534610b0b565b61053d5f610cb6565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61056e610b0b565b5f600160146101000a81548160ff021916908315150217905550565b5f600160169054906101000a900460ff161590508080156105bc575060018060159054906101000a900460ff1660ff16105b806105ea57506105cb30610d77565b1580156105e9575060018060159054906101000a900460ff1660ff16145b5b610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062090611549565b60405180910390fd5b60018060156101000a81548160ff021916908360ff16021790555080156106655760018060166101000a81548160ff0219169083151502179055505b61066e826102bf565b5f60058190555080156106ce575f600160166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516106c591906115b5565b60405180910390a15b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60045460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e846107446106d2565b6040518363ffffffff1660e01b81526004016107619291906115ce565b602060405180830381865afa15801561077c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a09190611609565b10156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061167e565b60405180910390fd5b60016005546107f091906116c9565b6005819055506040518060a0016040528060055481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481525060065f60055481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301908161090791906118ed565b506080820151816004019080519060200190610924929190610da0565b509050507faa171d38d08c39622dbd189ddd0a5c0cf3ea10eeda0c7d4c2c75d13fcc4fe14a60055433848787604051610961959493929190611abf565b60405180910390a160055490509392505050565b60055481565b610983610b0b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890611b8e565b60405180910390fd5b6109fa81610cb6565b50565b610a05610b0b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a90611c1c565b60405180910390fd5b600160149054906101000a900460ff16610ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab990611caa565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b610b13610d99565b73ffffffffffffffffffffffffffffffffffffffff16610b3161053f565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e90611d12565b60405180910390fd5b565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090611c1c565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c59610d99565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690611da0565b60405180910390fd5b6001905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f33905090565b828054828255905f5260205f20908101928215610de6579160200282015b82811115610de5578251829081610dd591906118ed565b5091602001919060010190610dbe565b5b509050610df39190610df7565b5090565b5b80821115610e16575f8181610e0d9190610e1a565b50600101610df8565b5090565b508054610e2690611729565b5f825580601f10610e375750610e54565b601f0160209004905f5260205f2090810190610e539190610e57565b5b50565b5b80821115610e6e575f815f905550600101610e58565b5090565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e9b82610e72565b9050919050565b610eab81610e91565b82525050565b5f602082019050610ec45f830184610ea2565b92915050565b5f604051905090565b5f80fd5b5f80fd5b610ee481610e91565b8114610eee575f80fd5b50565b5f81359050610eff81610edb565b92915050565b5f60208284031215610f1a57610f19610ed3565b5b5f610f2784828501610ef1565b91505092915050565b5f819050919050565b610f4281610f30565b8114610f4c575f80fd5b50565b5f81359050610f5d81610f39565b92915050565b5f60208284031215610f7857610f77610ed3565b5b5f610f8584828501610f4f565b91505092915050565b610f9781610f30565b82525050565b5f602082019050610fb05f830184610f8e565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61100482610fbe565b810181811067ffffffffffffffff8211171561102357611022610fce565b5b80604052505050565b5f611035610eca565b90506110418282610ffb565b919050565b5f67ffffffffffffffff8211156110605761105f610fce565b5b61106982610fbe565b9050602081019050919050565b828183375f83830152505050565b5f61109661109184611046565b61102c565b9050828152602081018484840111156110b2576110b1610fba565b5b6110bd848285611076565b509392505050565b5f82601f8301126110d9576110d8610fb6565b5b81356110e9848260208601611084565b91505092915050565b5f805f6060848603121561110957611108610ed3565b5b5f61111686828701610f4f565b935050602084013567ffffffffffffffff81111561113757611136610ed7565b5b611143868287016110c5565b925050604084013567ffffffffffffffff81111561116457611163610ed7565b5b611170868287016110c5565b9150509250925092565b5f67ffffffffffffffff82111561119457611193610fce565b5b602082029050602081019050919050565b5f80fd5b5f6111bb6111b68461117a565b61102c565b905080838252602082019050602084028301858111156111de576111dd6111a5565b5b835b8181101561122557803567ffffffffffffffff81111561120357611202610fb6565b5b80860161121089826110c5565b855260208501945050506020810190506111e0565b5050509392505050565b5f82601f83011261124357611242610fb6565b5b81356112538482602086016111a9565b91505092915050565b5f805f6060848603121561127357611272610ed3565b5b5f84013567ffffffffffffffff8111156112905761128f610ed7565b5b61129c868287016110c5565b935050602084013567ffffffffffffffff8111156112bd576112bc610ed7565b5b6112c98682870161122f565b92505060406112da86828701610ef1565b9150509250925092565b5f82825260208201905092915050565b7f546f6b656e2061646472657373000000000000000000000000000000000000005f82015250565b5f611328600d836112e4565b9150611333826112f4565b602082019050919050565b5f6020820190508181035f8301526113558161131c565b9050919050565b7f4d696e206465706f7369740000000000000000000000000000000000000000005f82015250565b5f611390600b836112e4565b915061139b8261135c565b602082019050919050565b5f6020820190508181035f8301526113bd81611384565b9050919050565b7f4a6f62206e6f7420666f756e64000000000000000000000000000000000000005f82015250565b5f6113f8600d836112e4565b9150611403826113c4565b602082019050919050565b5f6020820190508181035f830152611425816113ec565b9050919050565b5f81519050919050565b5f5b83811015611453578082015181840152602081019050611438565b5f8484015250505050565b5f6114688261142c565b61147281856112e4565b9350611482818560208601611436565b61148b81610fbe565b840191505092915050565b5f6060820190506114a95f830186610f8e565b81810360208301526114bb818561145e565b905081810360408301526114cf818461145e565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c7265615f8201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b5f611533602e836112e4565b915061153e826114d9565b604082019050919050565b5f6020820190508181035f83015261156081611527565b9050919050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61159f61159a61159584611567565b61157c565b611570565b9050919050565b6115af81611585565b82525050565b5f6020820190506115c85f8301846115a6565b92915050565b5f6040820190506115e15f830185610ea2565b6115ee6020830184610ea2565b9392505050565b5f8151905061160381610f39565b92915050565b5f6020828403121561161e5761161d610ed3565b5b5f61162b848285016115f5565b91505092915050565b7f546f6b656e20616c6c6f77616e6365206e6f7420656e6f7567680000000000005f82015250565b5f611668601a836112e4565b915061167382611634565b602082019050919050565b5f6020820190508181035f8301526116958161165c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116d382610f30565b91506116de83610f30565b92508282019050808211156116f6576116f561169c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061174057607f821691505b602082108103611753576117526116fc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026117b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261177a565b6117bf868361177a565b95508019841693508086168417925050509392505050565b5f6117f16117ec6117e784610f30565b61157c565b610f30565b9050919050565b5f819050919050565b61180a836117d7565b61181e611816826117f8565b848454611786565b825550505050565b5f90565b611832611826565b61183d818484611801565b505050565b5b81811015611860576118555f8261182a565b600181019050611843565b5050565b601f8211156118a55761187681611759565b61187f8461176b565b8101602085101561188e578190505b6118a261189a8561176b565b830182611842565b50505b505050565b5f82821c905092915050565b5f6118c55f19846008026118aa565b1980831691505092915050565b5f6118dd83836118b6565b9150826002028217905092915050565b6118f68261142c565b67ffffffffffffffff81111561190f5761190e610fce565b5b6119198254611729565b611924828285611864565b5f60209050601f831160018114611955575f8415611943578287015190505b61194d85826118d2565b8655506119b4565b601f19841661196386611759565b5f5b8281101561198a57848901518255600182019150602085019450602081019050611965565b868310156119a757848901516119a3601f8916826118b6565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6119ff8261142c565b611a0981856119e5565b9350611a19818560208601611436565b611a2281610fbe565b840191505092915050565b5f611a3883836119f5565b905092915050565b5f602082019050919050565b5f611a56826119bc565b611a6081856119c6565b935083602082028501611a72856119d6565b805f5b85811015611aad5784840389528151611a8e8582611a2d565b9450611a9983611a40565b925060208a01995050600181019050611a75565b50829750879550505050505092915050565b5f60a082019050611ad25f830188610f8e565b611adf6020830187610ea2565b611aec6040830186610ea2565b8181036060830152611afe818561145e565b90508181036080830152611b128184611a4c565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611b786026836112e4565b9150611b8382611b1e565b604082019050919050565b5f6020820190508181035f830152611ba581611b6c565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611c066035836112e4565b9150611c1182611bac565b604082019050919050565b5f6020820190508181035f830152611c3381611bfa565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611c946039836112e4565b9150611c9f82611c3a565b604082019050919050565b5f6020820190508181035f830152611cc181611c88565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611cfc6020836112e4565b9150611d0782611cc8565b602082019050919050565b5f6020820190508181035f830152611d2981611cf0565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611d8a603b836112e4565b9150611d9582611d30565b604082019050919050565b5f6020820190508181035f830152611db781611d7e565b905091905056fea26469706673582212203e341c053abfe273e9d64859e2ba238de689eacfb737716ae38d9432b5366e2664736f6c63430008150033", } // JobcreatorABI is the input ABI used to generate the binding from. @@ -451,27 +451,6 @@ func (_Jobcreator *JobcreatorTransactorSession) RenounceOwnership() (*types.Tran return _Jobcreator.Contract.RenounceOwnership(&_Jobcreator.TransactOpts) } -// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. -// -// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() -func (_Jobcreator *JobcreatorTransactor) ResultsAdded(opts *bind.TransactOpts, dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Jobcreator.contract.Transact(opts, "resultsAdded", dealId, resultsId, dataId, instructionCount) -} - -// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. -// -// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() -func (_Jobcreator *JobcreatorSession) ResultsAdded(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Jobcreator.Contract.ResultsAdded(&_Jobcreator.TransactOpts, dealId, resultsId, dataId, instructionCount) -} - -// ResultsAdded is a paid mutator transaction binding the contract method 0x12b69a8e. -// -// Solidity: function resultsAdded(string dealId, string resultsId, string dataId, uint256 instructionCount) returns() -func (_Jobcreator *JobcreatorTransactorSession) ResultsAdded(dealId string, resultsId string, dataId string, instructionCount *big.Int) (*types.Transaction, error) { - return _Jobcreator.Contract.ResultsAdded(&_Jobcreator.TransactOpts, dealId, resultsId, dataId, instructionCount) -} - // RunJob is a paid mutator transaction binding the contract method 0xc75555fa. // // Solidity: function runJob(string module, string[] inputs, address payee) returns(uint256) @@ -556,6 +535,27 @@ func (_Jobcreator *JobcreatorTransactorSession) SetTokenAddress(_tokenAddress co return _Jobcreator.Contract.SetTokenAddress(&_Jobcreator.TransactOpts, _tokenAddress) } +// SubmitResults is a paid mutator transaction binding the contract method 0x6c0f1f58. +// +// Solidity: function submitResults(uint256 id, string dealId, string dataId) returns() +func (_Jobcreator *JobcreatorTransactor) SubmitResults(opts *bind.TransactOpts, id *big.Int, dealId string, dataId string) (*types.Transaction, error) { + return _Jobcreator.contract.Transact(opts, "submitResults", id, dealId, dataId) +} + +// SubmitResults is a paid mutator transaction binding the contract method 0x6c0f1f58. +// +// Solidity: function submitResults(uint256 id, string dealId, string dataId) returns() +func (_Jobcreator *JobcreatorSession) SubmitResults(id *big.Int, dealId string, dataId string) (*types.Transaction, error) { + return _Jobcreator.Contract.SubmitResults(&_Jobcreator.TransactOpts, id, dealId, dataId) +} + +// SubmitResults is a paid mutator transaction binding the contract method 0x6c0f1f58. +// +// Solidity: function submitResults(uint256 id, string dealId, string dataId) returns() +func (_Jobcreator *JobcreatorTransactorSession) SubmitResults(id *big.Int, dealId string, dataId string) (*types.Transaction, error) { + return _Jobcreator.Contract.SubmitResults(&_Jobcreator.TransactOpts, id, dealId, dataId) +} + // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. // // Solidity: function transferOwnership(address newOwner) returns()