From 041580f79dc85cc84cdfb10dba2c8ee6914066bd Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Sat, 23 Mar 2024 15:11:56 -0500 Subject: [PATCH] Shorten work contract validation pool duration to 60s --- client/src/assets/Onboarding.json | 4 +- client/src/assets/Work1.json | 4 +- client/src/contract-addresses.json | 10 ++--- ethereum/contract-addresses.json | 10 ++--- ethereum/contracts/WorkContract.sol | 2 +- ethereum/package.json | 5 ++- ethereum/scripts/deploy-onboarding.js | 10 +++++ ethereum/scripts/deploy-work-contracts.js | 11 +++++ ethereum/scripts/deploy-work1.js | 10 +++++ ethereum/scripts/deploy.js | 42 +++--------------- ethereum/scripts/util/deploy-contract.js | 25 +++++++++++ ethereum/scripts/util/deploy-work-contract.js | 17 ++++++++ .../scripts/util/write-contract-addresses.js | 11 +++++ ethereum/scripts/verify.js | 43 +++++++++++++++++++ 14 files changed, 151 insertions(+), 53 deletions(-) create mode 100644 ethereum/scripts/deploy-onboarding.js create mode 100644 ethereum/scripts/deploy-work-contracts.js create mode 100644 ethereum/scripts/deploy-work1.js create mode 100644 ethereum/scripts/util/deploy-contract.js create mode 100644 ethereum/scripts/util/deploy-work-contract.js create mode 100644 ethereum/scripts/util/write-contract-addresses.js create mode 100644 ethereum/scripts/verify.js diff --git a/client/src/assets/Onboarding.json b/client/src/assets/Onboarding.json index 4d5d5af..76923fc 100644 --- a/client/src/assets/Onboarding.json +++ b/client/src/assets/Onboarding.json @@ -332,8 +332,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002a8b38038062002a8b833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a0516128b5620001d6600039600081816102c50152610e3501526000818161085201528181610bb001528181610cb201528181610d9901528181611095015281816111d6015261129d01526128b56000f3fe6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115bc565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea919061169d565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116f0565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175f565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061177a565b6106a1565b005b34801561017a57600080fd5b506101956004803603810190610190919061177a565b61092e565b6040516101a897969594939291906118d8565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190611981565b610aba565b005b3480156101e657600080fd5b506101ef610e33565b6040516101fc919061175f565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119c1565b610e57565b005b34801561023a57600080fd5b5061024361101d565b604051610250919061175f565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b919061177a565b611023565b604051610291959493929190611a01565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aaa565b611093565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b56565b60405180910390fd5b60006003600081548092919061033b90611ba5565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad8261135a565b816003018190555083838260040191826103c8929190611e33565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4f565b60405180910390fd5b60006001600081548092919061042790611ba5565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6f565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175f565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b6565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b6565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611fef565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612081565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b6565b5b0217905550838383600501918261065c929190611e33565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175f565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090612113565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a5565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890612211565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906122a3565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122c3565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190612301565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175f565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c56565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c56565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c56565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c56565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b6565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b6565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061237a565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b6565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241e565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c739190612463565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca6929190612490565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e8565b8660010154610d0c9190612519565b846201518060018b604051602001610d24919061175f565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d5294939291906125a2565b60206040518083038185885af1158015610d70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d959190612463565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df9939291906125ee565b600060405180830381600087803b158015610e1357600080fd5b505af1158015610e27573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690612697565b60405180910390fd5b8060030160019054906101000a900460ff1615610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612211565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906122a3565b60405180910390fd5b8060020154421115610fc8578142610fbb9190611f6f565b8160020181905550610fe1565b818160020154610fd89190611f6f565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051611010919061175f565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890612729565b60405180910390fd5b60008282810190611132919061177a565b90506000600260008381526020019081526020016000209050846111d2578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119f91906124e8565b9081150290604051600060405180830381858888f193505050501580156111ca573d6000803e3d6000fd5b505050611355565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125692919061241e565b6020604051808303816000875af1158015611275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112999190612463565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e891906124e8565b836201518060006040518563ffffffff1660e01b815260040161130d9392919061276f565b60206040518083038185885af115801561132b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113509190612463565b505050505b505050565b60006113646113d8565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113ca9291906127b9565b60405180910390a150919050565b60008060005b60015481101561145c5760008082815260200190815260200160002060030160009054906101000a900460ff1661144f5760008082815260200190815260200160002060020154421161144f57600080828152602001908152602001600020600101548261144c9190611f6f565b91505b80806001019150506113de565b50600081116114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061282e565b60405180910390fd5b600081446114ae919061284e565b9050600080600090505b6001548110156115465760008082815260200190815260200160002060030160009054906101000a900460ff16611539576000808281526020019081526020016000206002015442116115395760008082815260200190815260200160002060010154826115269190611f6f565b91508282111561153857809450611546565b5b80806001019150506114b8565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157c5761157b611557565b5b8235905067ffffffffffffffff8111156115995761159861155c565b5b6020830191508360018202830111156115b5576115b4611561565b5b9250929050565b600080602083850312156115d3576115d261154d565b5b600083013567ffffffffffffffff8111156115f1576115f0611552565b5b6115fd85828601611566565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163482611609565b9050919050565b61164481611629565b811461164f57600080fd5b50565b6000813590506116618161163b565b92915050565b6000819050919050565b61167a81611667565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b6000806000606084860312156116b6576116b561154d565b5b60006116c486828701611652565b93505060206116d586828701611688565b92505060406116e686828701611688565b9150509250925092565b6000806000604084860312156117095761170861154d565b5b600061171786828701611688565b935050602084013567ffffffffffffffff81111561173857611737611552565b5b61174486828701611566565b92509250509250925092565b61175981611667565b82525050565b60006020820190506117746000830184611750565b92915050565b6000602082840312156117905761178f61154d565b5b600061179e84828501611688565b91505092915050565b6117b081611629565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f6576117f56117b6565b5b50565b6000819050611807826117e5565b919050565b6000611817826117f9565b9050919050565b6118278161180c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186757808201518184015260208101905061184c565b60008484015250505050565b6000601f19601f8301169050919050565b600061188f8261182d565b6118998185611838565b93506118a9818560208601611849565b6118b281611873565b840191505092915050565b60008115159050919050565b6118d2816118bd565b82525050565b600060e0820190506118ed600083018a6117a7565b6118fa6020830189611750565b611907604083018861181e565b6119146060830187611750565b81810360808301526119268186611884565b905081810360a083015261193a8185611884565b905061194960c08301846118c9565b98975050505050505050565b61195e816118bd565b811461196957600080fd5b50565b60008135905061197b81611955565b92915050565b600080604083850312156119985761199761154d565b5b60006119a685828601611688565b92505060206119b78582860161196c565b9150509250929050565b600080604083850312156119d8576119d761154d565b5b60006119e685828601611688565b92505060206119f785828601611688565b9150509250929050565b600060a082019050611a1660008301886117a7565b611a236020830187611750565b611a306040830186611750565b611a3d60608301856118c9565b611a4a60808301846118c9565b9695505050505050565b60008083601f840112611a6a57611a69611557565b5b8235905067ffffffffffffffff811115611a8757611a8661155c565b5b602083019150836001820283011115611aa357611aa2611561565b5b9250929050565b600080600060408486031215611ac357611ac261154d565b5b6000611ad18682870161196c565b935050602084013567ffffffffffffffff811115611af257611af1611552565b5b611afe86828701611a54565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b40601083611838565b9150611b4b82611b0a565b602082019050919050565b60006020820190508181036000830152611b6f81611b33565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb082611667565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611be257611be1611b76565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6e57607f821691505b602082108103611c8157611c80611c27565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611cac565b611cf38683611cac565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d30611d2b611d2684611667565b611d0b565b611667565b9050919050565b6000819050919050565b611d4a83611d15565b611d5e611d5682611d37565b848454611cb9565b825550505050565b600090565b611d73611d66565b611d7e818484611d41565b505050565b5b81811015611da257611d97600082611d6b565b600181019050611d84565b5050565b601f821115611de757611db881611c87565b611dc184611c9c565b81016020851015611dd0578190505b611de4611ddc85611c9c565b830182611d83565b50505b505050565b600082821c905092915050565b6000611e0a60001984600802611dec565b1980831691505092915050565b6000611e238383611df9565b9150826002028217905092915050565b611e3d8383611bed565b67ffffffffffffffff811115611e5657611e55611bf8565b5b611e608254611c56565b611e6b828285611da6565b6000601f831160018114611e9a5760008415611e88578287013590505b611e928582611e17565b865550611efa565b601f198416611ea886611c87565b60005b82811015611ed057848901358255600182019150602085019450602081019050611eab565b86831015611eed5784890135611ee9601f891682611df9565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f39601183611838565b9150611f4482611f03565b602082019050919050565b60006020820190508181036000830152611f6881611f2c565b9050919050565b6000611f7a82611667565b9150611f8583611667565b9250828201905080821115611f9d57611f9c611b76565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd9601883611838565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061206b603a83611838565b91506120768261200f565b604082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120fd603483611838565b9150612108826120a1565b604082019050919050565b6000602082019050818103600083015261212c816120f0565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218f602283611838565b915061219a82612133565b604082019050919050565b600060208201905081810360008301526121be81612182565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121fb602083611838565b9150612206826121c5565b602082019050919050565b6000602082019050818103600083015261222a816121ee565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061228d602483611838565b915061229882612231565b604082019050919050565b600060208201905081810360008301526122bc81612280565b9050919050565b60006040820190506122d860008301856117a7565b6122e56020830184611750565b9392505050565b6000815190506122fb81611955565b92915050565b6000602082840312156123175761231661154d565b5b6000612325848285016122ec565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612364602083611838565b915061236f8261232e565b602082019050919050565b6000602082019050818103600083015261239381612357565b9050919050565b600081546123a781611c56565b6123b18186611838565b945060018216600081146123cc57600181146123e257612415565b60ff198316865281151560200286019350612415565b6123eb85611c87565b60005b8381101561240d578154818901526001820191506020810190506123ee565b808801955050505b50505092915050565b600060408201905061243360008301856117a7565b8181036020830152612445818461239a565b90509392505050565b60008151905061245d81611671565b92915050565b6000602082840312156124795761247861154d565b5b60006124878482850161244e565b91505092915050565b60006040820190506124a56000830185611750565b6124b260208301846118c9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124f382611667565b91506124fe83611667565b92508261250e5761250d6124b9565b5b828204905092915050565b600061252482611667565b915061252f83611667565b925082820390508181111561254757612546611b76565b5b92915050565b600081519050919050565b600082825260208201905092915050565b60006125748261254d565b61257e8185612558565b935061258e818560208601611849565b61259781611873565b840191505092915050565b60006080820190506125b76000830187611750565b6125c46020830186611750565b6125d160408301856118c9565b81810360608301526125e38184612569565b905095945050505050565b60006060820190506126036000830186611750565b6126106020830185611750565b61261d60408301846118c9565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612681603383611838565b915061268c82612625565b604082019050919050565b600060208201905081810360008301526126b081612674565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612713603183611838565b915061271e826126b7565b604082019050919050565b6000602082019050818103600083015261274281612706565b9050919050565b50565b6000612759600083612558565b915061276482612749565b600082019050919050565b60006080820190506127846000830186611750565b6127916020830185611750565b61279e60408301846118c9565b81810360608301526127af8161274c565b9050949350505050565b60006040820190506127ce6000830185611750565b6127db6020830184611750565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612818601a83611838565b9150612823826127e2565b602082019050919050565b600060208201905081810360008301526128478161280b565b9050919050565b600061285982611667565b915061286483611667565b925082612874576128736124b9565b5b82820690509291505056fea26469706673582212201b0f665a69ccb6a1086313e6ffec118e3e130a6a3743ab9fba0c11c86b4df80164736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115bc565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea919061169d565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116f0565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175f565b60405180910390f35b34801561015157600080fd5b5061016c6004803603810190610167919061177a565b6106a1565b005b34801561017a57600080fd5b506101956004803603810190610190919061177a565b61092e565b6040516101a897969594939291906118d8565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190611981565b610aba565b005b3480156101e657600080fd5b506101ef610e33565b6040516101fc919061175f565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119c1565b610e57565b005b34801561023a57600080fd5b5061024361101d565b604051610250919061175f565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b919061177a565b611023565b604051610291959493929190611a01565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aaa565b611093565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b56565b60405180910390fd5b60006003600081548092919061033b90611ba5565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad8261135a565b816003018190555083838260040191826103c8929190611e33565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4f565b60405180910390fd5b60006001600081548092919061042790611ba5565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6f565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175f565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b6565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b6565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611fef565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061390612081565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b6565b5b0217905550838383600501918261065c929190611e33565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175f565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090612113565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a5565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890612211565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a906122a3565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122c3565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190612301565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175f565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c56565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c56565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c56565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c56565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b6565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b6565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b409061237a565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b6565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241e565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c739190612463565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca6929190612490565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e8565b8660010154610d0c9190612519565b846201518060018b604051602001610d24919061175f565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d5294939291906125a2565b60206040518083038185885af1158015610d70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d959190612463565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df9939291906125ee565b600060405180830381600087803b158015610e1357600080fd5b505af1158015610e27573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690612697565b60405180910390fd5b8060030160019054906101000a900460ff1615610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890612211565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906122a3565b60405180910390fd5b8060020154421115610fc8578142610fbb9190611f6f565b8160020181905550610fe1565b818160020154610fd89190611f6f565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051611010919061175f565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111890612729565b60405180910390fd5b60008282810190611132919061177a565b90506000600260008381526020019081526020016000209050846111d2578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119f91906124e8565b9081150290604051600060405180830381858888f193505050501580156111ca573d6000803e3d6000fd5b505050611355565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125692919061241e565b6020604051808303816000875af1158015611275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112999190612463565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e891906124e8565b836201518060006040518563ffffffff1660e01b815260040161130d9392919061276f565b60206040518083038185885af115801561132b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113509190612463565b505050505b505050565b60006113646113d8565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113ca9291906127b9565b60405180910390a150919050565b60008060005b60015481101561145c5760008082815260200190815260200160002060030160009054906101000a900460ff1661144f5760008082815260200190815260200160002060020154421161144f57600080828152602001908152602001600020600101548261144c9190611f6f565b91505b80806001019150506113de565b50600081116114a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114979061282e565b60405180910390fd5b600081446114ae919061284e565b9050600080600090505b6001548110156115465760008082815260200190815260200160002060030160009054906101000a900460ff16611539576000808281526020019081526020016000206002015442116115395760008082815260200190815260200160002060010154826115269190611f6f565b91508282111561153857809450611546565b5b80806001019150506114b8565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157c5761157b611557565b5b8235905067ffffffffffffffff8111156115995761159861155c565b5b6020830191508360018202830111156115b5576115b4611561565b5b9250929050565b600080602083850312156115d3576115d261154d565b5b600083013567ffffffffffffffff8111156115f1576115f0611552565b5b6115fd85828601611566565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163482611609565b9050919050565b61164481611629565b811461164f57600080fd5b50565b6000813590506116618161163b565b92915050565b6000819050919050565b61167a81611667565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b6000806000606084860312156116b6576116b561154d565b5b60006116c486828701611652565b93505060206116d586828701611688565b92505060406116e686828701611688565b9150509250925092565b6000806000604084860312156117095761170861154d565b5b600061171786828701611688565b935050602084013567ffffffffffffffff81111561173857611737611552565b5b61174486828701611566565b92509250509250925092565b61175981611667565b82525050565b60006020820190506117746000830184611750565b92915050565b6000602082840312156117905761178f61154d565b5b600061179e84828501611688565b91505092915050565b6117b081611629565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f6576117f56117b6565b5b50565b6000819050611807826117e5565b919050565b6000611817826117f9565b9050919050565b6118278161180c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561186757808201518184015260208101905061184c565b60008484015250505050565b6000601f19601f8301169050919050565b600061188f8261182d565b6118998185611838565b93506118a9818560208601611849565b6118b281611873565b840191505092915050565b60008115159050919050565b6118d2816118bd565b82525050565b600060e0820190506118ed600083018a6117a7565b6118fa6020830189611750565b611907604083018861181e565b6119146060830187611750565b81810360808301526119268186611884565b905081810360a083015261193a8185611884565b905061194960c08301846118c9565b98975050505050505050565b61195e816118bd565b811461196957600080fd5b50565b60008135905061197b81611955565b92915050565b600080604083850312156119985761199761154d565b5b60006119a685828601611688565b92505060206119b78582860161196c565b9150509250929050565b600080604083850312156119d8576119d761154d565b5b60006119e685828601611688565b92505060206119f785828601611688565b9150509250929050565b600060a082019050611a1660008301886117a7565b611a236020830187611750565b611a306040830186611750565b611a3d60608301856118c9565b611a4a60808301846118c9565b9695505050505050565b60008083601f840112611a6a57611a69611557565b5b8235905067ffffffffffffffff811115611a8757611a8661155c565b5b602083019150836001820283011115611aa357611aa2611561565b5b9250929050565b600080600060408486031215611ac357611ac261154d565b5b6000611ad18682870161196c565b935050602084013567ffffffffffffffff811115611af257611af1611552565b5b611afe86828701611a54565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b40601083611838565b9150611b4b82611b0a565b602082019050919050565b60006020820190508181036000830152611b6f81611b33565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bb082611667565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611be257611be1611b76565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6e57607f821691505b602082108103611c8157611c80611c27565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611cac565b611cf38683611cac565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d30611d2b611d2684611667565b611d0b565b611667565b9050919050565b6000819050919050565b611d4a83611d15565b611d5e611d5682611d37565b848454611cb9565b825550505050565b600090565b611d73611d66565b611d7e818484611d41565b505050565b5b81811015611da257611d97600082611d6b565b600181019050611d84565b5050565b601f821115611de757611db881611c87565b611dc184611c9c565b81016020851015611dd0578190505b611de4611ddc85611c9c565b830182611d83565b50505b505050565b600082821c905092915050565b6000611e0a60001984600802611dec565b1980831691505092915050565b6000611e238383611df9565b9150826002028217905092915050565b611e3d8383611bed565b67ffffffffffffffff811115611e5657611e55611bf8565b5b611e608254611c56565b611e6b828285611da6565b6000601f831160018114611e9a5760008415611e88578287013590505b611e928582611e17565b865550611efa565b601f198416611ea886611c87565b60005b82811015611ed057848901358255600182019150602085019450602081019050611eab565b86831015611eed5784890135611ee9601f891682611df9565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f39601183611838565b9150611f4482611f03565b602082019050919050565b60006020820190508181036000830152611f6881611f2c565b9050919050565b6000611f7a82611667565b9150611f8583611667565b9250828201905080821115611f9d57611f9c611b76565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd9601883611838565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061206b603a83611838565b91506120768261200f565b604082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120fd603483611838565b9150612108826120a1565b604082019050919050565b6000602082019050818103600083015261212c816120f0565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218f602283611838565b915061219a82612133565b604082019050919050565b600060208201905081810360008301526121be81612182565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121fb602083611838565b9150612206826121c5565b602082019050919050565b6000602082019050818103600083015261222a816121ee565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061228d602483611838565b915061229882612231565b604082019050919050565b600060208201905081810360008301526122bc81612280565b9050919050565b60006040820190506122d860008301856117a7565b6122e56020830184611750565b9392505050565b6000815190506122fb81611955565b92915050565b6000602082840312156123175761231661154d565b5b6000612325848285016122ec565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612364602083611838565b915061236f8261232e565b602082019050919050565b6000602082019050818103600083015261239381612357565b9050919050565b600081546123a781611c56565b6123b18186611838565b945060018216600081146123cc57600181146123e257612415565b60ff198316865281151560200286019350612415565b6123eb85611c87565b60005b8381101561240d578154818901526001820191506020810190506123ee565b808801955050505b50505092915050565b600060408201905061243360008301856117a7565b8181036020830152612445818461239a565b90509392505050565b60008151905061245d81611671565b92915050565b6000602082840312156124795761247861154d565b5b60006124878482850161244e565b91505092915050565b60006040820190506124a56000830185611750565b6124b260208301846118c9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124f382611667565b91506124fe83611667565b92508261250e5761250d6124b9565b5b828204905092915050565b600061252482611667565b915061252f83611667565b925082820390508181111561254757612546611b76565b5b92915050565b600081519050919050565b600082825260208201905092915050565b60006125748261254d565b61257e8185612558565b935061258e818560208601611849565b61259781611873565b840191505092915050565b60006080820190506125b76000830187611750565b6125c46020830186611750565b6125d160408301856118c9565b81810360608301526125e38184612569565b905095945050505050565b60006060820190506126036000830186611750565b6126106020830185611750565b61261d60408301846118c9565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612681603383611838565b915061268c82612625565b604082019050919050565b600060208201905081810360008301526126b081612674565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612713603183611838565b915061271e826126b7565b604082019050919050565b6000602082019050818103600083015261274281612706565b9050919050565b50565b6000612759600083612558565b915061276482612749565b600082019050919050565b60006080820190506127846000830186611750565b6127916020830185611750565b61279e60408301846118c9565b81810360608301526127af8161274c565b9050949350505050565b60006040820190506127ce6000830185611750565b6127db6020830184611750565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612818601a83611838565b9150612823826127e2565b602082019050919050565b600060208201905081810360008301526128478161280b565b9050919050565b600061285982611667565b915061286483611667565b925082612874576128736124b9565b5b82820690509291505056fea26469706673582212201b0f665a69ccb6a1086313e6ffec118e3e130a6a3743ab9fba0c11c86b4df80164736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002a8738038062002a87833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a0516128b1620001d6600039600081816102c50152610e3301526000818161085201528181610bb001528181610cb201528181610d9701528181611093015281816111d4015261129b01526128b16000f3fe6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115b8565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611699565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116ec565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175b565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611776565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611776565b61092e565b6040516101a897969594939291906118d4565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d3919061197d565b610aba565b005b3480156101e657600080fd5b506101ef610e31565b6040516101fc919061175b565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119bd565b610e55565b005b34801561023a57600080fd5b5061024361101b565b604051610250919061175b565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611776565b611021565b6040516102919594939291906119fd565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aa6565b611091565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b52565b60405180910390fd5b60006003600081548092919061033b90611ba1565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611356565b816003018190555083838260040191826103c8929190611e2f565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4b565b60405180910390fd5b60006001600081548092919061042790611ba1565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6b565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175b565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b2565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b2565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611feb565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106139061207d565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b2565b5b0217905550838383600501918261065c929190611e2f565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175b565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061210f565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a1565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061229f565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122bf565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906122fd565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175b565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c52565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c52565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b2565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b2565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612376565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b2565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241a565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061245f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061248c565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e4565b8660010154610d0c9190612515565b84603c60018b604051602001610d22919061175b565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d50949392919061259e565b60206040518083038185885af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d93919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df7939291906125ea565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612693565b60405180910390fd5b8060030160019054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f469061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f989061229f565b60405180910390fd5b8060020154421115610fc6578142610fb99190611f6b565b8160020181905550610fdf565b818160020154610fd69190611f6b565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161100e919061175b565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612725565b60405180910390fd5b600082828101906111309190611776565b90506000600260008381526020019081526020016000209050846111d0578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119d91906124e4565b9081150290604051600060405180830381858888f193505050501580156111c8573d6000803e3d6000fd5b505050611351565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125492919061241a565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611297919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e691906124e4565b83603c60006040518563ffffffff1660e01b81526004016113099392919061276b565b60206040518083038185885af1158015611327573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134c919061245f565b505050505b505050565b60006113606113d4565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113c69291906127b5565b60405180910390a150919050565b60008060005b6001548110156114585760008082815260200190815260200160002060030160009054906101000a900460ff1661144b5760008082815260200190815260200160002060020154421161144b5760008082815260200190815260200160002060010154826114489190611f6b565b91505b80806001019150506113da565b506000811161149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061282a565b60405180910390fd5b600081446114aa919061284a565b9050600080600090505b6001548110156115425760008082815260200190815260200160002060030160009054906101000a900460ff16611535576000808281526020019081526020016000206002015442116115355760008082815260200190815260200160002060010154826115229190611f6b565b91508282111561153457809450611542565b5b80806001019150506114b4565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157857611577611553565b5b8235905067ffffffffffffffff81111561159557611594611558565b5b6020830191508360018202830111156115b1576115b061155d565b5b9250929050565b600080602083850312156115cf576115ce611549565b5b600083013567ffffffffffffffff8111156115ed576115ec61154e565b5b6115f985828601611562565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163082611605565b9050919050565b61164081611625565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b6000819050919050565b61167681611663565b811461168157600080fd5b50565b6000813590506116938161166d565b92915050565b6000806000606084860312156116b2576116b1611549565b5b60006116c08682870161164e565b93505060206116d186828701611684565b92505060406116e286828701611684565b9150509250925092565b60008060006040848603121561170557611704611549565b5b600061171386828701611684565b935050602084013567ffffffffffffffff8111156117345761173361154e565b5b61174086828701611562565b92509250509250925092565b61175581611663565b82525050565b6000602082019050611770600083018461174c565b92915050565b60006020828403121561178c5761178b611549565b5b600061179a84828501611684565b91505092915050565b6117ac81611625565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f2576117f16117b2565b5b50565b6000819050611803826117e1565b919050565b6000611813826117f5565b9050919050565b61182381611808565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611863578082015181840152602081019050611848565b60008484015250505050565b6000601f19601f8301169050919050565b600061188b82611829565b6118958185611834565b93506118a5818560208601611845565b6118ae8161186f565b840191505092915050565b60008115159050919050565b6118ce816118b9565b82525050565b600060e0820190506118e9600083018a6117a3565b6118f6602083018961174c565b611903604083018861181a565b611910606083018761174c565b81810360808301526119228186611880565b905081810360a08301526119368185611880565b905061194560c08301846118c5565b98975050505050505050565b61195a816118b9565b811461196557600080fd5b50565b60008135905061197781611951565b92915050565b6000806040838503121561199457611993611549565b5b60006119a285828601611684565b92505060206119b385828601611968565b9150509250929050565b600080604083850312156119d4576119d3611549565b5b60006119e285828601611684565b92505060206119f385828601611684565b9150509250929050565b600060a082019050611a1260008301886117a3565b611a1f602083018761174c565b611a2c604083018661174c565b611a3960608301856118c5565b611a4660808301846118c5565b9695505050505050565b60008083601f840112611a6657611a65611553565b5b8235905067ffffffffffffffff811115611a8357611a82611558565b5b602083019150836001820283011115611a9f57611a9e61155d565b5b9250929050565b600080600060408486031215611abf57611abe611549565b5b6000611acd86828701611968565b935050602084013567ffffffffffffffff811115611aee57611aed61154e565b5b611afa86828701611a50565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b3c601083611834565b9150611b4782611b06565b602082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bac82611663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bde57611bdd611b72565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6a57607f821691505b602082108103611c7d57611c7c611c23565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ca8565b611cef8683611ca8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d2c611d27611d2284611663565b611d07565b611663565b9050919050565b6000819050919050565b611d4683611d11565b611d5a611d5282611d33565b848454611cb5565b825550505050565b600090565b611d6f611d62565b611d7a818484611d3d565b505050565b5b81811015611d9e57611d93600082611d67565b600181019050611d80565b5050565b601f821115611de357611db481611c83565b611dbd84611c98565b81016020851015611dcc578190505b611de0611dd885611c98565b830182611d7f565b50505b505050565b600082821c905092915050565b6000611e0660001984600802611de8565b1980831691505092915050565b6000611e1f8383611df5565b9150826002028217905092915050565b611e398383611be9565b67ffffffffffffffff811115611e5257611e51611bf4565b5b611e5c8254611c52565b611e67828285611da2565b6000601f831160018114611e965760008415611e84578287013590505b611e8e8582611e13565b865550611ef6565b601f198416611ea486611c83565b60005b82811015611ecc57848901358255600182019150602085019450602081019050611ea7565b86831015611ee95784890135611ee5601f891682611df5565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f35601183611834565b9150611f4082611eff565b602082019050919050565b60006020820190508181036000830152611f6481611f28565b9050919050565b6000611f7682611663565b9150611f8183611663565b9250828201905080821115611f9957611f98611b72565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd5601883611834565b9150611fe082611f9f565b602082019050919050565b6000602082019050818103600083015261200481611fc8565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612067603a83611834565b91506120728261200b565b604082019050919050565b600060208201905081810360008301526120968161205a565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120f9603483611834565b91506121048261209d565b604082019050919050565b60006020820190508181036000830152612128816120ec565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218b602283611834565b91506121968261212f565b604082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121f7602083611834565b9150612202826121c1565b602082019050919050565b60006020820190508181036000830152612226816121ea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612289602483611834565b91506122948261222d565b604082019050919050565b600060208201905081810360008301526122b88161227c565b9050919050565b60006040820190506122d460008301856117a3565b6122e1602083018461174c565b9392505050565b6000815190506122f781611951565b92915050565b60006020828403121561231357612312611549565b5b6000612321848285016122e8565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612360602083611834565b915061236b8261232a565b602082019050919050565b6000602082019050818103600083015261238f81612353565b9050919050565b600081546123a381611c52565b6123ad8186611834565b945060018216600081146123c857600181146123de57612411565b60ff198316865281151560200286019350612411565b6123e785611c83565b60005b83811015612409578154818901526001820191506020810190506123ea565b808801955050505b50505092915050565b600060408201905061242f60008301856117a3565b81810360208301526124418184612396565b90509392505050565b6000815190506124598161166d565b92915050565b60006020828403121561247557612474611549565b5b60006124838482850161244a565b91505092915050565b60006040820190506124a1600083018561174c565b6124ae60208301846118c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124ef82611663565b91506124fa83611663565b92508261250a576125096124b5565b5b828204905092915050565b600061252082611663565b915061252b83611663565b925082820390508181111561254357612542611b72565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061257082612549565b61257a8185612554565b935061258a818560208601611845565b6125938161186f565b840191505092915050565b60006080820190506125b3600083018761174c565b6125c0602083018661174c565b6125cd60408301856118c5565b81810360608301526125df8184612565565b905095945050505050565b60006060820190506125ff600083018661174c565b61260c602083018561174c565b61261960408301846118c5565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061267d603383611834565b915061268882612621565b604082019050919050565b600060208201905081810360008301526126ac81612670565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061270f603183611834565b915061271a826126b3565b604082019050919050565b6000602082019050818103600083015261273e81612702565b9050919050565b50565b6000612755600083612554565b915061276082612745565b600082019050919050565b6000608082019050612780600083018661174c565b61278d602083018561174c565b61279a60408301846118c5565b81810360608301526127ab81612748565b9050949350505050565b60006040820190506127ca600083018561174c565b6127d7602083018461174c565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612814601a83611834565b915061281f826127de565b602082019050919050565b6000602082019050818103600083015261284381612807565b9050919050565b600061285582611663565b915061286083611663565b9250826128705761286f6124b5565b5b82820690509291505056fea2646970667358221220ca033f077f2c2c4503313337828e15ec6eaeae3147b7bc42595de97c2c1a886e64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100a75760003560e01c8063854b6a4f11610064578063854b6a4f146101b1578063a035b1fe146101da578063b5b20c0014610205578063c4a9e1161461022e578063d5a44f8614610259578063e1397c6e1461029a576100a7565b80630d0271d6146100ac578063216ed6ad146100c85780635b5cf6d4146100f15780635badbe4c1461011a5780638150d5071461014557806381d12c581461016e575b600080fd5b6100c660048036038101906100c191906115b8565b6102c3565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611699565b6103cf565b005b3480156100fd57600080fd5b50610118600480360381019061011391906116ec565b6104e1565b005b34801561012657600080fd5b5061012f61069b565b60405161013c919061175b565b60405180910390f35b34801561015157600080fd5b5061016c60048036038101906101679190611776565b6106a1565b005b34801561017a57600080fd5b5061019560048036038101906101909190611776565b61092e565b6040516101a897969594939291906118d4565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d3919061197d565b610aba565b005b3480156101e657600080fd5b506101ef610e31565b6040516101fc919061175b565b60405180910390f35b34801561021157600080fd5b5061022c600480360381019061022791906119bd565b610e55565b005b34801561023a57600080fd5b5061024361101b565b604051610250919061175b565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b9190611776565b611021565b6040516102919594939291906119fd565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190611aa6565b611091565b005b7f0000000000000000000000000000000000000000000000000000000000000000341015610326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031d90611b52565b60405180910390fd5b60006003600081548092919061033b90611ba1565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506103ad82611356565b816003018190555083838260040191826103c8929190611e2f565b5050505050565b60008211610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040990611f4b565b60405180910390fd5b60006001600081548092919061042790611ba1565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261049b9190611f6b565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516104d2919061175b565b60405180910390a15050505050565b60006002600085815260200190815260200160002090506000600381111561050c5761050b6117b2565b5b8160020160009054906101000a900460ff1660038111156105305761052f6117b2565b5b14610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056790611feb565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106139061207d565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610644576106436117b2565b5b0217905550838383600501918261065c929190611e2f565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8560405161068c919061175b565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107409061210f565b60405180910390fd5b8060020154421161078f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610786906121a1565b60405180910390fd5b8060030160019054906101000a900460ff16156107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a9061229f565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b81526004016108af9291906122bf565b6020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f291906122fd565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610922919061175b565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461099690611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546109c290611c52565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b505050505090806005018054610a2490611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090611c52565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ae557610ae46117b2565b5b8160020160009054906101000a900460ff166003811115610b0957610b086117b2565b5b14610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090612376565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b8b57610b8a6117b2565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610c3092919061241a565b6020604051808303816000875af1158015610c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c73919061245f565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ca692919061248c565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a8660010154610cfd91906124e4565b8660010154610d0c9190612515565b84603c60018b604051602001610d22919061175b565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610d50949392919061259e565b60206040518083038185885af1158015610d6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d93919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610df7939291906125ea565b600060405180830381600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef490612693565b60405180910390fd5b8060030160019054906101000a900460ff1615610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f469061220d565b60405180910390fd5b8060030160009054906101000a900460ff1615610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f989061229f565b60405180910390fd5b8060020154421115610fc6578142610fb99190611f6b565b8160020181905550610fdf565b818160020154610fd69190611f6b565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161100e919061175b565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690612725565b60405180910390fd5b600082828101906111309190611776565b90506000600260008381526020019081526020016000209050846111d0578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a836001015461119d91906124e4565b9081150290604051600060405180830381858888f193505050501580156111c8573d6000803e3d6000fd5b505050611351565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004016040518363ffffffff1660e01b815260040161125492919061241a565b6020604051808303816000875af1158015611273573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611297919061245f565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230600a84600101546112e691906124e4565b83603c60006040518563ffffffff1660e01b81526004016113099392919061276b565b60206040518083038185885af1158015611327573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061134c919061245f565b505050505b505050565b60006113606113d4565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516113c69291906127b5565b60405180910390a150919050565b60008060005b6001548110156114585760008082815260200190815260200160002060030160009054906101000a900460ff1661144b5760008082815260200190815260200160002060020154421161144b5760008082815260200190815260200160002060010154826114489190611f6b565b91505b80806001019150506113da565b506000811161149c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114939061282a565b60405180910390fd5b600081446114aa919061284a565b9050600080600090505b6001548110156115425760008082815260200190815260200160002060030160009054906101000a900460ff16611535576000808281526020019081526020016000206002015442116115355760008082815260200190815260200160002060010154826115229190611f6b565b91508282111561153457809450611542565b5b80806001019150506114b4565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261157857611577611553565b5b8235905067ffffffffffffffff81111561159557611594611558565b5b6020830191508360018202830111156115b1576115b061155d565b5b9250929050565b600080602083850312156115cf576115ce611549565b5b600083013567ffffffffffffffff8111156115ed576115ec61154e565b5b6115f985828601611562565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163082611605565b9050919050565b61164081611625565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b6000819050919050565b61167681611663565b811461168157600080fd5b50565b6000813590506116938161166d565b92915050565b6000806000606084860312156116b2576116b1611549565b5b60006116c08682870161164e565b93505060206116d186828701611684565b92505060406116e286828701611684565b9150509250925092565b60008060006040848603121561170557611704611549565b5b600061171386828701611684565b935050602084013567ffffffffffffffff8111156117345761173361154e565b5b61174086828701611562565b92509250509250925092565b61175581611663565b82525050565b6000602082019050611770600083018461174c565b92915050565b60006020828403121561178c5761178b611549565b5b600061179a84828501611684565b91505092915050565b6117ac81611625565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106117f2576117f16117b2565b5b50565b6000819050611803826117e1565b919050565b6000611813826117f5565b9050919050565b61182381611808565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611863578082015181840152602081019050611848565b60008484015250505050565b6000601f19601f8301169050919050565b600061188b82611829565b6118958185611834565b93506118a5818560208601611845565b6118ae8161186f565b840191505092915050565b60008115159050919050565b6118ce816118b9565b82525050565b600060e0820190506118e9600083018a6117a3565b6118f6602083018961174c565b611903604083018861181a565b611910606083018761174c565b81810360808301526119228186611880565b905081810360a08301526119368185611880565b905061194560c08301846118c5565b98975050505050505050565b61195a816118b9565b811461196557600080fd5b50565b60008135905061197781611951565b92915050565b6000806040838503121561199457611993611549565b5b60006119a285828601611684565b92505060206119b385828601611968565b9150509250929050565b600080604083850312156119d4576119d3611549565b5b60006119e285828601611684565b92505060206119f385828601611684565b9150509250929050565b600060a082019050611a1260008301886117a3565b611a1f602083018761174c565b611a2c604083018661174c565b611a3960608301856118c5565b611a4660808301846118c5565b9695505050505050565b60008083601f840112611a6657611a65611553565b5b8235905067ffffffffffffffff811115611a8357611a82611558565b5b602083019150836001820283011115611a9f57611a9e61155d565b5b9250929050565b600080600060408486031215611abf57611abe611549565b5b6000611acd86828701611968565b935050602084013567ffffffffffffffff811115611aee57611aed61154e565b5b611afa86828701611a50565b92509250509250925092565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b3c601083611834565b9150611b4782611b06565b602082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611bac82611663565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bde57611bdd611b72565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c6a57607f821691505b602082108103611c7d57611c7c611c23565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ce57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611ca8565b611cef8683611ca8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d2c611d27611d2284611663565b611d07565b611663565b9050919050565b6000819050919050565b611d4683611d11565b611d5a611d5282611d33565b848454611cb5565b825550505050565b600090565b611d6f611d62565b611d7a818484611d3d565b505050565b5b81811015611d9e57611d93600082611d67565b600181019050611d80565b5050565b601f821115611de357611db481611c83565b611dbd84611c98565b81016020851015611dcc578190505b611de0611dd885611c98565b830182611d7f565b50505b505050565b600082821c905092915050565b6000611e0660001984600802611de8565b1980831691505092915050565b6000611e1f8383611df5565b9150826002028217905092915050565b611e398383611be9565b67ffffffffffffffff811115611e5257611e51611bf4565b5b611e5c8254611c52565b611e67828285611da2565b6000601f831160018114611e965760008415611e84578287013590505b611e8e8582611e13565b865550611ef6565b601f198416611ea486611c83565b60005b82811015611ecc57848901358255600182019150602085019450602081019050611ea7565b86831015611ee95784890135611ee5601f891682611df5565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611f35601183611834565b9150611f4082611eff565b602082019050919050565b60006020820190508181036000830152611f6481611f28565b9050919050565b6000611f7682611663565b9150611f8183611663565b9250828201905080821115611f9957611f98611b72565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611fd5601883611834565b9150611fe082611f9f565b602082019050919050565b6000602082019050818103600083015261200481611fc8565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612067603a83611834565b91506120728261200b565b604082019050919050565b600060208201905081810360008301526120968161205a565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b60006120f9603483611834565b91506121048261209d565b604082019050919050565b60006020820190508181036000830152612128816120ec565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061218b602283611834565b91506121968261212f565b604082019050919050565b600060208201905081810360008301526121ba8161217e565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b60006121f7602083611834565b9150612202826121c1565b602082019050919050565b60006020820190508181036000830152612226816121ea565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612289602483611834565b91506122948261222d565b604082019050919050565b600060208201905081810360008301526122b88161227c565b9050919050565b60006040820190506122d460008301856117a3565b6122e1602083018461174c565b9392505050565b6000815190506122f781611951565b92915050565b60006020828403121561231357612312611549565b5b6000612321848285016122e8565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612360602083611834565b915061236b8261232a565b602082019050919050565b6000602082019050818103600083015261238f81612353565b9050919050565b600081546123a381611c52565b6123ad8186611834565b945060018216600081146123c857600181146123de57612411565b60ff198316865281151560200286019350612411565b6123e785611c83565b60005b83811015612409578154818901526001820191506020810190506123ea565b808801955050505b50505092915050565b600060408201905061242f60008301856117a3565b81810360208301526124418184612396565b90509392505050565b6000815190506124598161166d565b92915050565b60006020828403121561247557612474611549565b5b60006124838482850161244a565b91505092915050565b60006040820190506124a1600083018561174c565b6124ae60208301846118c5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006124ef82611663565b91506124fa83611663565b92508261250a576125096124b5565b5b828204905092915050565b600061252082611663565b915061252b83611663565b925082820390508181111561254357612542611b72565b5b92915050565b600081519050919050565b600082825260208201905092915050565b600061257082612549565b61257a8185612554565b935061258a818560208601611845565b6125938161186f565b840191505092915050565b60006080820190506125b3600083018761174c565b6125c0602083018661174c565b6125cd60408301856118c5565b81810360608301526125df8184612565565b905095945050505050565b60006060820190506125ff600083018661174c565b61260c602083018561174c565b61261960408301846118c5565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b600061267d603383611834565b915061268882612621565b604082019050919050565b600060208201905081810360008301526126ac81612670565b9050919050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b600061270f603183611834565b915061271a826126b3565b604082019050919050565b6000602082019050818103600083015261273e81612702565b9050919050565b50565b6000612755600083612554565b915061276082612745565b600082019050919050565b6000608082019050612780600083018661174c565b61278d602083018561174c565b61279a60408301846118c5565b81810360608301526127ab81612748565b9050949350505050565b60006040820190506127ca600083018561174c565b6127d7602083018461174c565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612814601a83611834565b915061281f826127de565b602082019050919050565b6000602082019050818103600083015261284381612807565b9050919050565b600061285582611663565b915061286083611663565b9250826128705761286f6124b5565b5b82820690509291505056fea2646970667358221220ca033f077f2c2c4503313337828e15ec6eaeae3147b7bc42595de97c2c1a886e64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/assets/Work1.json b/client/src/assets/Work1.json index 29b8e80..a1d87c7 100644 --- a/client/src/assets/Work1.json +++ b/client/src/assets/Work1.json @@ -314,8 +314,8 @@ "type": "function" } ], - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200250238038062002502833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a051612341620001c1600039600081816102910152610dc501526000818161081e01528181610b7c01528181610c7e0152610d2901526123416000f3fe60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611285565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611366565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b9565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611428565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611443565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611443565b6108fa565b60405161019d97969594939291906115a1565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061164a565b610a86565b005b3480156101db57600080fd5b506101e4610dc3565b6040516101f19190611428565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061168a565b610de7565b005b34801561022f57600080fd5b50610238610fad565b6040516102459190611428565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611443565b610fb3565b6040516102869594939291906116ca565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611769565b60405180910390fd5b600060036000815480929190610307906117b8565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611023565b81600301819055508383826004019182610394929190611a46565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b62565b60405180910390fd5b6000600160008154809291906103f3906117b8565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b82565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611428565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147f565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147f565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c02565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c94565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147f565b5b02179055508383836005019182610628929190611a46565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611428565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d26565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db8565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e24565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb6565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed6565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f14565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611428565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611869565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611869565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611869565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611869565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147f565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147f565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8d565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147f565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612031565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612076565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a3565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e52308560010154846201518060006040518563ffffffff1660e01b8152600401610ce293929190612103565b60206040518083038185885af1158015610d00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d259190612076565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d899392919061214d565b600060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906121f6565b60405180910390fd5b8060030160019054906101000a900460ff1615610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890611e24565b60405180910390fd5b8060030160009054906101000a900460ff1615610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90611eb6565b60405180910390fd5b8060020154421115610f58578142610f4b9190611b82565b8160020181905550610f71565b818160020154610f689190611b82565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fa09190611428565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102d6110a1565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611093929190612216565b60405180910390a150919050565b60008060005b6001548110156111255760008082815260200190815260200160002060030160009054906101000a900460ff16611118576000808281526020019081526020016000206002015442116111185760008082815260200190815260200160002060010154826111159190611b82565b91505b80806001019150506110a7565b5060008111611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061228b565b60405180910390fd5b6000814461117791906122da565b9050600080600090505b60015481101561120f5760008082815260200190815260200160002060030160009054906101000a900460ff16611202576000808281526020019081526020016000206002015442116112025760008082815260200190815260200160002060010154826111ef9190611b82565b9150828211156112015780945061120f565b5b8080600101915050611181565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261124557611244611220565b5b8235905067ffffffffffffffff81111561126257611261611225565b5b60208301915083600182028301111561127e5761127d61122a565b5b9250929050565b6000806020838503121561129c5761129b611216565b5b600083013567ffffffffffffffff8111156112ba576112b961121b565b5b6112c68582860161122f565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fd826112d2565b9050919050565b61130d816112f2565b811461131857600080fd5b50565b60008135905061132a81611304565b92915050565b6000819050919050565b61134381611330565b811461134e57600080fd5b50565b6000813590506113608161133a565b92915050565b60008060006060848603121561137f5761137e611216565b5b600061138d8682870161131b565b935050602061139e86828701611351565b92505060406113af86828701611351565b9150509250925092565b6000806000604084860312156113d2576113d1611216565b5b60006113e086828701611351565b935050602084013567ffffffffffffffff8111156114015761140061121b565b5b61140d8682870161122f565b92509250509250925092565b61142281611330565b82525050565b600060208201905061143d6000830184611419565b92915050565b60006020828403121561145957611458611216565b5b600061146784828501611351565b91505092915050565b611479816112f2565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bf576114be61147f565b5b50565b60008190506114d0826114ae565b919050565b60006114e0826114c2565b9050919050565b6114f0816114d5565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611530578082015181840152602081019050611515565b60008484015250505050565b6000601f19601f8301169050919050565b6000611558826114f6565b6115628185611501565b9350611572818560208601611512565b61157b8161153c565b840191505092915050565b60008115159050919050565b61159b81611586565b82525050565b600060e0820190506115b6600083018a611470565b6115c36020830189611419565b6115d060408301886114e7565b6115dd6060830187611419565b81810360808301526115ef818661154d565b905081810360a0830152611603818561154d565b905061161260c0830184611592565b98975050505050505050565b61162781611586565b811461163257600080fd5b50565b6000813590506116448161161e565b92915050565b6000806040838503121561166157611660611216565b5b600061166f85828601611351565b925050602061168085828601611635565b9150509250929050565b600080604083850312156116a1576116a0611216565b5b60006116af85828601611351565b92505060206116c085828601611351565b9150509250929050565b600060a0820190506116df6000830188611470565b6116ec6020830187611419565b6116f96040830186611419565b6117066060830185611592565b6117136080830184611592565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611753601083611501565b915061175e8261171d565b602082019050919050565b6000602082019050818103600083015261178281611746565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c382611330565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f5576117f4611789565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188157607f821691505b6020821081036118945761189361183a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bf565b61190686836118bf565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194361193e61193984611330565b61191e565b611330565b9050919050565b6000819050919050565b61195d83611928565b6119716119698261194a565b8484546118cc565b825550505050565b600090565b611986611979565b611991818484611954565b505050565b5b818110156119b5576119aa60008261197e565b600181019050611997565b5050565b601f8211156119fa576119cb8161189a565b6119d4846118af565b810160208510156119e3578190505b6119f76119ef856118af565b830182611996565b50505b505050565b600082821c905092915050565b6000611a1d600019846008026119ff565b1980831691505092915050565b6000611a368383611a0c565b9150826002028217905092915050565b611a508383611800565b67ffffffffffffffff811115611a6957611a6861180b565b5b611a738254611869565b611a7e8282856119b9565b6000601f831160018114611aad5760008415611a9b578287013590505b611aa58582611a2a565b865550611b0d565b601f198416611abb8661189a565b60005b82811015611ae357848901358255600182019150602085019450602081019050611abe565b86831015611b005784890135611afc601f891682611a0c565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4c601183611501565b9150611b5782611b16565b602082019050919050565b60006020820190508181036000830152611b7b81611b3f565b9050919050565b6000611b8d82611330565b9150611b9883611330565b9250828201905080821115611bb057611baf611789565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bec601883611501565b9150611bf782611bb6565b602082019050919050565b60006020820190508181036000830152611c1b81611bdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7e603a83611501565b9150611c8982611c22565b604082019050919050565b60006020820190508181036000830152611cad81611c71565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d10603483611501565b9150611d1b82611cb4565b604082019050919050565b60006020820190508181036000830152611d3f81611d03565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da2602283611501565b9150611dad82611d46565b604082019050919050565b60006020820190508181036000830152611dd181611d95565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0e602083611501565b9150611e1982611dd8565b602082019050919050565b60006020820190508181036000830152611e3d81611e01565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ea0602483611501565b9150611eab82611e44565b604082019050919050565b60006020820190508181036000830152611ecf81611e93565b9050919050565b6000604082019050611eeb6000830185611470565b611ef86020830184611419565b9392505050565b600081519050611f0e8161161e565b92915050565b600060208284031215611f2a57611f29611216565b5b6000611f3884828501611eff565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f77602083611501565b9150611f8282611f41565b602082019050919050565b60006020820190508181036000830152611fa681611f6a565b9050919050565b60008154611fba81611869565b611fc48186611501565b94506001821660008114611fdf5760018114611ff557612028565b60ff198316865281151560200286019350612028565b611ffe8561189a565b60005b8381101561202057815481890152600182019150602081019050612001565b808801955050505b50505092915050565b60006040820190506120466000830185611470565b81810360208301526120588184611fad565b90509392505050565b6000815190506120708161133a565b92915050565b60006020828403121561208c5761208b611216565b5b600061209a84828501612061565b91505092915050565b60006040820190506120b86000830185611419565b6120c56020830184611592565b9392505050565b600082825260208201905092915050565b50565b60006120ed6000836120cc565b91506120f8826120dd565b600082019050919050565b60006080820190506121186000830186611419565b6121256020830185611419565b6121326040830184611592565b8181036060830152612143816120e0565b9050949350505050565b60006060820190506121626000830186611419565b61216f6020830185611419565b61217c6040830184611592565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121e0603383611501565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b600060408201905061222b6000830185611419565b6122386020830184611419565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612275601a83611501565b91506122808261223f565b602082019050919050565b600060208201905081810360008301526122a481612268565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e582611330565b91506122f083611330565b925082612300576122ff6122ab565b5b82820690509291505056fea2646970667358221220e12d5325efc3ff38a8068d857a1075dc5c5742f4e8f30777e2b34045031f005564736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611285565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611366565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b9565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611428565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611443565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611443565b6108fa565b60405161019d97969594939291906115a1565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c8919061164a565b610a86565b005b3480156101db57600080fd5b506101e4610dc3565b6040516101f19190611428565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c919061168a565b610de7565b005b34801561022f57600080fd5b50610238610fad565b6040516102459190611428565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611443565b610fb3565b6040516102869594939291906116ca565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611769565b60405180910390fd5b600060036000815480929190610307906117b8565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611023565b81600301819055508383826004019182610394929190611a46565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b62565b60405180910390fd5b6000600160008154809291906103f3906117b8565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b82565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611428565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147f565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147f565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c02565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c94565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147f565b5b02179055508383836005019182610628929190611a46565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611428565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d26565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db8565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e24565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb6565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed6565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f14565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611428565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611869565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611869565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611869565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611869565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147f565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147f565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8d565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147f565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc929190612031565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612076565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a3565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e52308560010154846201518060006040518563ffffffff1660e01b8152600401610ce293929190612103565b60206040518083038185885af1158015610d00573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d259190612076565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d899392919061214d565b600060405180830381600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e86906121f6565b60405180910390fd5b8060030160019054906101000a900460ff1615610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890611e24565b60405180910390fd5b8060030160009054906101000a900460ff1615610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90611eb6565b60405180910390fd5b8060020154421115610f58578142610f4b9190611b82565b8160020181905550610f71565b818160020154610f689190611b82565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610fa09190611428565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102d6110a1565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611093929190612216565b60405180910390a150919050565b60008060005b6001548110156111255760008082815260200190815260200160002060030160009054906101000a900460ff16611118576000808281526020019081526020016000206002015442116111185760008082815260200190815260200160002060010154826111159190611b82565b91505b80806001019150506110a7565b5060008111611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111609061228b565b60405180910390fd5b6000814461117791906122da565b9050600080600090505b60015481101561120f5760008082815260200190815260200160002060030160009054906101000a900460ff16611202576000808281526020019081526020016000206002015442116112025760008082815260200190815260200160002060010154826111ef9190611b82565b9150828211156112015780945061120f565b5b8080600101915050611181565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261124557611244611220565b5b8235905067ffffffffffffffff81111561126257611261611225565b5b60208301915083600182028301111561127e5761127d61122a565b5b9250929050565b6000806020838503121561129c5761129b611216565b5b600083013567ffffffffffffffff8111156112ba576112b961121b565b5b6112c68582860161122f565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fd826112d2565b9050919050565b61130d816112f2565b811461131857600080fd5b50565b60008135905061132a81611304565b92915050565b6000819050919050565b61134381611330565b811461134e57600080fd5b50565b6000813590506113608161133a565b92915050565b60008060006060848603121561137f5761137e611216565b5b600061138d8682870161131b565b935050602061139e86828701611351565b92505060406113af86828701611351565b9150509250925092565b6000806000604084860312156113d2576113d1611216565b5b60006113e086828701611351565b935050602084013567ffffffffffffffff8111156114015761140061121b565b5b61140d8682870161122f565b92509250509250925092565b61142281611330565b82525050565b600060208201905061143d6000830184611419565b92915050565b60006020828403121561145957611458611216565b5b600061146784828501611351565b91505092915050565b611479816112f2565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bf576114be61147f565b5b50565b60008190506114d0826114ae565b919050565b60006114e0826114c2565b9050919050565b6114f0816114d5565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611530578082015181840152602081019050611515565b60008484015250505050565b6000601f19601f8301169050919050565b6000611558826114f6565b6115628185611501565b9350611572818560208601611512565b61157b8161153c565b840191505092915050565b60008115159050919050565b61159b81611586565b82525050565b600060e0820190506115b6600083018a611470565b6115c36020830189611419565b6115d060408301886114e7565b6115dd6060830187611419565b81810360808301526115ef818661154d565b905081810360a0830152611603818561154d565b905061161260c0830184611592565b98975050505050505050565b61162781611586565b811461163257600080fd5b50565b6000813590506116448161161e565b92915050565b6000806040838503121561166157611660611216565b5b600061166f85828601611351565b925050602061168085828601611635565b9150509250929050565b600080604083850312156116a1576116a0611216565b5b60006116af85828601611351565b92505060206116c085828601611351565b9150509250929050565b600060a0820190506116df6000830188611470565b6116ec6020830187611419565b6116f96040830186611419565b6117066060830185611592565b6117136080830184611592565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611753601083611501565b915061175e8261171d565b602082019050919050565b6000602082019050818103600083015261178281611746565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c382611330565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f5576117f4611789565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188157607f821691505b6020821081036118945761189361183a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bf565b61190686836118bf565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194361193e61193984611330565b61191e565b611330565b9050919050565b6000819050919050565b61195d83611928565b6119716119698261194a565b8484546118cc565b825550505050565b600090565b611986611979565b611991818484611954565b505050565b5b818110156119b5576119aa60008261197e565b600181019050611997565b5050565b601f8211156119fa576119cb8161189a565b6119d4846118af565b810160208510156119e3578190505b6119f76119ef856118af565b830182611996565b50505b505050565b600082821c905092915050565b6000611a1d600019846008026119ff565b1980831691505092915050565b6000611a368383611a0c565b9150826002028217905092915050565b611a508383611800565b67ffffffffffffffff811115611a6957611a6861180b565b5b611a738254611869565b611a7e8282856119b9565b6000601f831160018114611aad5760008415611a9b578287013590505b611aa58582611a2a565b865550611b0d565b601f198416611abb8661189a565b60005b82811015611ae357848901358255600182019150602085019450602081019050611abe565b86831015611b005784890135611afc601f891682611a0c565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4c601183611501565b9150611b5782611b16565b602082019050919050565b60006020820190508181036000830152611b7b81611b3f565b9050919050565b6000611b8d82611330565b9150611b9883611330565b9250828201905080821115611bb057611baf611789565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bec601883611501565b9150611bf782611bb6565b602082019050919050565b60006020820190508181036000830152611c1b81611bdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7e603a83611501565b9150611c8982611c22565b604082019050919050565b60006020820190508181036000830152611cad81611c71565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d10603483611501565b9150611d1b82611cb4565b604082019050919050565b60006020820190508181036000830152611d3f81611d03565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da2602283611501565b9150611dad82611d46565b604082019050919050565b60006020820190508181036000830152611dd181611d95565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0e602083611501565b9150611e1982611dd8565b602082019050919050565b60006020820190508181036000830152611e3d81611e01565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611ea0602483611501565b9150611eab82611e44565b604082019050919050565b60006020820190508181036000830152611ecf81611e93565b9050919050565b6000604082019050611eeb6000830185611470565b611ef86020830184611419565b9392505050565b600081519050611f0e8161161e565b92915050565b600060208284031215611f2a57611f29611216565b5b6000611f3884828501611eff565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f77602083611501565b9150611f8282611f41565b602082019050919050565b60006020820190508181036000830152611fa681611f6a565b9050919050565b60008154611fba81611869565b611fc48186611501565b94506001821660008114611fdf5760018114611ff557612028565b60ff198316865281151560200286019350612028565b611ffe8561189a565b60005b8381101561202057815481890152600182019150602081019050612001565b808801955050505b50505092915050565b60006040820190506120466000830185611470565b81810360208301526120588184611fad565b90509392505050565b6000815190506120708161133a565b92915050565b60006020828403121561208c5761208b611216565b5b600061209a84828501612061565b91505092915050565b60006040820190506120b86000830185611419565b6120c56020830184611592565b9392505050565b600082825260208201905092915050565b50565b60006120ed6000836120cc565b91506120f8826120dd565b600082019050919050565b60006080820190506121186000830186611419565b6121256020830185611419565b6121326040830184611592565b8181036060830152612143816120e0565b9050949350505050565b60006060820190506121626000830186611419565b61216f6020830185611419565b61217c6040830184611592565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121e0603383611501565b91506121eb82612184565b604082019050919050565b6000602082019050818103600083015261220f816121d3565b9050919050565b600060408201905061222b6000830185611419565b6122386020830184611419565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612275601a83611501565b91506122808261223f565b602082019050919050565b600060208201905081810360008301526122a481612268565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e582611330565b91506122f083611330565b925082612300576122ff6122ab565b5b82820690509291505056fea2646970667358221220e12d5325efc3ff38a8068d857a1075dc5c5742f4e8f30777e2b34045031f005564736f6c63430008180033", + "bytecode": "0x60c06040523480156200001157600080fd5b506040516200250038038062002500833981810160405281019062000037919062000138565b81818173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508060a08181525050505050506200017f565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b18262000084565b9050919050565b6000620000c582620000a4565b9050919050565b620000d781620000b8565b8114620000e357600080fd5b50565b600081519050620000f781620000cc565b92915050565b6000819050919050565b6200011281620000fd565b81146200011e57600080fd5b50565b600081519050620001328162000107565b92915050565b600080604083850312156200015257620001516200007f565b5b60006200016285828601620000e6565b9250506020620001758582860162000121565b9150509250929050565b60805160a05161233f620001c1600039600081816102910152610dc301526000818161081e01528181610b7c01528181610c7e0152610d27015261233f6000f3fe60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611283565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611364565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b7565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611426565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611441565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611441565b6108fa565b60405161019d979695949392919061159f565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190611648565b610a86565b005b3480156101db57600080fd5b506101e4610dc1565b6040516101f19190611426565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c9190611688565b610de5565b005b34801561022f57600080fd5b50610238610fab565b6040516102459190611426565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611441565b610fb1565b6040516102869594939291906116c8565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611767565b60405180910390fd5b600060036000815480929190610307906117b6565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611021565b81600301819055508383826004019182610394929190611a44565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b60565b60405180910390fd5b6000600160008154809291906103f3906117b6565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b80565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611426565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147d565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147d565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c00565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c92565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147d565b5b02179055508383836005019182610628929190611a44565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611426565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d24565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db6565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e22565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb4565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed4565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f12565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611426565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611867565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611867565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611867565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147d565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147d565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8b565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc92919061202f565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612074565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a1565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230856001015484603c60006040518563ffffffff1660e01b8152600401610ce093929190612101565b60206040518083038185885af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d239190612074565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d879392919061214b565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906121f4565b60405180910390fd5b8060030160019054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690611e22565b60405180910390fd5b8060030160009054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611eb4565b60405180910390fd5b8060020154421115610f56578142610f499190611b80565b8160020181905550610f6f565b818160020154610f669190611b80565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f9e9190611426565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102b61109f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611091929190612214565b60405180910390a150919050565b60008060005b6001548110156111235760008082815260200190815260200160002060030160009054906101000a900460ff16611116576000808281526020019081526020016000206002015442116111165760008082815260200190815260200160002060010154826111139190611b80565b91505b80806001019150506110a5565b5060008111611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90612289565b60405180910390fd5b6000814461117591906122d8565b9050600080600090505b60015481101561120d5760008082815260200190815260200160002060030160009054906101000a900460ff16611200576000808281526020019081526020016000206002015442116112005760008082815260200190815260200160002060010154826111ed9190611b80565b9150828211156111ff5780945061120d565b5b808060010191505061117f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112435761124261121e565b5b8235905067ffffffffffffffff8111156112605761125f611223565b5b60208301915083600182028301111561127c5761127b611228565b5b9250929050565b6000806020838503121561129a57611299611214565b5b600083013567ffffffffffffffff8111156112b8576112b7611219565b5b6112c48582860161122d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fb826112d0565b9050919050565b61130b816112f0565b811461131657600080fd5b50565b60008135905061132881611302565b92915050565b6000819050919050565b6113418161132e565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b60008060006060848603121561137d5761137c611214565b5b600061138b86828701611319565b935050602061139c8682870161134f565b92505060406113ad8682870161134f565b9150509250925092565b6000806000604084860312156113d0576113cf611214565b5b60006113de8682870161134f565b935050602084013567ffffffffffffffff8111156113ff576113fe611219565b5b61140b8682870161122d565b92509250509250925092565b6114208161132e565b82525050565b600060208201905061143b6000830184611417565b92915050565b60006020828403121561145757611456611214565b5b60006114658482850161134f565b91505092915050565b611477816112f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bd576114bc61147d565b5b50565b60008190506114ce826114ac565b919050565b60006114de826114c0565b9050919050565b6114ee816114d3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561152e578082015181840152602081019050611513565b60008484015250505050565b6000601f19601f8301169050919050565b6000611556826114f4565b61156081856114ff565b9350611570818560208601611510565b6115798161153a565b840191505092915050565b60008115159050919050565b61159981611584565b82525050565b600060e0820190506115b4600083018a61146e565b6115c16020830189611417565b6115ce60408301886114e5565b6115db6060830187611417565b81810360808301526115ed818661154b565b905081810360a0830152611601818561154b565b905061161060c0830184611590565b98975050505050505050565b61162581611584565b811461163057600080fd5b50565b6000813590506116428161161c565b92915050565b6000806040838503121561165f5761165e611214565b5b600061166d8582860161134f565b925050602061167e85828601611633565b9150509250929050565b6000806040838503121561169f5761169e611214565b5b60006116ad8582860161134f565b92505060206116be8582860161134f565b9150509250929050565b600060a0820190506116dd600083018861146e565b6116ea6020830187611417565b6116f76040830186611417565b6117046060830185611590565b6117116080830184611590565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006117516010836114ff565b915061175c8261171b565b602082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c18261132e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f3576117f2611787565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061187f57607f821691505b60208210810361189257611891611838565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bd565b61190486836118bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194161193c6119378461132e565b61191c565b61132e565b9050919050565b6000819050919050565b61195b83611926565b61196f61196782611948565b8484546118ca565b825550505050565b600090565b611984611977565b61198f818484611952565b505050565b5b818110156119b3576119a860008261197c565b600181019050611995565b5050565b601f8211156119f8576119c981611898565b6119d2846118ad565b810160208510156119e1578190505b6119f56119ed856118ad565b830182611994565b50505b505050565b600082821c905092915050565b6000611a1b600019846008026119fd565b1980831691505092915050565b6000611a348383611a0a565b9150826002028217905092915050565b611a4e83836117fe565b67ffffffffffffffff811115611a6757611a66611809565b5b611a718254611867565b611a7c8282856119b7565b6000601f831160018114611aab5760008415611a99578287013590505b611aa38582611a28565b865550611b0b565b601f198416611ab986611898565b60005b82811015611ae157848901358255600182019150602085019450602081019050611abc565b86831015611afe5784890135611afa601f891682611a0a565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4a6011836114ff565b9150611b5582611b14565b602082019050919050565b60006020820190508181036000830152611b7981611b3d565b9050919050565b6000611b8b8261132e565b9150611b968361132e565b9250828201905080821115611bae57611bad611787565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bea6018836114ff565b9150611bf582611bb4565b602082019050919050565b60006020820190508181036000830152611c1981611bdd565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7c603a836114ff565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d0e6034836114ff565b9150611d1982611cb2565b604082019050919050565b60006020820190508181036000830152611d3d81611d01565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da06022836114ff565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0c6020836114ff565b9150611e1782611dd6565b602082019050919050565b60006020820190508181036000830152611e3b81611dff565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611e9e6024836114ff565b9150611ea982611e42565b604082019050919050565b60006020820190508181036000830152611ecd81611e91565b9050919050565b6000604082019050611ee9600083018561146e565b611ef66020830184611417565b9392505050565b600081519050611f0c8161161c565b92915050565b600060208284031215611f2857611f27611214565b5b6000611f3684828501611efd565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f756020836114ff565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b60008154611fb881611867565b611fc281866114ff565b94506001821660008114611fdd5760018114611ff357612026565b60ff198316865281151560200286019350612026565b611ffc85611898565b60005b8381101561201e57815481890152600182019150602081019050611fff565b808801955050505b50505092915050565b6000604082019050612044600083018561146e565b81810360208301526120568184611fab565b90509392505050565b60008151905061206e81611338565b92915050565b60006020828403121561208a57612089611214565b5b60006120988482850161205f565b91505092915050565b60006040820190506120b66000830185611417565b6120c36020830184611590565b9392505050565b600082825260208201905092915050565b50565b60006120eb6000836120ca565b91506120f6826120db565b600082019050919050565b60006080820190506121166000830186611417565b6121236020830185611417565b6121306040830184611590565b8181036060830152612141816120de565b9050949350505050565b60006060820190506121606000830186611417565b61216d6020830185611417565b61217a6040830184611590565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121de6033836114ff565b91506121e982612182565b604082019050919050565b6000602082019050818103600083015261220d816121d1565b9050919050565b60006040820190506122296000830185611417565b6122366020830184611417565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612273601a836114ff565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e38261132e565b91506122ee8361132e565b9250826122fe576122fd6122a9565b5b82820690509291505056fea2646970667358221220ccef70a4740c0ce61b640775d3b02203dffc0f23849fad430c5f5f66783a2b5164736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061009c5760003560e01c806381d12c581161006457806381d12c5814610163578063854b6a4f146101a6578063a035b1fe146101cf578063b5b20c00146101fa578063c4a9e11614610223578063d5a44f861461024e5761009c565b80630d0271d6146100a1578063216ed6ad146100bd5780635b5cf6d4146100e65780635badbe4c1461010f5780638150d5071461013a575b600080fd5b6100bb60048036038101906100b69190611283565b61028f565b005b3480156100c957600080fd5b506100e460048036038101906100df9190611364565b61039b565b005b3480156100f257600080fd5b5061010d600480360381019061010891906113b7565b6104ad565b005b34801561011b57600080fd5b50610124610667565b6040516101319190611426565b60405180910390f35b34801561014657600080fd5b50610161600480360381019061015c9190611441565b61066d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190611441565b6108fa565b60405161019d979695949392919061159f565b60405180910390f35b3480156101b257600080fd5b506101cd60048036038101906101c89190611648565b610a86565b005b3480156101db57600080fd5b506101e4610dc1565b6040516101f19190611426565b60405180910390f35b34801561020657600080fd5b50610221600480360381019061021c9190611688565b610de5565b005b34801561022f57600080fd5b50610238610fab565b6040516102459190611426565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611441565b610fb1565b6040516102869594939291906116c8565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000003410156102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990611767565b60405180910390fd5b600060036000815480929190610307906117b6565b9190505590506000600260008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061037982611021565b81600301819055508383826004019182610394929190611a44565b5050505050565b600082116103de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d590611b60565b60405180910390fd5b6000600160008154809291906103f3906117b6565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426104679190611b80565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161049e9190611426565b60405180910390a15050505050565b6000600260008581526020019081526020016000209050600060038111156104d8576104d761147d565b5b8160020160009054906101000a900460ff1660038111156104fc576104fb61147d565b5b1461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611c00565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105df90611c92565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156106105761060f61147d565b5b02179055508383836005019182610628929190611a44565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc856040516106589190611426565b60405180910390a15050505050565b60035481565b600080600083815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070c90611d24565b60405180910390fd5b8060020154421161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611db6565b60405180910390fd5b8060030160019054906101000a900460ff16156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490611e22565b60405180910390fd5b8060030160009054906101000a900460ff16156107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f690611eb4565b60405180910390fd5b60018160030160016101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3383600101546040518363ffffffff1660e01b815260040161087b929190611ed4565b6020604051808303816000875af115801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611f12565b507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516108ee9190611426565b60405180910390a15050565b60026020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461096290611867565b80601f016020809104026020016040519081016040528092919081815260200182805461098e90611867565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050908060050180546109f090611867565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90611867565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050908060060160009054906101000a900460ff16905087565b600060026000848152602001908152602001600020905060016003811115610ab157610ab061147d565b5b8160020160009054906101000a900460ff166003811115610ad557610ad461147d565b5b14610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90611f8b565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610b5757610b5661147d565b5b0217905550828260060160006101000a81548160ff02191690831515021790555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff8692408360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856005016040518363ffffffff1660e01b8152600401610bfc92919061202f565b6020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190612074565b90507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610c729291906120a1565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ee2e5230856001015484603c60006040518563ffffffff1660e01b8152600401610ce093929190612101565b60206040518083038185885af1158015610cfe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d239190612074565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663561b246382856001015460016040518463ffffffff1660e01b8152600401610d879392919061214b565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e84906121f4565b60405180910390fd5b8060030160019054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690611e22565b60405180910390fd5b8060030160009054906101000a900460ff1615610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890611eb4565b60405180910390fd5b8060020154421115610f56578142610f499190611b80565b8160020181905550610f6f565b818160020154610f669190611b80565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f9e9190611426565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16905085565b600061102b61109f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48383604051611091929190612214565b60405180910390a150919050565b60008060005b6001548110156111235760008082815260200190815260200160002060030160009054906101000a900460ff16611116576000808281526020019081526020016000206002015442116111165760008082815260200190815260200160002060010154826111139190611b80565b91505b80806001019150506110a5565b5060008111611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115e90612289565b60405180910390fd5b6000814461117591906122d8565b9050600080600090505b60015481101561120d5760008082815260200190815260200160002060030160009054906101000a900460ff16611200576000808281526020019081526020016000206002015442116112005760008082815260200190815260200160002060010154826111ed9190611b80565b9150828211156111ff5780945061120d565b5b808060010191505061117f565b5050505090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126112435761124261121e565b5b8235905067ffffffffffffffff8111156112605761125f611223565b5b60208301915083600182028301111561127c5761127b611228565b5b9250929050565b6000806020838503121561129a57611299611214565b5b600083013567ffffffffffffffff8111156112b8576112b7611219565b5b6112c48582860161122d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112fb826112d0565b9050919050565b61130b816112f0565b811461131657600080fd5b50565b60008135905061132881611302565b92915050565b6000819050919050565b6113418161132e565b811461134c57600080fd5b50565b60008135905061135e81611338565b92915050565b60008060006060848603121561137d5761137c611214565b5b600061138b86828701611319565b935050602061139c8682870161134f565b92505060406113ad8682870161134f565b9150509250925092565b6000806000604084860312156113d0576113cf611214565b5b60006113de8682870161134f565b935050602084013567ffffffffffffffff8111156113ff576113fe611219565b5b61140b8682870161122d565b92509250509250925092565b6114208161132e565b82525050565b600060208201905061143b6000830184611417565b92915050565b60006020828403121561145757611456611214565b5b60006114658482850161134f565b91505092915050565b611477816112f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106114bd576114bc61147d565b5b50565b60008190506114ce826114ac565b919050565b60006114de826114c0565b9050919050565b6114ee816114d3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561152e578082015181840152602081019050611513565b60008484015250505050565b6000601f19601f8301169050919050565b6000611556826114f4565b61156081856114ff565b9350611570818560208601611510565b6115798161153a565b840191505092915050565b60008115159050919050565b61159981611584565b82525050565b600060e0820190506115b4600083018a61146e565b6115c16020830189611417565b6115ce60408301886114e5565b6115db6060830187611417565b81810360808301526115ed818661154b565b905081810360a0830152611601818561154b565b905061161060c0830184611590565b98975050505050505050565b61162581611584565b811461163057600080fd5b50565b6000813590506116428161161c565b92915050565b6000806040838503121561165f5761165e611214565b5b600061166d8582860161134f565b925050602061167e85828601611633565b9150509250929050565b6000806040838503121561169f5761169e611214565b5b60006116ad8582860161134f565b92505060206116be8582860161134f565b9150509250929050565b600060a0820190506116dd600083018861146e565b6116ea6020830187611417565b6116f76040830186611417565b6117046060830185611590565b6117116080830184611590565b9695505050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b60006117516010836114ff565b915061175c8261171b565b602082019050919050565b6000602082019050818103600083015261178081611744565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c18261132e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117f3576117f2611787565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061187f57607f821691505b60208210810361189257611891611838565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026118fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826118bd565b61190486836118bd565b95508019841693508086168417925050509392505050565b6000819050919050565b600061194161193c6119378461132e565b61191c565b61132e565b9050919050565b6000819050919050565b61195b83611926565b61196f61196782611948565b8484546118ca565b825550505050565b600090565b611984611977565b61198f818484611952565b505050565b5b818110156119b3576119a860008261197c565b600181019050611995565b5050565b601f8211156119f8576119c981611898565b6119d2846118ad565b810160208510156119e1578190505b6119f56119ed856118ad565b830182611994565b50505b505050565b600082821c905092915050565b6000611a1b600019846008026119fd565b1980831691505092915050565b6000611a348383611a0a565b9150826002028217905092915050565b611a4e83836117fe565b67ffffffffffffffff811115611a6757611a66611809565b5b611a718254611867565b611a7c8282856119b7565b6000601f831160018114611aab5760008415611a99578287013590505b611aa38582611a28565b865550611b0b565b601f198416611ab986611898565b60005b82811015611ae157848901358255600182019150602085019450602081019050611abc565b86831015611afe5784890135611afa601f891682611a0a565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611b4a6011836114ff565b9150611b5582611b14565b602082019050919050565b60006020820190508181036000830152611b7981611b3d565b9050919050565b6000611b8b8261132e565b9150611b968361132e565b9250828201905080821115611bae57611bad611787565b5b92915050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000611bea6018836114ff565b9150611bf582611bb4565b602082019050919050565b60006020820190508181036000830152611c1981611bdd565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000611c7c603a836114ff565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f576f726b65722063616e206f6e6c79207265636c61696d207468656972206f7760008201527f6e20617661696c6162696c697479207374616b65000000000000000000000000602082015250565b6000611d0e6034836114ff565b9150611d1982611cb2565b604082019050919050565b60006020820190508181036000830152611d3d81611d01565b9050919050565b7f5374616b65206475726174696f6e20686173206e6f742079657420656c61707360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000611da06022836114ff565b9150611dab82611d44565b604082019050919050565b60006020820190508181036000830152611dcf81611d93565b9050919050565b7f5374616b652068617320616c7265616479206265656e207265636c61696d6564600082015250565b6000611e0c6020836114ff565b9150611e1782611dd6565b602082019050919050565b60006020820190508181036000830152611e3b81611dff565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000611e9e6024836114ff565b9150611ea982611e42565b604082019050919050565b60006020820190508181036000830152611ecd81611e91565b9050919050565b6000604082019050611ee9600083018561146e565b611ef66020830184611417565b9392505050565b600081519050611f0c8161161c565b92915050565b600060208284031215611f2857611f27611214565b5b6000611f3684828501611efd565b91505092915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f756020836114ff565b9150611f8082611f3f565b602082019050919050565b60006020820190508181036000830152611fa481611f68565b9050919050565b60008154611fb881611867565b611fc281866114ff565b94506001821660008114611fdd5760018114611ff357612026565b60ff198316865281151560200286019350612026565b611ffc85611898565b60005b8381101561201e57815481890152600182019150602081019050611fff565b808801955050505b50505092915050565b6000604082019050612044600083018561146e565b81810360208301526120568184611fab565b90509392505050565b60008151905061206e81611338565b92915050565b60006020828403121561208a57612089611214565b5b60006120988482850161205f565b91505092915050565b60006040820190506120b66000830185611417565b6120c36020830184611590565b9392505050565b600082825260208201905092915050565b50565b60006120eb6000836120ca565b91506120f6826120db565b600082019050919050565b60006080820190506121166000830186611417565b6121236020830185611417565b6121306040830184611590565b8181036060830152612141816120de565b9050949350505050565b60006060820190506121606000830186611417565b61216d6020830185611417565b61217a6040830184611590565b949350505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006121de6033836114ff565b91506121e982612182565b604082019050919050565b6000602082019050818103600083015261220d816121d1565b9050919050565b60006040820190506122296000830185611417565b6122366020830184611417565b9392505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612273601a836114ff565b915061227e8261223d565b602082019050919050565b600060208201905081810360008301526122a281612266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e38261132e565b91506122ee8361132e565b9250826122fe576122fd6122a9565b5b82820690509291505056fea2646970667358221220ccef70a4740c0ce61b640775d3b02203dffc0f23849fad430c5f5f66783a2b5164736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/client/src/contract-addresses.json b/client/src/contract-addresses.json index d3ba5e0..6cc29fa 100644 --- a/client/src/contract-addresses.json +++ b/client/src/contract-addresses.json @@ -1,12 +1,12 @@ { "localhost": { - "DAO": "0x691Bcb6a8378Cec103BE58Dfa037DC57E6FFf4d1", - "Work1": "0xC489CE618A049B413CE0AED9Fc7219a04510ddbb", - "Onboarding": "0x3477A098fBFe09aa26693012176baAEa16d9D2DA" + "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", + "Work1": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", + "Onboarding": "0xB8f0cd092979F273b752FDa060F82BF2745f192e" }, "sepolia": { "DAO": "0xc6b3b8A641c52F7bC13a9D444e1f0759CA3b87b4", - "Work1": "0x177bAcA9E50020F185551cDc43ce78bb840cfE7D", - "Onboarding": "0x635F46Ea745a14431B27c5dd5838306Be289B747" + "Work1": "0xd2845aE812Ee42cF024fB4C55c052365792aBd78", + "Onboarding": "0xf15aCe29E5e3e4bb31FCddF2C65DF7C440449a57" } } \ No newline at end of file diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index d3ba5e0..6cc29fa 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -1,12 +1,12 @@ { "localhost": { - "DAO": "0x691Bcb6a8378Cec103BE58Dfa037DC57E6FFf4d1", - "Work1": "0xC489CE618A049B413CE0AED9Fc7219a04510ddbb", - "Onboarding": "0x3477A098fBFe09aa26693012176baAEa16d9D2DA" + "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", + "Work1": "0x6c18eb38b7450F8DaE5A5928A40fcA3952493Ee4", + "Onboarding": "0xB8f0cd092979F273b752FDa060F82BF2745f192e" }, "sepolia": { "DAO": "0xc6b3b8A641c52F7bC13a9D444e1f0759CA3b87b4", - "Work1": "0x177bAcA9E50020F185551cDc43ce78bb840cfE7D", - "Onboarding": "0x635F46Ea745a14431B27c5dd5838306Be289B747" + "Work1": "0xd2845aE812Ee42cF024fB4C55c052365792aBd78", + "Onboarding": "0xf15aCe29E5e3e4bb31FCddF2C65DF7C440449a57" } } \ No newline at end of file diff --git a/ethereum/contracts/WorkContract.sol b/ethereum/contracts/WorkContract.sol index 635d99a..167b728 100644 --- a/ethereum/contracts/WorkContract.sol +++ b/ethereum/contracts/WorkContract.sol @@ -38,7 +38,7 @@ abstract contract WorkContract is IAcceptAvailability { uint public requestCount; // TODO: Make parameters configurable - uint constant POOL_DURATION = 1 days; + uint constant POOL_DURATION = 60; event AvailabilityStaked(uint stakeIndex); event WorkAssigned(uint requestIndex, uint stakeIndex); diff --git a/ethereum/package.json b/ethereum/package.json index 583dc99..9b0d79b 100644 --- a/ethereum/package.json +++ b/ethereum/package.json @@ -8,7 +8,10 @@ "automatic-staking-local": "hardhat run --network localhost scripts/automatic-staking.js", "automatic-staking-sepolia": "hardhat run --network sepolia scripts/automatic-staking.js", "deploy-local": "hardhat run --network localhost scripts/deploy.js", - "deploy-sepolia": "hardhat run --network sepolia scripts/deploy.js" + "deploy-sepolia": "hardhat run --network sepolia scripts/deploy.js", + "deploy-work-contracts-local": "hardhat run --network localhost scripts/deploy-work-contracts.js", + "deploy-work-contracts-sepolia": "hardhat run --network sepolia scripts/deploy-work-contracts.js", + "verify-sepolia": "hardhat run --network sepolia scripts/verify.js" }, "author": "", "license": "ISC", diff --git a/ethereum/scripts/deploy-onboarding.js b/ethereum/scripts/deploy-onboarding.js new file mode 100644 index 0000000..71688f7 --- /dev/null +++ b/ethereum/scripts/deploy-onboarding.js @@ -0,0 +1,10 @@ +const deployWorkContract = require('./util/deploy-work-contract'); + +async function main() { + await deployWorkContract('Onboarding'); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/ethereum/scripts/deploy-work-contracts.js b/ethereum/scripts/deploy-work-contracts.js new file mode 100644 index 0000000..db0c076 --- /dev/null +++ b/ethereum/scripts/deploy-work-contracts.js @@ -0,0 +1,11 @@ +const deployWorkContract = require('./util/deploy-work-contract'); + +async function main() { + await deployWorkContract('Work1'); + await deployWorkContract('Onboarding'); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/ethereum/scripts/deploy-work1.js b/ethereum/scripts/deploy-work1.js new file mode 100644 index 0000000..71688f7 --- /dev/null +++ b/ethereum/scripts/deploy-work1.js @@ -0,0 +1,10 @@ +const deployWorkContract = require('./util/deploy-work-contract'); + +async function main() { + await deployWorkContract('Onboarding'); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/ethereum/scripts/deploy.js b/ethereum/scripts/deploy.js index 94a293b..3ab1685 100644 --- a/ethereum/scripts/deploy.js +++ b/ethereum/scripts/deploy.js @@ -1,44 +1,12 @@ -const { ethers } = require('hardhat'); -const fs = require('fs'); - -const contractAddresses = require('../contract-addresses.json'); - -require('dotenv').config(); - -const network = process.env.HARDHAT_NETWORK; -const work1Price = process.env.WORK1_PRICE || 0.001; -const onboardingPrice = process.env.ONBOARDING_PRICE || '0.001'; +const deployWorkContract = require('./util/deploy-work-contract'); +const deployContract = require('./util/deploy-contract'); async function main() { - const dao = await ethers.deployContract('DAO'); - await dao.waitForDeployment(); - - console.log(`DAO deployed to ${dao.target}`); - contractAddresses[network].DAO = dao.target; - fs.copyFileSync('./artifacts/contracts/DAO.sol/DAO.json', '../client/src/assets/DAO.json'); - - const deployWorkContract = async (name, price) => { - const contract = await ethers.deployContract('Work1', [dao.target, price]); - await contract.waitForDeployment(); - console.log(`${name} deployed to ${contract.target}`); - contractAddresses[network][name] = contract.target; - fs.copyFileSync(`./artifacts/contracts/${name}.sol/${name}.json`, `../client/src/assets/${name}.json`); - }; - - await deployWorkContract('Work1', ethers.parseEther(work1Price)); - await deployWorkContract('Onboarding', ethers.parseEther(onboardingPrice)); - - fs.writeFileSync('../client/src/contract-addresses.json', JSON.stringify(contractAddresses, null, 2)); - console.log('Wrote file', fs.realpathSync('../client/src/contract-addresses.json')); - - fs.writeFileSync('./contract-addresses.json', JSON.stringify(contractAddresses, null, 2)); - console.log('Wrote file', fs.realpathSync('./contract-addresses.json')); - - console.log('Copied ABIs to', fs.realpathSync('../client/src/assets')); + await deployContract('DAO'); + await deployWorkContract('Work1'); + await deployWorkContract('Onboarding'); } -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. main().catch((error) => { console.error(error); process.exitCode = 1; diff --git a/ethereum/scripts/util/deploy-contract.js b/ethereum/scripts/util/deploy-contract.js new file mode 100644 index 0000000..f800083 --- /dev/null +++ b/ethereum/scripts/util/deploy-contract.js @@ -0,0 +1,25 @@ +const { ethers } = require('hardhat'); +const fs = require('fs'); + +const contractAddresses = require('../../contract-addresses.json'); +const writeContractAddresses = require('./write-contract-addresses'); + +require('dotenv').config(); + +const network = process.env.HARDHAT_NETWORK; + +const deployContract = async (name, args = []) => { + const contract = await ethers.deployContract(name, args); + await contract.waitForDeployment(); + console.log(`${name} deployed to ${contract.target}`); + contractAddresses[network][name] = contract.target; + + const from = `./artifacts/contracts/${name}.sol/${name}.json`; + const to = `../client/src/assets/${name}.json`; + fs.copyFileSync(from, to); + console.log(`Copied ${fs.realpathSync(from)} to ${fs.realpathSync(to)}`); + + writeContractAddresses(contractAddresses); +}; + +module.exports = deployContract; diff --git a/ethereum/scripts/util/deploy-work-contract.js b/ethereum/scripts/util/deploy-work-contract.js new file mode 100644 index 0000000..865f5e2 --- /dev/null +++ b/ethereum/scripts/util/deploy-work-contract.js @@ -0,0 +1,17 @@ +const { ethers } = require('hardhat'); +const deployContract = require('./deploy-contract'); + +const contractAddresses = require('../../contract-addresses.json'); + +require('dotenv').config(); + +const network = process.env.HARDHAT_NETWORK; + +const deployWorkContract = async (name) => { + const priceEnvVar = `${name.toUpperCase()}_PRICE`; + const price = ethers.parseEther(process.env[priceEnvVar] || 0.001); + + await deployContract(name, [contractAddresses[network].DAO, price]); +}; + +module.exports = deployWorkContract; diff --git a/ethereum/scripts/util/write-contract-addresses.js b/ethereum/scripts/util/write-contract-addresses.js new file mode 100644 index 0000000..40e682b --- /dev/null +++ b/ethereum/scripts/util/write-contract-addresses.js @@ -0,0 +1,11 @@ +const fs = require('fs'); + +const writeContractAddresses = (contractAddresses) => { + fs.writeFileSync('../client/src/contract-addresses.json', JSON.stringify(contractAddresses, null, 2)); + console.log('Wrote file', fs.realpathSync('../client/src/contract-addresses.json')); + + fs.writeFileSync('./contract-addresses.json', JSON.stringify(contractAddresses, null, 2)); + console.log('Wrote file', fs.realpathSync('./contract-addresses.json')); +}; + +module.exports = writeContractAddresses; diff --git a/ethereum/scripts/verify.js b/ethereum/scripts/verify.js new file mode 100644 index 0000000..dd37822 --- /dev/null +++ b/ethereum/scripts/verify.js @@ -0,0 +1,43 @@ +const { ethers, run } = require('hardhat'); + +const contractAddresses = require('../contract-addresses.json'); + +require('dotenv').config(); + +const network = process.env.HARDHAT_NETWORK; +const work1Price = ethers.parseEther(process.env.WORK1_PRICE || 0.001); +const onboardingPrice = ethers.parseEther(process.env.ONBOARDING_PRICE || '0.001'); + +async function main() { +// Unless deploying locally, run the verify task + if (network !== 'localhost') { + await run('verify:verify', { + address: contractAddresses[network].DAO, + }); + console.log('Verified DAO contract'); + + await run('verify:verify', { + address: contractAddresses[network].Work1, + constructorArguments: [ + contractAddresses[network].DAO, + work1Price, + ], + }); + console.log('Verified Work1 contract'); + + await run('verify:verify', { + address: contractAddresses[network].Onboarding, + constructorArguments: [ + contractAddresses[network].DAO, + onboardingPrice, + ], + }); + console.log('Verified Onboarding contract'); + } +} +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +});