0 txs
1.3k calls
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
claims
viewfunction claims(address, address) view returns (uint256)
commitIds
viewfunction commitIds() view returns (uint256)
commits
viewfunction commits(uint256) view returns (address creator, string metadataURI, uint256 joinBefore, uint256 verifyBefore, uint256 maxParticipants, tuple joinVerifier, tuple fulfillVerifier, address token, uint256 stake, uint256 fee, tuple client)
config
viewfunction config() view returns (uint256 maxCommitDuration, string baseURI, tuple fee)
exists
viewfunction exists(uint256 id) view returns (bool)
funds
viewfunction funds(address, uint256) view returns (uint256)
fundsByAddress
viewfunction fundsByAddress(address, uint256, address) view returns (uint256)
getApprovedTokens
viewfunction getApprovedTokens() view returns (address[])
getCommit
viewfunction getCommit(uint256 commitId) view returns (tuple commit)
getCommitTokens
viewfunction getCommitTokens(uint256 commitId) view returns (address[])
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
MAX_SHARE_BPS
viewfunction MAX_SHARE_BPS() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
participants
viewfunction participants(uint256, address) view returns (uint8)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rewards
viewfunction rewards(address, uint256) view returns (uint256)
status
viewfunction status(uint256) view returns (uint8)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
uri
viewfunction uri(uint256) view returns (string)
verifiedCount
viewfunction verifiedCount(uint256) view returns (uint256)
approveToken
nonpayablefunction approveToken(address token, bool isApproved)
cancel
nonpayablefunction cancel(uint256 commitId)
claim
payablefunction claim(uint256 commitId, address participant) payable
claimFees
payablefunction claimFees(address token) payable
create
payablefunction create(tuple commit) payable returns (uint256)
distribute
nonpayablefunction distribute(uint256 commitId, address token)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
fund
payablefunction fund(uint256 commitId, address token, uint256 amount) payable
initialize
nonpayablefunction initialize(address initialOwner)
join
payablefunction join(uint256 commitId, bytes data) payable
pause
nonpayablefunction pause()
refund
nonpayablefunction refund(uint256 commitId)
renounceOwnership
nonpayablefunction renounceOwnership()
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setProtocolConfig
nonpayablefunction setProtocolConfig(tuple _c)
setURI
nonpayablefunction setURI(string uri)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
verify
payablefunction verify(uint256 commitId, address participant, bytes data) payable returns (bool)
verifyOverride
nonpayablefunction verifyOverride(uint256 commitId, address participant)
withdraw
payablefunction withdraw(uint256 commitId, address token) payable
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
Cancelled
event Cancelled(uint256 indexed commitId)
Claimed
event Claimed(uint256 indexed commitId, address indexed participant, address indexed token, uint256 amount)
ClaimedFees
event ClaimedFees(address indexed recipient, address indexed token, uint256 amount)
Created
event Created(uint256 indexed commitId, (address creator, string metadataURI, uint256 joinBefore, uint256 verifyBefore, uint256 maxParticipants, (address target, bytes data) joinVerifier, (address target, bytes data) fulfillVerifier, address token, uint256 stake, uint256 fee, (address recipient, uint256 shareBps) client) config)
Funded
event Funded(uint256 indexed commitId, address indexed funder, address indexed token, uint256 amount)
Initialized
event Initialized(uint64 version)
Joined
event Joined(uint256 indexed commitId, address indexed participant)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Refunded
event Refunded(uint256 indexed commitId, address indexed participant, address indexed token, uint256 amount)
TokenApproved
event TokenApproved(address indexed token, bool isApproved)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
Verified
event Verified(uint256 indexed commitId, address indexed participant, bool isVerified)
Withdraw
event Withdraw(uint256 indexed commitId, address indexed recipient, address indexed token, uint256 amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
CommitClosed
error CommitClosed(uint256 commitId, string phase)
EnforcedPause
error EnforcedPause()
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientAmount
error InsufficientAmount()
InvalidCommitConfig
error InvalidCommitConfig(string reason)
InvalidCommitCreator
error InvalidCommitCreator(uint256 commitId)
InvalidCommitStatus
error InvalidCommitStatus(uint256 commitId, string reason)
InvalidInitialization
error InvalidInitialization()
InvalidParticipantStatus
error InvalidParticipantStatus(uint256 commitId, address participant, string reason)
MaxParticipantsReached
error MaxParticipantsReached(uint256 commitId)
MaxShareReached
error MaxShareReached()
NotInitializing
error NotInitializing()
NoVerified
error NoVerified(uint256 commitId)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenNotApproved
error TokenNotApproved(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516156926100f95f395f81816130cd015281816130f6015261323501526156925ff3fe6080604052600436106102f1575f3560e01c806379502c5511610189578063b7b9f7d5116100d8578063da81804d11610092578063e985e9c51161006d578063e985e9c51461099e578063f242432a146109bd578063f2fde38b146109dc578063fcdbb8af146109fb575f5ffd5b8063da81804d14610957578063ddd5e1b21461096c578063e1fa8b021461097f575f5ffd5b8063b7b9f7d514610846578063b933ceac14610859578063bd85b0391461088f578063c4d66de8146108c6578063c7c4a615146108e5578063d1df0f731461091b575f5ffd5b806395d140a1116101435780639c9b96f01161011e5780639c9b96f0146107c5578063a22cb465146107d8578063ad3cb1cc146107f7578063b5d1f5c214610827575f5ffd5b806395d140a11461078b57806395d89b411461079e578063998cfe50146107b2575f5ffd5b806379502c551461068e5780638456cb59146106b157806388b22c24146106c55780638da5cb5b146106fb57806390d83f471461074157806395ccea671461076c575f5ffd5b80633f733c6b1161024557806352d1902d116101ff57806365f267be116101da57806365f267be146106255780636afc0c5f1461063a578063715018a61461065b578063780757f11461066f575f5ffd5b806352d1902d146105cf5780635c975abb146105e35780635e297deb14610606575f5ffd5b80633f733c6b146104c757806340e58ee5146104fd57806342d21ef71461051c5780634e1273f4146105575780634f1ef286146105835780634f558e7914610596575f5ffd5b80630c0e0cef116102b057806318160ddd1161028b57806318160ddd14610442578063278ecde1146104755780632eb2c2d6146104945780633f4ba83a146104b3575f5ffd5b80630c0e0cef146103f15780630e89341c1461041057806315a0ea6a1461042f575f5ffd5b8062f714ce146102f5578062fdd58e1461030a57806301ffc9a71461033c57806302e060c61461036b57806302fe5305146103b157806306fdde03146103d0575b5f5ffd5b61030861030336600461421f565b610a27565b005b348015610315575f5ffd5b5061032961032436600461424d565b610d0b565b6040519081526020015b60405180910390f35b348015610347575f5ffd5b5061035b61035636600461428c565b610d40565b6040519015158152602001610333565b348015610376575f5ffd5b506103a461038536600461421f565b600860209081525f928352604080842090915290825290205460ff1681565b60405161033391906142bb565b3480156103bc575f5ffd5b506103086103cb366004614371565b610d8f565b3480156103db575f5ffd5b506103e4610da3565b60405161033391906143e3565b3480156103fc575f5ffd5b5061030861040b366004614402565b610e2f565b34801561041b575f5ffd5b506103e461042a36600461442e565b610ea1565b61030861043d366004614445565b610f63565b34801561044d575f5ffd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610329565b348015610480575f5ffd5b5061030861048f36600461442e565b610ff5565b34801561049f575f5ffd5b506103086104ae36600461450a565b61116e565b3480156104be575f5ffd5b506103086111d5565b3480156104d2575f5ffd5b506103296104e13660046145ba565b600b60209081525f928352604080842090915290825290205481565b348015610508575f5ffd5b5061030861051736600461442e565b6111e7565b348015610527575f5ffd5b5061054a61053636600461442e565b60076020525f908152604090205460ff1681565b60405161033391906145e6565b348015610562575f5ffd5b506105766105713660046145fa565b61128a565b60405161033391906146f7565b610308610591366004614709565b611354565b3480156105a1575f5ffd5b5061035b6105b036600461442e565b5f9081525f51602061563d5f395f51905f526020526040902054151590565b3480156105da575f5ffd5b5061032961136f565b3480156105ee575f5ffd5b505f5160206155fd5f395f51905f525460ff1661035b565b348015610611575f5ffd5b5061030861062036600461474b565b61138a565b348015610630575f5ffd5b506103296105dc81565b348015610645575f5ffd5b5061064e6113a3565b6040516103339190614781565b348015610666575f5ffd5b506103086113b4565b34801561067a575f5ffd5b5061030861068936600461421f565b6113c5565b348015610699575f5ffd5b506106a26114a7565b604051610333939291906147cc565b3480156106bc575f5ffd5b5061030861156b565b3480156106d0575f5ffd5b506103296106df36600461424d565b600960209081525f928352604080842090915290825290205481565b348015610706575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610333565b34801561074c575f5ffd5b5061032961075b36600461442e565b600d6020525f908152604090205481565b348015610777575f5ffd5b5061030861078636600461424d565b61157b565b610308610799366004614811565b61158e565b3480156107a9575f5ffd5b506103e461178c565b6103296107c0366004614846565b611799565b6103086107d33660046148c1565b6119ad565b3480156107e3575f5ffd5b506103086107f2366004614402565b611ec8565b348015610802575f5ffd5b506103e4604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610832575f5ffd5b5061064e61084136600461442e565b611ed3565b61035b610854366004614908565b611eec565b348015610864575f5ffd5b5061032961087336600461424d565b600c60209081525f928352604080842090915290825290205481565b34801561089a575f5ffd5b506103296108a936600461442e565b5f9081525f51602061563d5f395f51905f52602052604090205490565b3480156108d1575f5ffd5b506103086108e0366004614445565b6121b1565b3480156108f0575f5ffd5b506109046108ff36600461442e565b612341565b6040516103339b9a99989796959493929190614985565b348015610926575f5ffd5b50610329610935366004614a2e565b600a60209081525f938452604080852082529284528284209052825290205481565b348015610962575f5ffd5b5061032960055481565b61030861097a36600461421f565b6125ad565b34801561098a575f5ffd5b5061030861099936600461421f565b6127c0565b3480156109a9575f5ffd5b5061035b6109b83660046145ba565b612a15565b3480156109c8575f5ffd5b506103086109d7366004614a6d565b612a61565b3480156109e7575f5ffd5b506103086109f6366004614445565b612ac0565b348015610a06575f5ffd5b50610a1a610a1536600461442e565b612afa565b6040516103339190614ac4565b610a2f612e0d565b610a37612e3d565b80610a43600e82612e74565b610a70576040516343c90fad60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b5f610a7a84612afa565b90505f5f8581526007602052604090205460ff166001811115610a9f57610a9f6142a7565b14158015610acf575060015f8581526007602052604090205460ff166001811115610acc57610acc6142a7565b14155b15610b2657836040516316f1581b60e01b8152600401610a67918152604060208201819052601c908201527f6d7573742062652063726561746564206f722063616e63656c6c656400000000606082015260800190565b80604001514210610b6a5783604051633901964f60e11b8152600401610a67918152604060208201819052600490820152633537b4b760e11b606082015260800190565b6001600160a01b0383165f908152600a602090815260408083208784528252808320338085529083528184205488855260088452828520918552925282205490919060ff166003811115610bc057610bc06142a7565b14610bfe57816101000151811015610beb57604051632ca2f52b60e11b815260040160405180910390fd5b610100820151610bfb9082614bc5565b90505b805f03610c1e57604051632ca2f52b60e11b815260040160405180910390fd5b6001600160a01b0384165f90815260096020908152604080832088845290915281208054839290610c50908490614bc5565b90915550506001600160a01b0384165f908152600a60209081526040808320888452825280832033845290915281208054839290610c8f908490614bc5565b90915550610ca09050843383612e98565b836001600160a01b0316336001600160a01b0316867ffeb2000dca3e617cd6f3a8bbb63014bb54a124aac6ccbf73ee7229b4cd01f12084604051610ce691815260200190565b60405180910390a4505050610d0760015f51602061561d5f395f51905f5255565b5050565b5f8181525f5160206155dd5f395f51905f52602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216636cdb3d1360e11b1480610d7057506001600160e01b031982166303a24d0760e21b145b80610d3a57506301ffc9a760e01b6001600160e01b0319831614610d3a565b610d97612f42565b610da081612f9d565b50565b60118054610db090614bd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc90614bd8565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b505050505081565b610e37612f42565b80610e4c57610e47600e83612fd6565b610e57565b610e57600e83612fea565b50816001600160a01b03167f54aee4f020b814c26f556399a354577e068193a82445e919505b00b9848512a582604051610e95911515815260200190565b60405180910390a25050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450280546060915f5160206155dd5f395f51905f5291610edf90614bd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b90614bd8565b8015610f565780601f10610f2d57610100808354040283529160200191610f56565b820191905f5260205f20905b815481529060010190602001808311610f3957829003601f168201915b5050505050915050919050565b610f6b612e3d565b6001600160a01b0381165f908152600b6020908152604080832033808552925282208054929055610f9e90839083612e98565b6040518181526001600160a01b0383169033907f96a69c5a8ebec636d3dc1deebd547650e1c4775b14ab56299082fac4328f5c989060200160405180910390a350610da060015f51602061561d5f395f51905f5255565b610ffd612e3d565b5f61100782612afa565b905060015f8381526007602052604090205460ff16600181111561102d5761102d6142a7565b1461107457816040516316f1581b60e01b8152600401610a67918152604060208201819052600d908201526c1b9bdd0b58d85b98d95b1b1959609a1b606082015260800190565b60e0810180516001600160a01b039081165f908152600a60208181526040808420888552825280842033808652908352818520548751871686529383528185208986528352818520908552825280842084905594519093168252600983528382208683529092529182208054919283926110ef908490614bc5565b909155505060e0820151611104903383612e98565b8160e001516001600160a01b0316336001600160a01b0316847f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a38460405161114e91815260200190565b60405180910390a45050610da060015f51602061561d5f395f51905f5255565b336001600160a01b038616811480159061118f575061118d8682612a15565b155b156111c05760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610a67565b6111cd8686868686612ffe565b505050505050565b6111dd612f42565b6111e5613063565b565b5f6111f182612afa565b80519091506001600160a01b03163314611221576040516338ba02f160e21b815260048101839052602401610a67565b806060015142106112475781604051633901964f60e11b8152600401610a679190614c0a565b5f82815260076020526040808220805460ff191660011790555183917fc41d93b8bfbf9fd7cf5bfe271fd649ab6a6fec0ea101c23b82a2a28eca2533a991a25050565b606081518351146112bb5781518351604051635b05999160e01b815260048101929092526024820152604401610a67565b5f83516001600160401b038111156112d5576112d56142d5565b6040519080825280602002602001820160405280156112fe578160200160208202803683370190505b5090505f5b845181101561134c5760208082028601015161132790602080840287010151610d0b565b82828151811061133957611339614c31565b6020908102919091010152600101611303565b509392505050565b61135c6130c2565b61136582613166565b610d07828261316e565b5f61137861322a565b505f5160206155bd5f395f51905f5290565b611392612f42565b805f61139e8282614ded565b505050565b60606113af600e613273565b905090565b6113bc612f42565b6111e55f61327f565b6113cd612f42565b60025f8381526008602090815260408083206001600160a01b038616845290915290205460ff166003811115611405576114056142a7565b0361145c5760405163cc3f705d60e01b8152600481018390526001600160a01b038216602482015260606044820152601060648201526f185b1c9958591e4b5d995c9a599a595960821b608482015260a401610a67565b5f8281526008602090815260408083206001600160a01b03851684528252808320805460ff19166002179055848352600d909152812080549161149e83614ec5565b91905055505050565b5f8054600180549192916114ba90614bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546114e690614bd8565b80156115315780601f1061150857610100808354040283529160200191611531565b820191905f5260205f20905b81548152906001019060200180831161151457829003601f168201915b50506040805160608101825260028701546001600160a01b0316815260038701546020820152600490960154908601525091929150849050565b611573612f42565b6111e56132ef565b611583612f42565b610d07823383612e98565b611596612e0d565b61159e612e3d565b816115aa600e82612e74565b6115d2576040516343c90fad60e11b81526001600160a01b0382166004820152602401610a67565b5f6115dc85612afa565b90505f5f8681526007602052604090205460ff166001811115611601576116016142a7565b1461162157846040516316f1581b60e01b8152600401610a679190614edd565b60015f8681526007602052604090205460ff166001811115611645576116456142a7565b0361166557846040516316f1581b60e01b8152600401610a679190614f09565b8060600151421061168b5784604051633901964f60e11b8152600401610a679190614c0a565b5f8581526010602052604090206116a29085612fea565b506001600160a01b0384165f908152600960209081526040808320888452909152812080548592906116d5908490614f33565b90915550506001600160a01b0384165f908152600a60209081526040808320888452825280832033845290915281208054859290611714908490614f33565b90915550611726905084333086613337565b836001600160a01b0316336001600160a01b0316867f88548ff72495a49690758b4b6ec6187b26cb434e14356531e00af0a28bbf315f8660405161176c91815260200190565b60405180910390a4505061139e60015f51602061561d5f395f51905f5255565b60128054610db090614bd8565b5f6117a2612e0d565b6117b3610100830160e08401614445565b6117be600e82612e74565b6117e6576040516343c90fad60e11b81526001600160a01b0382166004820152602401610a67565b6004546105dc906117fd9061016086013590614f33565b111561181c57604051635102eb4960e11b815260040160405180910390fd5b82604001354210158061183757508260600135836040013510155b15611896576040516314465fbb60e11b815260206004820152602860248201527f6e6f77203c206a6f696e4265666f7265203c207665726966794265666f7265206044820152671c995c5d5a5c995960c21b6064820152608401610a67565b5f546118a6426060860135614bc5565b106118f4576040516314465fbb60e11b815260206004820152601960248201527f65786365656473206d6178436f6d6d69744475726174696f6e000000000000006044820152606401610a67565b5f60055f815461190390614ec5565b91829055505f8181526006602052604090209091508490611924828261505e565b5061194e905061193b610100860160e08701614445565b5f83815260106020526040902090612fea565b5060025460035461196c915f9133916001600160a01b031690613337565b807fcefb9179756ff591bfc33614571a79ab5003d9843303ba1ee71bb49806e981018560405161199c91906151fc565b60405180910390a291505b50919050565b6119b5612e3d565b5f6119bf84612afa565b90505f5f8581526007602052604090205460ff1660018111156119e4576119e46142a7565b14611a0457836040516316f1581b60e01b8152600401610a679190614edd565b60015f8581526007602052604090205460ff166001811115611a2857611a286142a7565b03611a4857836040516316f1581b60e01b8152600401610a679190614f09565b80604001514210611a8c5783604051633901964f60e11b8152600401610a67918152604060208201819052600490820152633537b4b760e11b606082015260800190565b5f84815260086020908152604080832033845290915281205460ff166003811115611ab957611ab96142a7565b14611b055760405163cc3f705d60e01b81526004810185905233602482015260606044820152600e60648201526d185b1c9958591e4b5a9bda5b995960921b608482015260a401610a67565b5f8481526008602090815260408083203384529091529020805460ff19166001179055608081015115801590611b58575060808101515f8581525f51602061563d5f395f51905f52602052604090205410155b15611b7957604051630e64b09b60e41b815260048101859052602401610a67565b60a0810151516001600160a01b031615611c5d5760a08101518051602090910151604051635ade663360e01b81525f926001600160a01b031691635ade663391611bcb91339189908990600401615302565b602060405180830381865afa158015611be6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0a9190615343565b905080611c5b5760405163cc3f705d60e01b8152600481018690523360248201526060604482015260116064820152703737ba16b2b634b3b4b1363296b537b4b760791b608482015260a401610a67565b505b60e08101516001600160a01b0316611d5457600354610120820151610100830151611c889190614f33565b611c929190614f33565b3414611cdc5760405162461bcd60e51b8152602060048201526019602482015278125b98dbdc9c9958dd0811551208185b5bdd5b9d081cd95b9d603a1b6044820152606401610a67565b6002546003546040515f926001600160a01b031691908381818185875af1925050503d805f8114611d28576040519150601f19603f3d011682016040523d82523d5f602084013e611d2d565b606091505b5050905080611d4e5760405162461bcd60e51b8152600401610a679061535e565b50611d96565b600254600354611d71915f9133916001600160a01b031690613337565b611d968160e001513330846101200151856101000151611d919190614f33565b613337565b61010081015160e08201516001600160a01b03165f90815260096020908152604080832088845290915281208054909190611dd2908490614f33565b909155505061010081015160e08201516001600160a01b03165f908152600a60209081526040808320888452825280832033845290915281208054909190611e1b908490614f33565b909155505061012081015160e08201516001600160a01b039081165f908152600b60209081526040808320865190941683529290529081208054909190611e63908490614f33565b92505081905550611e853385600160405180602001604052805f815250613483565b604051339085907fc0081eeafa0d002abcd7d58d84b6e688d1526b9c3d915a282212ba08c49a17a7905f90a35061139e60015f51602061561d5f395f51905f5255565b610d073383836134de565b5f818152601060205260409020606090610d3a90613273565b5f611ef5612e3d565b5f611eff86612afa565b90505f5f8781526007602052604090205460ff166001811115611f2457611f246142a7565b14611f4457856040516316f1581b60e01b8152600401610a679190614edd565b60015f8781526007602052604090205460ff166001811115611f6857611f686142a7565b03611f8857856040516316f1581b60e01b8152600401610a679190614f09565b80606001514210611fae5785604051633901964f60e11b8152600401610a679190614c0a565b60015f8781526008602090815260408083206001600160a01b038a16845290915290205460ff166003811115611fe657611fe66142a7565b146120375760405163cc3f705d60e01b8152600481018790526001600160a01b038616602482015260606044820152600a6064820152691b9bdd0b5a9bda5b995960b21b608482015260a401610a67565b5f8681526008602090815260408083206001600160a01b03891684528252808320805460ff19166002179055888352600d909152812080549161207983614ec5565b909155505060c08101518051602090910151604051635ade663360e01b81525f926001600160a01b031691635ade6633916120bc918a918a908a90600401615302565b602060405180830381865afa1580156120d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120fb9190615343565b90508061214a575f8781526008602090815260408083206001600160a01b038a1684528252808320805460ff19166001179055898352600d90915281208054916121448361538b565b91905055505b856001600160a01b0316877f1238440c522f66de1f5108d655747895783b6acaf60fb05696d3c5a38a35fbda83604051612188911515815260200190565b60405180910390a39150506121a960015f51602061561d5f395f51905f5255565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156121f55750825b90505f826001600160401b031660011480156122105750303b155b90508115801561221e575080155b1561223c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561226657845460ff60401b1916600160401b1785555b61226f86613583565b612277613594565b61227f61359c565b6122876135ac565b61229e60405180602001604052805f8152506135bc565b60408051808201909152600681526510d3d353525560d21b60208201526011906122c890826153a0565b5060408051808201909152600681526510d3d353525560d21b60208201526012906122f390826153a0565b5083156111cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b60066020525f9081526040902080546001820180546001600160a01b03909216929161236c90614bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461239890614bd8565b80156123e35780601f106123ba576101008083540402835291602001916123e3565b820191905f5260205f20905b8154815290600101906020018083116123c657829003601f168201915b505050600284015460038501546004860154604080518082019091526005880180546001600160a01b031682526006890180549899959894975092955090929091602084019161243290614bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461245e90614bd8565b80156124a95780601f10612480576101008083540402835291602001916124a9565b820191905f5260205f20905b81548152906001019060200180831161248c57829003601f168201915b505050919092525050604080518082019091526007840180546001600160a01b0316825260088501805494959492935090916020840191906124ea90614bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461251690614bd8565b80156125615780601f1061253857610100808354040283529160200191612561565b820191905f5260205f20905b81548152906001019060200180831161254457829003601f168201915b505050919092525050506009820154600a830154600b84015460408051808201909152600c8601546001600160a01b039081168252600d9096015460208201529394909216929091908b565b6125b5612e3d565b60015f8381526007602052604090205460ff1660018111156125d9576125d96142a7565b036125f957816040516316f1581b60e01b8152600401610a679190614f09565b60025f8381526008602090815260408083206001600160a01b038616845290915290205460ff166003811115612631576126316142a7565b146126845760405163cc3f705d60e01b8152600481018390526001600160a01b038216602482015260606044820152600c60648201526b1b9bdd0b5d995c9a599a595960a21b608482015260a401610a67565b5f8281526008602090815260408083206001600160a01b03851684528252808320805460ff19166003179055848352601090915281206126c3906135cd565b90505f5b818110156127a8575f8481526010602052604081206126e690836135d6565b6001600160a01b0381165f908152600c602090815260408083208984529091528120549192500361271b5761271b85826127c0565b6001600160a01b0381165f908152600c60209081526040808320888452909152902054801561279e5761274f828683612e98565b816001600160a01b0316856001600160a01b0316877fce3bcb6e219596cf26007ffdfaae8953bc3f76e3f36c0a79b23e28020da3222e8460405161279591815260200190565b60405180910390a45b50506001016126c7565b5050610d0760015f51602061561d5f395f51905f5255565b60015f8381526007602052604090205460ff1660018111156127e4576127e46142a7565b0361280457816040516316f1581b60e01b8152600401610a679190614f09565b5f61280e83612afa565b9050806060015142116128615782604051633901964f60e11b8152600401610a67918152604060208201819052601190820152703b32b934b33c9039ba34b6361037b832b760791b606082015260800190565b6001600160a01b0382165f908152600960209081526040808320868452825280832054600d9092528220549091036128b0575050505f908152600760205260409020805460ff19166001179055565b6001600160a01b0383165f908152600960209081526040808320878452825282208290556101408401510151612710906128ea9084615455565b6128f49190615480565b6004549091505f906127109061290a9085615455565b6129149190615480565b90505f816129228486614bc5565b61292c9190614bc5565b5f888152600d60205260409020549091506129479082615480565b6001600160a01b0387165f908152600c602090815260408083208b8452825280832093909355600d9052205461297d9082615493565b6129879083614f33565b6001600160a01b038088165f908152600b602090815260408083206101408b0151519094168352929052908120805492945085929091906129c9908490614f33565b90915550506001600160a01b038087165f908152600b6020908152604080832060025490941683529290529081208054849290612a07908490614f33565b909155505050505050505050565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b336001600160a01b0386168114801590612a825750612a808682612a15565b155b15612ab35760405163711bec9160e11b81526001600160a01b03808316600483015287166024820152604401610a67565b6111cd86868686866135e1565b612ac8612f42565b6001600160a01b038116612af157604051631e4fbdf760e01b81525f6004820152602401610a67565b610da08161327f565b612b0261412f565b5f82118015612b1357506005548211155b612b525760405162461bcd60e51b815260206004820152601060248201526f10dbdb5b5a5d081b9bdd08199bdd5b9960821b6044820152606401610a67565b5f828152600660209081526040918290208251610160810190935280546001600160a01b031683526001810180549192840191612b8e90614bd8565b80601f0160208091040260200160405190810160405280929190818152602001828054612bba90614bd8565b8015612c055780601f10612bdc57610100808354040283529160200191612c05565b820191905f5260205f20905b815481529060010190602001808311612be857829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582016040518060400160405290815f82015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600182018054612c7990614bd8565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca590614bd8565b8015612cf05780601f10612cc757610100808354040283529160200191612cf0565b820191905f5260205f20905b815481529060010190602001808311612cd357829003601f168201915b505050919092525050508152604080518082019091526007830180546001600160a01b0316825260088401805460209485019484019190612d3090614bd8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5c90614bd8565b8015612da75780601f10612d7e57610100808354040283529160200191612da7565b820191905f5260205f20905b815481529060010190602001808311612d8a57829003601f168201915b50505091909252505050815260098201546001600160a01b03908116602080840191909152600a840154604080850191909152600b85015460608501528051808201909152600c8501549092168252600d90930154928101929092526080015292915050565b5f5160206155fd5f395f51905f525460ff16156111e55760405163d93c066560e01b815260040160405180910390fd5b5f51602061561d5f395f51905f52805460011901612e6e57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6001600160a01b0381165f90815260018301602052604081205415155b9392505050565b6001600160a01b038316612f1b575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612eef576040519150601f19603f3d011682016040523d82523d5f602084013e612ef4565b606091505b5050905080612f155760405162461bcd60e51b8152600401610a679061535e565b50505050565b61139e6001600160a01b038416838361366d565b60015f51602061561d5f395f51905f5255565b33612f747f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146111e55760405163118cdaa760e01b8152336004820152602401610a67565b5f5160206155dd5f395f51905f527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450261139e83826153a0565b5f612e91836001600160a01b0384166136cc565b5f612e91836001600160a01b0384166137af565b6001600160a01b03841661302757604051632bfa23e760e11b81525f6004820152602401610a67565b6001600160a01b03851661304f57604051626a0d4560e21b81525f6004820152602401610a67565b61305c85858585856137fb565b5050505050565b61306b61384e565b5f5160206155fd5f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061314857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661313c5f5160206155bd5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156111e55760405163703e46dd60e11b815260040160405180910390fd5b610da0612f42565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156131c8575060408051601f3d908101601f191682019092526131c5918101906154a6565b60015b6131f057604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610a67565b5f5160206155bd5f395f51905f52811461322057604051632a87526960e21b815260048101829052602401610a67565b61139e838361387d565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111e55760405163703e46dd60e11b815260040160405180910390fd5b60605f612e91836138d2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6132f7612e0d565b5f5160206155fd5f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336130a4565b6001600160a01b03841661346e576001600160a01b038316331461339d5760405162461bcd60e51b815260206004820181905260248201527f53656e646572206d69736d6174636820666f7220455448207472616e736665726044820152606401610a67565b8034146133e85760405162461bcd60e51b8152602060048201526019602482015278125b98dbdc9c9958dd0811551208185b5bdd5b9d081cd95b9d603a1b6044820152606401610a67565b6001600160a01b0382163014613469575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613441576040519150601f19603f3d011682016040523d82523d5f602084013e613446565b606091505b50509050806134675760405162461bcd60e51b8152600401610a679061535e565b505b612f15565b612f156001600160a01b03851684848461392b565b6001600160a01b0384166134ac57604051632bfa23e760e11b81525f6004820152602401610a67565b604080516001808252602082018690528183019081526060820185905260808201909252906111cd5f878484876137fb565b5f5160206155dd5f395f51905f526001600160a01b0383166135145760405162ced3e160e81b81525f6004820152602401610a67565b6001600160a01b038481165f818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b61358b613964565b610da0816139ad565b6111e5613964565b6135a4613964565b6111e56139b5565b6135b4613964565b6111e56139bd565b6135c4613964565b610da0816139dd565b5f610d3a825490565b5f612e9183836139e5565b6001600160a01b03841661360a57604051632bfa23e760e11b81525f6004820152602401610a67565b6001600160a01b03851661363257604051626a0d4560e21b81525f6004820152602401610a67565b6040805160018082526020820186905281830190815260608201859052608082019092529061366487878484876137fb565b50505050505050565b6040516001600160a01b0383811660248301526044820183905261139e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613a0b565b5f81815260018301602052604081205480156137a6575f6136ee600183614bc5565b85549091505f9061370190600190614bc5565b9050808214613760575f865f01828154811061371f5761371f614c31565b905f5260205f200154905080875f01848154811061373f5761373f614c31565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613771576137716154bd565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610d3a565b5f915050610d3a565b5f8181526001830160205260408120546137f457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610d3a565b505f610d3a565b61380785858585613a77565b6001600160a01b0384161561305c57825133906001036138405760208481015190840151613839838989858589613a83565b50506111cd565b6111cd818787878787613ba4565b5f5160206155fd5f395f51905f525460ff166111e557604051638dfc202b60e01b815260040160405180910390fd5b61388682613c8b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156138ca5761139e8282613cee565b610d07613d60565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561391f57602002820191905f5260205f20905b81548152602001906001019080831161390b575b50505050509050919050565b6040516001600160a01b038481166024830152838116604483015260648201839052612f159186918216906323b872dd9060840161369a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166111e557604051631afcd79f60e31b815260040160405180910390fd5b612ac8613964565b612f2f613964565b6139c5613964565b5f5160206155fd5f395f51905f52805460ff19169055565b610d97613964565b5f825f0182815481106139fa576139fa614c31565b905f5260205f200154905092915050565b5f5f60205f8451602086015f885af180613a2a576040513d5f823e3d81fd5b50505f513d91508115613a41578060011415613a4e565b6001600160a01b0384163b155b15612f1557604051635274afe760e01b81526001600160a01b0385166004820152602401610a67565b612f1584848484613d7f565b6001600160a01b0384163b156111cd5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613ac790899089908890889088906004016154d1565b6020604051808303815f875af1925050508015613b01575060408051601f3d908101601f19168201909252613afe9181019061550a565b60015b613b68573d808015613b2e576040519150601f19603f3d011682016040523d82523d5f602084013e613b33565b606091505b5080515f03613b6057604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a67565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b1461366457604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a67565b6001600160a01b0384163b156111cd5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613be89089908990889088908890600401615525565b6020604051808303815f875af1925050508015613c22575060408051601f3d908101601f19168201909252613c1f9181019061550a565b60015b613c4f573d808015613b2e576040519150601f19603f3d011682016040523d82523d5f602084013e613b33565b6001600160e01b0319811663bc197c8160e01b1461366457604051632bfa23e760e11b81526001600160a01b0386166004820152602401610a67565b806001600160a01b03163b5f03613cc057604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610a67565b5f5160206155bd5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051613d0a9190615582565b5f60405180830381855af49150503d805f8114613d42576040519150601f19603f3d011682016040523d82523d5f602084013e613d47565b606091505b5091509150613d57858383613e77565b95945050505050565b34156111e55760405163b398979f60e01b815260040160405180910390fd5b5f51602061563d5f395f51905f52613d9985858585613ed3565b6001600160a01b038516613e17575f805b8451811015613dfc5760208181028581018201519087018201515f9081529185905260408220805491928392613de1908490614f33565b90915550613df190508184614f33565b925050600101613daa565b5080826001015f828254613e109190614f33565b9091555050505b6001600160a01b03841661305c575f805b8451811015613e635760208181028581018201519087018201515f908152918590526040909120805482900390559190910190600101613e28565b506001820180549190910390555050505050565b606082613e8c57613e8782613ee7565b612e91565b8151158015613ea357506001600160a01b0384163b155b15613ecc57604051639996b31560e01b81526001600160a01b0385166004820152602401610a67565b5092915050565b613edb612e0d565b612f1584848484613f10565b805115613ef75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b805182515f5160206155dd5f395f51905f529114613f4e5782518251604051635b05999160e01b815260048101929092526024820152604401610a67565b335f5b8451811015614050576020818102868101820151908601909101516001600160a01b03891615614002575f828152602086815260408083206001600160a01b038d16845290915290205481811015613fdc576040516303dee4c560e01b81526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610a67565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615614046575f828152602086815260408083206001600160a01b038c16845290915281208054839290614040908490614f33565b90915550505b5050600101613f51565b5083516001036140d05760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516140c1929190918252602082015260400190565b60405180910390a450506111cd565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161411f929190615598565b60405180910390a4505050505050565b6040518061016001604052805f6001600160a01b03168152602001606081526020015f81526020015f81526020015f815260200161418860405180604001604052805f6001600160a01b03168152602001606081525090565b81526020016141b260405180604001604052805f6001600160a01b03168152602001606081525090565b81526020015f6001600160a01b031681526020015f81526020015f81526020016141f660405180604001604052805f6001600160a01b031681526020015f81525090565b905290565b6001600160a01b0381168114610da0575f5ffd5b803561421a816141fb565b919050565b5f5f60408385031215614230575f5ffd5b823591506020830135614242816141fb565b809150509250929050565b5f5f6040838503121561425e575f5ffd5b8235614269816141fb565b946020939093013593505050565b6001600160e01b031981168114610da0575f5ffd5b5f6020828403121561429c575f5ffd5b8135612e9181614277565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106142cf576142cf6142a7565b91905290565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614311576143116142d5565b604052919050565b5f5f6001600160401b03841115614332576143326142d5565b50601f8301601f1916602001614347816142e9565b91505082815283838301111561435b575f5ffd5b828260208301375f602084830101529392505050565b5f60208284031215614381575f5ffd5b81356001600160401b03811115614396575f5ffd5b8201601f810184136143a6575f5ffd5b6121a984823560208401614319565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612e9160208301846143b5565b8015158114610da0575f5ffd5b5f5f60408385031215614413575f5ffd5b823561441e816141fb565b91506020830135614242816143f5565b5f6020828403121561443e575f5ffd5b5035919050565b5f60208284031215614455575f5ffd5b8135612e91816141fb565b5f6001600160401b03821115614478576144786142d5565b5060051b60200190565b5f82601f830112614491575f5ffd5b81356144a461449f82614460565b6142e9565b8082825260208201915060208360051b8601019250858311156144c5575f5ffd5b602085015b838110156144e25780358352602092830192016144ca565b5095945050505050565b5f82601f8301126144fb575f5ffd5b612e9183833560208501614319565b5f5f5f5f5f60a0868803121561451e575f5ffd5b8535614529816141fb565b94506020860135614539816141fb565b935060408601356001600160401b03811115614553575f5ffd5b61455f88828901614482565b93505060608601356001600160401b0381111561457a575f5ffd5b61458688828901614482565b92505060808601356001600160401b038111156145a1575f5ffd5b6145ad888289016144ec565b9150509295509295909350565b5f5f604083850312156145cb575f5ffd5b82356145d6816141fb565b91506020830135614242816141fb565b60208101600283106142cf576142cf6142a7565b5f5f6040838503121561460b575f5ffd5b82356001600160401b03811115614620575f5ffd5b8301601f81018513614630575f5ffd5b803561463e61449f82614460565b8082825260208201915060208360051b85010192508783111561465f575f5ffd5b6020840193505b8284101561468a578335614679816141fb565b825260209384019390910190614666565b945050505060208301356001600160401b038111156146a7575f5ffd5b6146b385828601614482565b9150509250929050565b5f8151808452602084019350602083015f5b828110156146ed5781518652602095860195909101906001016146cf565b5093949350505050565b602081525f612e9160208301846146bd565b5f5f6040838503121561471a575f5ffd5b8235614725816141fb565b915060208301356001600160401b0381111561473f575f5ffd5b6146b3858286016144ec565b5f6020828403121561475b575f5ffd5b81356001600160401b03811115614770575f5ffd5b820160a08185031215612e91575f5ffd5b602080825282518282018190525f918401906040840190835b818110156147c15783516001600160a01b031683526020938401939092019160010161479a565b509095945050505050565b83815260a060208201525f6147e460a08301856143b5565b905060018060a01b0383511660408301526020830151606083015260408301516080830152949350505050565b5f5f5f60608486031215614823575f5ffd5b833592506020840135614835816141fb565b929592945050506040919091013590565b5f60208284031215614856575f5ffd5b81356001600160401b0381111561486b575f5ffd5b82016101808185031215612e91575f5ffd5b5f5f83601f84011261488d575f5ffd5b5081356001600160401b038111156148a3575f5ffd5b6020830191508360208285010111156148ba575f5ffd5b9250929050565b5f5f5f604084860312156148d3575f5ffd5b8335925060208401356001600160401b038111156148ef575f5ffd5b6148fb8682870161487d565b9497909650939450505050565b5f5f5f5f6060858703121561491b575f5ffd5b84359350602085013561492d816141fb565b925060408501356001600160401b03811115614947575f5ffd5b6149538782880161487d565b95989497509550505050565b60018060a01b0381511682525f6020820151604060208501526121a960408501826143b5565b6001600160a01b038c168152610180602082018190525f906149a99083018d6143b5565b8b60408401528a606084015289608084015282810360a08401526149cd818a61495f565b905082810360c08401526149e1818961495f565b6001600160a01b0388811660e08601526101008501889052610120850187905285511661014085015260208501516101608501529150614a1e9050565b9c9b505050505050505050505050565b5f5f5f60608486031215614a40575f5ffd5b8335614a4b816141fb565b9250602084013591506040840135614a62816141fb565b809150509250925092565b5f5f5f5f5f60a08688031215614a81575f5ffd5b8535614a8c816141fb565b94506020860135614a9c816141fb565b9350604086013592506060860135915060808601356001600160401b038111156145a1575f5ffd5b60208152614ade6020820183516001600160a01b03169052565b5f60208301516101806040840152614afa6101a08401826143b5565b90506040840151606084015260608401516080840152608084015160a084015260a0840151601f198483030160c0850152614b35828261495f565b91505060c0840151601f198483030160e0850152614b53828261495f565b91505060e0840151614b716101008501826001600160a01b03169052565b5061010084015161012084015261012084015161014084015261014084015161134c61016085018280516001600160a01b03168252602090810151910152565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d3a57610d3a614bb1565b600181811c90821680614bec57607f821691505b6020821081036119a757634e487b7160e01b5f52602260045260245ffd5b9081526040602082018190526006908201526576657269667960d01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112614c5a575f5ffd5b8301803591506001600160401b03821115614c73575f5ffd5b6020019150368190038213156148ba575f5ffd5b601f82111561139e57805f5260205f20601f840160051c81016020851015614cac5750805b601f840160051c820191505b8181101561305c575f8155600101614cb8565b5f19600383901b1c191660019190911b1790565b6001600160401b03831115614cf657614cf66142d5565b614d0a83614d048354614bd8565b83614c87565b5f601f841160018114614d36575f8515614d245750838201355b614d2e8682614ccb565b84555061305c565b5f83815260208120601f198716915b82811015614d655786850135825560209485019460019092019101614d45565b5086821015614d81575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f8135610d3a816141fb565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135614dca816141fb565b614dd48183614d9f565b5060208201356001820155604090910135600290910155565b8135815560018101614e026020840184614c45565b6001600160401b03811115614e1957614e196142d5565b614e2d81614e278554614bd8565b85614c87565b5f601f821160018114614e59575f8315614e475750838201355b614e518482614ccb565b865550614eb0565b5f85815260208120601f198516915b82811015614e885786850135825560209485019460019092019101614e68565b5084821015614ea4575f1960f88660031b161c19848701351681555b505060018360011b0185555b5050505050610d076040830160028301614dbf565b5f60018201614ed657614ed6614bb1565b5060010190565b908152604060208201819052600b908201526a1b9bdd0b58dc99585d195960aa1b606082015260800190565b9081526040602082018190526009908201526818d85b98d95b1b195960ba1b606082015260800190565b80820180821115610d3a57610d3a614bb1565b5f8235603e19833603018112614f5a575f5ffd5b9190910192915050565b8135614f6f816141fb565b614f798183614d9f565b5060018101614f8b6020840184614c45565b6001600160401b03811115614fa257614fa26142d5565b614fb081614e278554614bd8565b5f601f821160018114614fdc575f8315614fca5750838201355b614fd48482614ccb565b865550613664565b5f85815260208120601f198516915b8281101561500b5786850135825560209485019460019092019101614feb565b5084821015615027575f1960f88660031b161c19848701351681555b50505050600190811b01909155505050565b8135615044816141fb565b61504e8183614d9f565b5060209190910135600190910155565b61507061506a83614d93565b82614d9f565b61507d6020830183614c45565b61508b818360018601614cdf565b50506040820135600282015560608201356003820155608082013560048201556150c46150bb60a0840184614f46565b60058301614f64565b6150dd6150d460c0840184614f46565b60078301614f64565b6150f56150ec60e08401614d93565b60098301614d9f565b610100820135600a820155610120820135600b820155610d076101408301600c8301615039565b5f5f8335601e19843603018112615131575f5ffd5b83016020810192503590506001600160401b0381111561514f575f5ffd5b8036038213156148ba575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235603e19833603018112615199575f5ffd5b90910192915050565b5f81356151ae816141fb565b6001600160a01b031683526151c6602083018361511c565b60406020860152613d5760408601828461515d565b80356151e6816141fb565b6001600160a01b03168252602090810135910152565b6020815261521d602082016152108461420f565b6001600160a01b03169052565b5f61522b602084018461511c565b61018060408501526152426101a08501828461515d565b604086013560608681019190915286013560808087019190915286013560a0808701919091529092506152789150850185615185565b838203601f190160c085015261528e82826151a2565b91505061529e60c0850185615185565b838203601f190160e08501526152b482826151a2565b9150506152c360e0850161420f565b6001600160a01b038116610100850152506101008401356101208481019190915284013561014080850191909152612e919061016085019086016151db565b6001600160a01b03851681526060602082018190525f90615325908301866143b5565b828103604084015261533881858761515d565b979650505050505050565b5f60208284031215615353575f5ffd5b8151612e91816143f5565b602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b5f8161539957615399614bb1565b505f190190565b81516001600160401b038111156153b9576153b96142d5565b6153cd816153c78454614bd8565b84614c87565b6020601f8211600181146153fa575f83156153e85750848201515b6153f28482614ccb565b85555061305c565b5f84815260208120601f198516915b828110156154295787850151825560209485019460019092019101615409565b508482101561544657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082028115828204841417610d3a57610d3a614bb1565b634e487b7160e01b5f52601260045260245ffd5b5f8261548e5761548e61546c565b500490565b5f826154a1576154a161546c565b500690565b5f602082840312156154b6575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90615338908301846143b5565b5f6020828403121561551a575f5ffd5b8151612e9181614277565b6001600160a01b0386811682528516602082015260a0604082018190525f90615550908301866146bd565b828103606084015261556281866146bd565b9050828103608084015261557681856143b5565b98975050505050505050565b5f82518060208501845e5f920191825250919050565b604081525f6155aa60408301856146bd565b8281036020840152613d5781856146bd56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f004a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800a26469706673582212206d738f20bb4afa47c75ff9dbc8ebae2727687cb9dfe5a2c0b66e0ef369af3afc64736f6c634300081c0033