bnpl
Version:
The smart contracts for bnpl
443 lines • 51.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ConduitController",
"sourceName": "contracts/conduit/ConduitController.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "CallerIsNotNewPotentialOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "CallerIsNotOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "ChannelOutOfRange",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "ConduitAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "InvalidCreator",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "address",
"name": "newPotentialOwner",
"type": "address"
}
],
"name": "NewPotentialOwnerAlreadySet",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "NewPotentialOwnerIsZeroAddress",
"type": "error"
},
{
"inputs": [],
"name": "NoConduit",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "NoPotentialOwnerCurrentlySet",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "conduitKey",
"type": "bytes32"
}
],
"name": "NewConduit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "newPotentialOwner",
"type": "address"
}
],
"name": "PotentialOwnerUpdated",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "cancelOwnershipTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "conduitKey",
"type": "bytes32"
},
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "createConduit",
"outputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "uint256",
"name": "channelIndex",
"type": "uint256"
}
],
"name": "getChannel",
"outputs": [
{
"internalType": "address",
"name": "channel",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "address",
"name": "channel",
"type": "address"
}
],
"name": "getChannelStatus",
"outputs": [
{
"internalType": "bool",
"name": "isOpen",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "getChannels",
"outputs": [
{
"internalType": "address[]",
"name": "channels",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "conduitKey",
"type": "bytes32"
}
],
"name": "getConduit",
"outputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "bool",
"name": "exists",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getConduitCodeHashes",
"outputs": [
{
"internalType": "bytes32",
"name": "creationCodeHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "runtimeCodeHash",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "getKey",
"outputs": [
{
"internalType": "bytes32",
"name": "conduitKey",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "getPotentialOwner",
"outputs": [
{
"internalType": "address",
"name": "potentialOwner",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "getTotalChannels",
"outputs": [
{
"internalType": "uint256",
"name": "totalChannels",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "address",
"name": "newPotentialOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "conduit",
"type": "address"
},
{
"internalType": "address",
"name": "channel",
"type": "address"
},
{
"internalType": "bool",
"name": "isOpen",
"type": "bool"
}
],
"name": "updateChannel",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60c060405234801561001057600080fd5b5060405161002060208201610088565b6020820181038252601f19601f82011660405250805190602001206080818152505060008060001b60405161005490610088565b8190604051809103906000f5905080158015610074573d6000803e3d6000fd5b506001600160a01b03163f60a05250610095565b610de48061225283390190565b60805160a05161217c6100d660003960008181610155015281816102f90152610c8a0152600081816101320152818161027c0152610c46015261217c6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636d4354211161008c5780637b37e561116100665780637b37e5611461035f5780638b9e028b14610372578063906c87cc1461039257806393790f44146103a557600080fd5b80636d435421146101fe5780636e9bfd9f14610211578063794593bc1461034c57600080fd5b806314afd79e116100c857806314afd79e1461019457806333bc8572146101a75780634e3f9580146101ca57806351710e45146101eb57600080fd5b8063027cc764146100ef5780630a96ad391461012c57806313ad9cab1461017f575b600080fd5b6101026100fd366004611165565b6103b8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b604080517f000000000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000602082015201610123565b61019261018d36600461118f565b6104a6565b005b6101026101a23660046111db565b610797565b6101ba6101b53660046111fd565b6107d1565b6040519015158152602001610123565b6101dd6101d83660046111db565b610819565b604051908152602001610123565b6101926101f93660046111db565b610850565b61019261020c3660046111fd565b6109d2565b61032061021f366004611230565b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000908190607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209373ffffffffffffffffffffffffffffffffffffffff85163f7f0000000000000000000000000000000000000000000000000000000000000000149350915050565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352901515602083015201610123565b61010261035a366004611249565b610b5d565b61019261036d3660046111db565b610e1f565b6103856103803660046111db565b610f1b565b604051610123919061126c565b6101026103a03660046111db565b610fb5565b6101dd6103b33660046111db565b610fef565b60006103c383611051565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902060030154808310610442576040517f6ceb340b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208190526040902060030180548490811061047c5761047c6112c6565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16949350505050565b6104af836110b0565b6040517fc4e8fcb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152821515602483015284169063c4e8fcb590604401600060405180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff83811660009081526020818152604080832093861683526004840190915290205480151583801561057c575080155b156105f1576003830180546001810182556000828152602080822090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16908117909155925492815260048601909152604090205561078f565b831580156105fc5750805b1561078f5760038301547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830190600090610639906001906112f5565b90508181146106f9576000856003018281548110610659576106596112c6565b60009182526020909120015460038701805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610697576106976112c6565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815260048701909152604090208490555b8460030180548061070c5761070c611333565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600487019052604081205550505b505050505050565b60006107a282611051565b5073ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020600101541690565b60006107dc83611051565b5073ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825260049092019091522054151590565b600061082482611051565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090206003015490565b61085981611051565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152602081905260409020600201541633146108d4576040517f88c3a11500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b6040516000907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a273ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408082206002810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560010154905133949190911692917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec91a473ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b6109db826110b0565b73ffffffffffffffffffffffffffffffffffffffff8116610a40576040517fa388d26300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610439565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260208190526040902060020154811690821603610ac6576040517fcbc080ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610439565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da90600090a273ffffffffffffffffffffffffffffffffffffffff918216600090815260208190526040902060020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600073ffffffffffffffffffffffffffffffffffffffff8216610bac576040517f99faaa0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606083901c3314610be9576040517fcb6e534400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021820152603581018490527f000000000000000000000000000000000000000000000000000000000000000060558201526075016040516020818303038152906040528051906020012060001c90507f00000000000000000000000000000000000000000000000000000000000000008173ffffffffffffffffffffffffffffffffffffffff163f03610d10576040517f6328ccb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b82604051610d1d90611134565b8190604051809103906000f5905080158015610d3d573d6000803e3d6000fd5b505073ffffffffffffffffffffffffffffffffffffffff818116600081815260208181526040918290206001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001695881695909517909455868455815192835282018690527f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15910160405180910390a160405173ffffffffffffffffffffffffffffffffffffffff808516916000918516907fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec908390a45092915050565b610e28816110b0565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526020819052604090206002015416610ea1576040517f6b01361600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b6040516000907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a273ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902060020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610f2682611051565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260409182902060030180548351818402810184019094528084529091830182828015610fa957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610f7e575b50505050509050919050565b6000610fc082611051565b5073ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020600201541690565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020548061104c576040517f4ca8209000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020546110ad576040517f4ca8209000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6110b981611051565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152602081905260409020600101541633146110ad576040517fd4ed9a1700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b610de48061136383390190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104c57600080fd5b6000806040838503121561117857600080fd5b61118183611141565b946020939093013593505050565b6000806000606084860312156111a457600080fd5b6111ad84611141565b92506111bb60208501611141565b9150604084013580151581146111d057600080fd5b809150509250925092565b6000602082840312156111ed57600080fd5b6111f682611141565b9392505050565b6000806040838503121561121057600080fd5b61121983611141565b915061122760208401611141565b90509250929050565b60006020828403121561124257600080fd5b5035919050565b6000806040838503121561125c57600080fd5b8235915061122760208401611141565b6020808252825182820181905260009190848201906040850190845b818110156112ba57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611288565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561132e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe60a060405234801561001057600080fd5b5033608052608051610db461003060003960006102a40152610db46000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634ce34aa214610051578063899e104c146100995780638df25d92146100ac578063c4e8fcb5146100bf575b600080fd5b61006461005f366004610b4f565b6100d4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b6100646100a7366004610bd6565b610175565b6100646100ba366004610c42565b610217565b6100d26100cd366004610ca1565b61028c565b005b6000336000526000602052604060002054610117577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8160005b8181101561014b5761014385858381811061013857610138610cdd565b905060c0020161040e565b60010161011b565b507f4ce34aa200000000000000000000000000000000000000000000000000000000949350505050565b60003360005260006020526040600020546101b8577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8360005b818110156101e1576101d987878381811061013857610138610cdd565b6001016101bc565b506101ec84846105ac565b507f899e104c0000000000000000000000000000000000000000000000000000000095945050505050565b600033600052600060205260406000205461025a577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b61026483836105ac565b507f8df25d920000000000000000000000000000000000000000000000000000000092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102fb576040517f6d5769be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481151560ff909116151503610386576040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152811515602482015260440160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b600161041d6020830183610d3b565b600381111561042e5761042e610d0c565b03610473576104706104466040830160208401610d63565b6104566060840160408501610d63565b6104666080850160608601610d63565b8460a00135610755565b50565b60026104826020830183610d3b565b600381111561049357610493610d0c565b03610513578060a001356001146104d6576040517fefcc00b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104706104e96040830160208401610d63565b6104f96060840160408501610d63565b6105096080850160608601610d63565b84608001356108c2565b60036105226020830183610d3b565b600381111561053357610533610d0c565b0361057a5761047061054b6040830160208401610d63565b61055b6060840160408501610d63565b61056b6080850160608601610d63565b84608001358560a001356109d1565b6040517f7932f1fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082807f2eb2c2d60000000000000000000000000000000000000000000000000000000060205260005b8381101561074857823582018035803b610618577f5f15d672000000000000000000000000000000000000000000000000000000006000528060045260246000fd5b60a08201356020810260c0018060808501351460a06060860135141681850135831416159050801561066e577feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fd5b506020860195506080602084016024376040810260400190508060a00160a45260008160c401528060c4018160a0850160c4376000808260206000875af1935083610739573d156106fe576020601f3d010491506020810482600302818411156106e657818403600302610200838002868002030401015b5a6020820110156106fb573d6000803e3d6000fd5b50505b7fafc445e2000000000000000000000000000000000000000000000000000000006000528260045260c0606452608451602001608452806000fd5b505050506001810190506105d6565b5050505060806040525050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000600052836004528260245281604452602060006064600080895af1803d15601f3d116001600051141617163d151581166108b25780873b1515166108b25780610884578161084a573d1561080b576020601f3d01046020840481600302818311156107f257818303600302610200838002858002030401015b5a602082011015610807573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005286600452856024528460445260006064528360845260a46000fd5b7f98891923000000000000000000000000000000000000000000000000000000006000528660045285602452846044528360645260846000fd5b7f5f15d672000000000000000000000000000000000000000000000000000000006000528660045260246000fd5b5050604052505060006060525050565b833b6108f6577f5f15d672000000000000000000000000000000000000000000000000000000006000528360045260246000fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000006000528360045282602452816044526000806064600080895af1806109c2573d15610983576020601f3d010460208304816003028183111561096a57818303600302610200838002858002030401015b5a60208201101561097f573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005285600452846024528360445282606452600160845260a46000fd5b50604052505060006060525050565b843b610a05577f5f15d672000000000000000000000000000000000000000000000000000000006000528460045260246000fd5b60405160805160a05160c0517ff242432a000000000000000000000000000000000000000000000000000000006000528760045286602452856044528460645260a0608452600060a45260008060c46000808d5af180610ae7573d15610aa9576020601f3d0104602086048160030281831115610a9057818303600302610200838002858002030401015b5a602082011015610aa5573d6000803e3d6000fd5b5050505b7ff486bc8700000000000000000000000000000000000000000000000000000000600052896004528860245287604452866064528560845260a46000fd5b5060809290925260a05260c05260405250506000606052505050565b60008083601f840112610b1557600080fd5b50813567ffffffffffffffff811115610b2d57600080fd5b60208301915083602060c083028501011115610b4857600080fd5b9250929050565b60008060208385031215610b6257600080fd5b823567ffffffffffffffff811115610b7957600080fd5b610b8585828601610b03565b90969095509350505050565b60008083601f840112610ba357600080fd5b50813567ffffffffffffffff811115610bbb57600080fd5b6020830191508360208260051b8501011115610b4857600080fd5b60008060008060408587031215610bec57600080fd5b843567ffffffffffffffff80821115610c0457600080fd5b610c1088838901610b03565b90965094506020870135915080821115610c2957600080fd5b50610c3687828801610b91565b95989497509550505050565b60008060208385031215610c5557600080fd5b823567ffffffffffffffff811115610c6c57600080fd5b610b8585828601610b91565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c9c57600080fd5b919050565b60008060408385031215610cb457600080fd5b610cbd83610c78565b915060208301358015158114610cd257600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610d4d57600080fd5b813560048110610d5c57600080fd5b9392505050565b600060208284031215610d7557600080fd5b610d5c82610c7856fea26469706673582212209cadd638170dc51bd1bcdf7a749c70a4b43d82a57f073a9e1a087a48e2f0ad0164736f6c634300080e0033a26469706673582212203e51fab416ef4d26ca77f6dc3a2fd30ecbe956e8141afc27f12ec350c563174d64736f6c634300080e003360a060405234801561001057600080fd5b5033608052608051610db461003060003960006102a40152610db46000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634ce34aa214610051578063899e104c146100995780638df25d92146100ac578063c4e8fcb5146100bf575b600080fd5b61006461005f366004610b4f565b6100d4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b6100646100a7366004610bd6565b610175565b6100646100ba366004610c42565b610217565b6100d26100cd366004610ca1565b61028c565b005b6000336000526000602052604060002054610117577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8160005b8181101561014b5761014385858381811061013857610138610cdd565b905060c0020161040e565b60010161011b565b507f4ce34aa200000000000000000000000000000000000000000000000000000000949350505050565b60003360005260006020526040600020546101b8577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8360005b818110156101e1576101d987878381811061013857610138610cdd565b6001016101bc565b506101ec84846105ac565b507f899e104c0000000000000000000000000000000000000000000000000000000095945050505050565b600033600052600060205260406000205461025a577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b61026483836105ac565b507f8df25d920000000000000000000000000000000000000000000000000000000092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102fb576040517f6d5769be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481151560ff909116151503610386576040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152811515602482015260440160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b600161041d6020830183610d3b565b600381111561042e5761042e610d0c565b03610473576104706104466040830160208401610d63565b6104566060840160408501610d63565b6104666080850160608601610d63565b8460a00135610755565b50565b60026104826020830183610d3b565b600381111561049357610493610d0c565b03610513578060a001356001146104d6576040517fefcc00b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104706104e96040830160208401610d63565b6104f96060840160408501610d63565b6105096080850160608601610d63565b84608001356108c2565b60036105226020830183610d3b565b600381111561053357610533610d0c565b0361057a5761047061054b6040830160208401610d63565b61055b6060840160408501610d63565b61056b6080850160608601610d63565b84608001358560a001356109d1565b6040517f7932f1fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082807f2eb2c2d60000000000000000000000000000000000000000000000000000000060205260005b8381101561074857823582018035803b610618577f5f15d672000000000000000000000000000000000000000000000000000000006000528060045260246000fd5b60a08201356020810260c0018060808501351460a06060860135141681850135831416159050801561066e577feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fd5b506020860195506080602084016024376040810260400190508060a00160a45260008160c401528060c4018160a0850160c4376000808260206000875af1935083610739573d156106fe576020601f3d010491506020810482600302818411156106e657818403600302610200838002868002030401015b5a6020820110156106fb573d6000803e3d6000fd5b50505b7fafc445e2000000000000000000000000000000000000000000000000000000006000528260045260c0606452608451602001608452806000fd5b505050506001810190506105d6565b5050505060806040525050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000600052836004528260245281604452602060006064600080895af1803d15601f3d116001600051141617163d151581166108b25780873b1515166108b25780610884578161084a573d1561080b576020601f3d01046020840481600302818311156107f257818303600302610200838002858002030401015b5a602082011015610807573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005286600452856024528460445260006064528360845260a46000fd5b7f98891923000000000000000000000000000000000000000000000000000000006000528660045285602452846044528360645260846000fd5b7f5f15d672000000000000000000000000000000000000000000000000000000006000528660045260246000fd5b5050604052505060006060525050565b833b6108f6577f5f15d672000000000000000000000000000000000000000000000000000000006000528360045260246000fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000006000528360045282602452816044526000806064600080895af1806109c2573d15610983576020601f3d010460208304816003028183111561096a57818303600302610200838002858002030401015b5a60208201101561097f573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005285600452846024528360445282606452600160845260a46000fd5b50604052505060006060525050565b843b610a05577f5f15d672000000000000000000000000000000000000000000000000000000006000528460045260246000fd5b60405160805160a05160c0517ff242432a000000000000000000000000000000000000000000000000000000006000528760045286602452856044528460645260a0608452600060a45260008060c46000808d5af180610ae7573d15610aa9576020601f3d0104602086048160030281831115610a9057818303600302610200838002858002030401015b5a602082011015610aa5573d6000803e3d6000fd5b5050505b7ff486bc8700000000000000000000000000000000000000000000000000000000600052896004528860245287604452866064528560845260a46000fd5b5060809290925260a05260c05260405250506000606052505050565b60008083601f840112610b1557600080fd5b50813567ffffffffffffffff811115610b2d57600080fd5b60208301915083602060c083028501011115610b4857600080fd5b9250929050565b60008060208385031215610b6257600080fd5b823567ffffffffffffffff811115610b7957600080fd5b610b8585828601610b03565b90969095509350505050565b60008083601f840112610ba357600080fd5b50813567ffffffffffffffff811115610bbb57600080fd5b6020830191508360208260051b8501011115610b4857600080fd5b60008060008060408587031215610bec57600080fd5b843567ffffffffffffffff80821115610c0457600080fd5b610c1088838901610b03565b90965094506020870135915080821115610c2957600080fd5b50610c3687828801610b91565b95989497509550505050565b60008060208385031215610c5557600080fd5b823567ffffffffffffffff811115610c6c57600080fd5b610b8585828601610b91565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c9c57600080fd5b919050565b60008060408385031215610cb457600080fd5b610cbd83610c78565b915060208301358015158114610cd257600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610d4d57600080fd5b813560048110610d5c57600080fd5b9392505050565b600060208284031215610d7557600080fd5b610d5c82610c7856fea26469706673582212209cadd638170dc51bd1bcdf7a749c70a4b43d82a57f073a9e1a087a48e2f0ad0164736f6c634300080e0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636d4354211161008c5780637b37e561116100665780637b37e5611461035f5780638b9e028b14610372578063906c87cc1461039257806393790f44146103a557600080fd5b80636d435421146101fe5780636e9bfd9f14610211578063794593bc1461034c57600080fd5b806314afd79e116100c857806314afd79e1461019457806333bc8572146101a75780634e3f9580146101ca57806351710e45146101eb57600080fd5b8063027cc764146100ef5780630a96ad391461012c57806313ad9cab1461017f575b600080fd5b6101026100fd366004611165565b6103b8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b604080517f000000000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000602082015201610123565b61019261018d36600461118f565b6104a6565b005b6101026101a23660046111db565b610797565b6101ba6101b53660046111fd565b6107d1565b6040519015158152602001610123565b6101dd6101d83660046111db565b610819565b604051908152602001610123565b6101926101f93660046111db565b610850565b61019261020c3660046111fd565b6109d2565b61032061021f366004611230565b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000908190607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209373ffffffffffffffffffffffffffffffffffffffff85163f7f0000000000000000000000000000000000000000000000000000000000000000149350915050565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352901515602083015201610123565b61010261035a366004611249565b610b5d565b61019261036d3660046111db565b610e1f565b6103856103803660046111db565b610f1b565b604051610123919061126c565b6101026103a03660046111db565b610fb5565b6101dd6103b33660046111db565b610fef565b60006103c383611051565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902060030154808310610442576040517f6ceb340b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208190526040902060030180548490811061047c5761047c6112c6565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16949350505050565b6104af836110b0565b6040517fc4e8fcb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152821515602483015284169063c4e8fcb590604401600060405180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff83811660009081526020818152604080832093861683526004840190915290205480151583801561057c575080155b156105f1576003830180546001810182556000828152602080822090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16908117909155925492815260048601909152604090205561078f565b831580156105fc5750805b1561078f5760038301547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830190600090610639906001906112f5565b90508181146106f9576000856003018281548110610659576106596112c6565b60009182526020909120015460038701805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610697576106976112c6565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff94851617905592909116815260048701909152604090208490555b8460030180548061070c5761070c611333565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600487019052604081205550505b505050505050565b60006107a282611051565b5073ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020600101541690565b60006107dc83611051565b5073ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825260049092019091522054151590565b600061082482611051565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090206003015490565b61085981611051565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152602081905260409020600201541633146108d4576040517f88c3a11500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b6040516000907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a273ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408082206002810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560010154905133949190911692917fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec91a473ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902060010180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b6109db826110b0565b73ffffffffffffffffffffffffffffffffffffffff8116610a40576040517fa388d26300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610439565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260208190526040902060020154811690821603610ac6576040517fcbc080ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610439565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da90600090a273ffffffffffffffffffffffffffffffffffffffff918216600090815260208190526040902060020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600073ffffffffffffffffffffffffffffffffffffffff8216610bac576040517f99faaa0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606083901c3314610be9576040517fcb6e534400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166021820152603581018490527f000000000000000000000000000000000000000000000000000000000000000060558201526075016040516020818303038152906040528051906020012060001c90507f00000000000000000000000000000000000000000000000000000000000000008173ffffffffffffffffffffffffffffffffffffffff163f03610d10576040517f6328ccb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b82604051610d1d90611134565b8190604051809103906000f5905080158015610d3d573d6000803e3d6000fd5b505073ffffffffffffffffffffffffffffffffffffffff818116600081815260208181526040918290206001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001695881695909517909455868455815192835282018690527f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15910160405180910390a160405173ffffffffffffffffffffffffffffffffffffffff808516916000918516907fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec908390a45092915050565b610e28816110b0565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526020819052604090206002015416610ea1576040517f6b01361600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b6040516000907f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da908290a273ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902060020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610f2682611051565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260409182902060030180548351818402810184019094528084529091830182828015610fa957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610f7e575b50505050509050919050565b6000610fc082611051565b5073ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020600201541690565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020548061104c576040517f4ca8209000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020546110ad576040517f4ca8209000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6110b981611051565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152602081905260409020600101541633146110ad576040517fd4ed9a1700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610439565b610de48061136383390190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104c57600080fd5b6000806040838503121561117857600080fd5b61118183611141565b946020939093013593505050565b6000806000606084860312156111a457600080fd5b6111ad84611141565b92506111bb60208501611141565b9150604084013580151581146111d057600080fd5b809150509250925092565b6000602082840312156111ed57600080fd5b6111f682611141565b9392505050565b6000806040838503121561121057600080fd5b61121983611141565b915061122760208401611141565b90509250929050565b60006020828403121561124257600080fd5b5035919050565b6000806040838503121561125c57600080fd5b8235915061122760208401611141565b6020808252825182820181905260009190848201906040850190845b818110156112ba57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611288565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561132e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe60a060405234801561001057600080fd5b5033608052608051610db461003060003960006102a40152610db46000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634ce34aa214610051578063899e104c146100995780638df25d92146100ac578063c4e8fcb5146100bf575b600080fd5b61006461005f366004610b4f565b6100d4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390f35b6100646100a7366004610bd6565b610175565b6100646100ba366004610c42565b610217565b6100d26100cd366004610ca1565b61028c565b005b6000336000526000602052604060002054610117577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8160005b8181101561014b5761014385858381811061013857610138610cdd565b905060c0020161040e565b60010161011b565b507f4ce34aa200000000000000000000000000000000000000000000000000000000949350505050565b60003360005260006020526040600020546101b8577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b8360005b818110156101e1576101d987878381811061013857610138610cdd565b6001016101bc565b506101ec84846105ac565b507f899e104c0000000000000000000000000000000000000000000000000000000095945050505050565b600033600052600060205260406000205461025a577f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b61026483836105ac565b507f8df25d920000000000000000000000000000000000000000000000000000000092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102fb576040517f6d5769be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481151560ff909116151503610386576040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152811515602482015260440160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e2910160405180910390a25050565b600161041d6020830183610d3b565b600381111561042e5761042e610d0c565b03610473576104706104466040830160208401610d63565b6104566060840160408501610d63565b6104666080850160608601610d63565b8460a00135610755565b50565b60026104826020830183610d3b565b600381111561049357610493610d0c565b03610513578060a001356001146104d6576040517fefcc00b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104706104e96040830160208401610d63565b6104f96060840160408501610d63565b6105096080850160608601610d63565b84608001356108c2565b60036105226020830183610d3b565b600381111561053357610533610d0c565b0361057a5761047061054b6040830160208401610d63565b61055b6060840160408501610d63565b61056b6080850160608601610d63565b84608001358560a001356109d1565b6040517f7932f1fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082807f2eb2c2d60000000000000000000000000000000000000000000000000000000060205260005b8381101561074857823582018035803b610618577f5f15d672000000000000000000000000000000000000000000000000000000006000528060045260246000fd5b60a08201356020810260c0018060808501351460a06060860135141681850135831416159050801561066e577feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fd5b506020860195506080602084016024376040810260400190508060a00160a45260008160c401528060c4018160a0850160c4376000808260206000875af1935083610739573d156106fe576020601f3d010491506020810482600302818411156106e657818403600302610200838002868002030401015b5a6020820110156106fb573d6000803e3d6000fd5b50505b7fafc445e2000000000000000000000000000000000000000000000000000000006000528260045260c0606452608451602001608452806000fd5b505050506001810190506105d6565b5050505060806040525050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000600052836004528260245281604452602060006064600080895af1803d15601f3d116001600051141617163d151581166108b25780873b1515166108b25780610884578161084a573d1561080b576020601f3d01046020840481600302818311156107f257818303600302610200838002858002030401015b5a602082011015610807573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005286600452856024528460445260006064528360845260a46000fd5b7f98891923000000000000000000000000000000000000000000000000000000006000528660045285602452846044528360645260846000fd5b7f5f15d672000000000000000000000000000000000000000000000000000000006000528660045260246000fd5b5050604052505060006060525050565b833b6108f6577f5f15d672000000000000000000000000000000000000000000000000000000006000528360045260246000fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000006000528360045282602452816044526000806064600080895af1806109c2573d15610983576020601f3d010460208304816003028183111561096a57818303600302610200838002858002030401015b5a60208201101561097f573d6000803e3d6000fd5b5050505b7ff486bc870000000000000000000000000000000000000000000000000000000060005285600452846024528360445282606452600160845260a46000fd5b50604052505060006060525050565b843b610a05577f5f15d672000000000000000000000000000000000000000000000000000000006000528460045260246000fd5b60405160805160a05160c0517ff242432a000000000000000000000000000000000000000000000000000000006000528760045286602452856044528460645260a0608452600060a45260008060c46000808d5af180610ae7573d15610aa9576020601f3d0104602086048160030281831115610a9057818303600302610200838002858002030401015b5a602082011015610aa5573d6000803e3d6000fd5b5050505b7ff486bc8700000000000000000000000000000000000000000000000000000000600052896004528860245287604452866064528560845260a46000fd5b5060809290925260a05260c05260405250506000606052505050565b60008083601f840112610b1557600080fd5b50813567ffffffffffffffff811115610b2d57600080fd5b60208301915083602060c083028501011115610b4857600080fd5b9250929050565b60008060208385031215610b6257600080fd5b823567ffffffffffffffff811115610b7957600080fd5b610b8585828601610b03565b90969095509350505050565b60008083601f840112610ba357600080fd5b50813567ffffffffffffffff811115610bbb57600080fd5b6020830191508360208260051b8501011115610b4857600080fd5b