1 tx
2 calls
constructor
constructor(address _ctf, address _collateral, address _vault)
functions
admins
viewfunction admins(address) view returns (uint256)
balanceOf
viewfunction balanceOf(address _owner, uint256 _id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] _owners, uint256[] _ids) view returns (uint256[])
col
viewfunction col() view returns (address)
ctf
viewfunction ctf() view returns (address)
FEE_DENOMINATOR
viewfunction FEE_DENOMINATOR() view returns (uint256)
getConditionId
viewfunction getConditionId(bytes32 _questionId) view returns (bytes32)
getDetermined
viewfunction getDetermined(bytes32 _marketId) view returns (bool)
getFeeBips
viewfunction getFeeBips(bytes32 _marketId) view returns (uint256)
getMarketData
viewfunction getMarketData(bytes32 _marketId) view returns (bytes32)
getOracle
viewfunction getOracle(bytes32 _marketId) view returns (address)
getPositionId
viewfunction getPositionId(bytes32 _questionId, bool _outcome) view returns (uint256)
getQuestionCount
viewfunction getQuestionCount(bytes32 _marketId) view returns (uint256)
getResult
viewfunction getResult(bytes32 _marketId) view returns (uint256)
isAdmin
viewfunction isAdmin(address addr) view returns (bool)
NO_TOKEN_BURN_ADDRESS
viewfunction NO_TOKEN_BURN_ADDRESS() view returns (address)
vault
viewfunction vault() view returns (address)
wcol
viewfunction wcol() view returns (address)
addAdmin
nonpayablefunction addAdmin(address admin)
convertPositions
nonpayablefunction convertPositions(bytes32 _marketId, uint256 _indexSet, uint256 _amount)
mergePositions
nonpayablefunction mergePositions(address _collateralToken, bytes32, bytes32 _conditionId, uint256[], uint256 _amount)
mergePositions
nonpayablefunction mergePositions(bytes32 _conditionId, uint256 _amount)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
prepareMarket
nonpayablefunction prepareMarket(uint256 _feeBips, bytes _metadata) returns (bytes32)
prepareQuestion
nonpayablefunction prepareQuestion(bytes32 _marketId, bytes _metadata) returns (bytes32)
redeemPositions
nonpayablefunction redeemPositions(bytes32 _conditionId, uint256[] _amounts)
removeAdmin
nonpayablefunction removeAdmin(address admin)
renounceAdmin
nonpayablefunction renounceAdmin()
reportOutcome
nonpayablefunction reportOutcome(bytes32 _questionId, bool _outcome)
safeTransferFrom
nonpayablefunction safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes _data)
splitPosition
nonpayablefunction splitPosition(address _collateralToken, bytes32, bytes32 _conditionId, uint256[], uint256 _amount)
splitPosition
nonpayablefunction splitPosition(bytes32 _conditionId, uint256 _amount)
events
MarketPrepared
event MarketPrepared(bytes32 indexed marketId, address indexed oracle, uint256 feeBips, bytes data)
NewAdmin
event NewAdmin(address indexed admin, address indexed newAdminAddress)
OutcomeReported
event OutcomeReported(bytes32 indexed marketId, bytes32 indexed questionId, bool outcome)
PayoutRedemption
event PayoutRedemption(address indexed redeemer, bytes32 indexed conditionId, uint256[] amounts, uint256 payout)
PositionsConverted
event PositionsConverted(address indexed stakeholder, bytes32 indexed marketId, uint256 indexed indexSet, uint256 amount)
PositionsMerge
event PositionsMerge(address indexed stakeholder, bytes32 indexed conditionId, uint256 amount)
PositionSplit
event PositionSplit(address indexed stakeholder, bytes32 indexed conditionId, uint256 amount)
QuestionPrepared
event QuestionPrepared(bytes32 indexed marketId, bytes32 indexed questionId, uint256 index, bytes data)
RemovedAdmin
event RemovedAdmin(address indexed admin, address indexed removedAdmin)
errors
DeterminedFlagAlreadySet
error DeterminedFlagAlreadySet()
FeeBipsOutOfBounds
error FeeBipsOutOfBounds()
IndexOutOfBounds
error IndexOutOfBounds()
InvalidIndexSet
error InvalidIndexSet()
LengthMismatch
error LengthMismatch()
MarketAlreadyDetermined
error MarketAlreadyDetermined()
MarketAlreadyPrepared
error MarketAlreadyPrepared()
MarketNotPrepared
error MarketNotPrepared()
NoConvertiblePositions
error NoConvertiblePositions()
NotAdmin
error NotAdmin()
NotApprovedForAll
error NotApprovedForAll()
OnlyOracle
error OnlyOracle()
UnexpectedCollateralToken
error UnexpectedCollateralToken()
creation bytecode
0x6101006040523480156200001257600080fd5b50604051620050a0380380620050a083398101604081905262000035916200023b565b33600090815260016020818152604092839020919091556001600160a01b0385811660805284811660a081905290841660e052825163313ce56760e01b815292518593919263313ce56792600480820193918290030181865afa158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c7919062000285565b604051620000d59062000210565b6001600160a01b03909216825260ff166020820152604001604051809103906000f0801580156200010a573d6000803e3d6000fd5b506001600160a01b0390811660c081905260405163095ea7b360e01b8152918516600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000162573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001889190620002b1565b5060a05160c05160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002069190620002b1565b50505050620002d5565b6113908062003d1083390190565b80516001600160a01b03811681146200023657600080fd5b919050565b6000806000606084860312156200025157600080fd5b6200025c846200021e565b92506200026c602085016200021e565b91506200027c604085016200021e565b90509250925092565b6000602082840312156200029857600080fd5b815160ff81168114620002aa57600080fd5b9392505050565b600060208284031215620002c457600080fd5b81518015158114620002aa57600080fd5b60805160a05160c05160e0516138f762000419600039600081816105460152818161155401526116b50152600081816103bb01528181610a0a01528181610bfc01528181610c9101528181610d4601528181610e2201528181610f0801528181610fa10152818161121f0152818161152d015281816115e6015281816118300152818161190f015281816119a301528181611a3b01526124350152600081816104230152818161097801528181610b510152610bb801526000818161026501528181610590015281816107020152818161079f0152818161088101528181610c6201528181610d1201528181610e4b01528181610ed90152818161136e0152818161141f01528181611685015281816117340152818161186f015281816118e001528181611af901528181611c1301528181611cb2015261240e01526138f76000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a0db6151161011a578063bc197c81116100ad578063dbeccb231161007c578063dbeccb23146104e8578063e200affd146104fb578063f23a6e611461050e578063f242432a1461052e578063fbfa77cf1461054157600080fd5b8063bc197c811461047e578063c64748c4146104b9578063d73792a9146104cc578063dafaf94a146104d557600080fd5b8063a78695b0116100e9578063a78695b01461041e578063add4c78414610445578063b10c5c1714610458578063b7f75d2c1461046b57600080fd5b80638a0db615146103dd5780638bad0c0a146103f05780639e7212ad146103f8578063a3d7da1d1461040b57600080fd5b8063429b62e511610192578063752b5ba511610161578063752b5ba5146103755780637ad7fe36146103885780637ae2e67b146103a35780637e3b74c3146103b657600080fd5b8063429b62e51461030f5780634e1273f41461032f578063704802751461034f57806372ce42751461036257600080fd5b806322a9339f116101ce57806322a9339f1461026057806324d7806c1461029f5780632582cb5e146102dc57806330f4f4bb146102ef57600080fd5b8062fdd58e146101ff57806304329c03146102255780631785f53c146102385780631d69b48d1461024d575b600080fd5b61021261020d366004612e7f565b610568565b6040519081526020015b60405180910390f35b610212610233366004612ea9565b610605565b61024b610246366004612ec2565b610656565b005b61021261025b366004612f25565b6106cc565b6102877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021c565b6102cc6102ad366004612ec2565b6001600160a01b03166000908152600160208190526040909120541490565b604051901515815260200161021c565b6102126102ea366004612ea9565b61084c565b6102126102fd366004612ea9565b60009081526020819052604090205490565b61021261031d366004612ec2565b60016020526000908152604090205481565b61034261033d366004613044565b610867565b60405161021c919061313e565b61024b61035d366004612ec2565b6108fd565b61024b610370366004613195565b610976565b610212610383366004613215565b6109da565b61028773a5ef39c3d3e10d0b270233af41cac69796b1296681565b6102cc6103b1366004612ea9565b610a38565b6102877f000000000000000000000000000000000000000000000000000000000000000081565b6102126103eb366004612f25565b610a50565b61024b610ae3565b61024b610406366004613195565b610b4f565b61024b610419366004613245565b610bab565b6102877f000000000000000000000000000000000000000000000000000000000000000081565b610212610453366004612ea9565b610e03565b61024b610466366004613245565b610e1b565b610212610479366004612ea9565b611043565b6104a061048c366004613267565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b0319909116815260200161021c565b61024b6104c7366004613321565b61105b565b61021261271081565b6102876104e3366004612ea9565b611815565b61024b6104f636600461334d565b611829565b61024b610509366004613215565b611aed565b6104a061051c36600461338b565b63f23a6e6160e01b9695505050505050565b61024b61053c36600461338b565b611bbd565b6102877f000000000000000000000000000000000000000000000000000000000000000081565b604051627eeac760e11b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169062fdd58e90604401602060405180830381865afa1580156105d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fc9190613402565b90505b92915050565b604080513060601b6bffffffffffffffffffffffff191660208083019190915260348201849052600260548084019190915283518084039091018152607490920190925280519101206000906105ff565b336000908152600160208190526040909120541461068757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160205260408082208290555133917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a350565b60008060006106da86611d2b565b9150915060006106e983610605565b604051636a16e06160e11b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d42dc0c290602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190613402565b6000036108045760405163365bb9d560e21b815230600482015260248101849052600260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d96ee75490606401600060405180830381600087803b1580156107eb57600080fd5b505af11580156107ff573d6000803e3d6000fd5b505050505b82877faac410f87d423a922a7b226ac68f0c2eaf5bf6d15e644ac0758c7f96e2c253f784898960405161083993929190613444565b60405180910390a3509095945050505050565b60008181526020819052604081205460d81c61ffff166105ff565b6040516313849cfd60e21b81526060906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634e1273f4906108b8908690869060040161345e565b600060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105fc91908101906134be565b336000908152600160208190526040909120541461092e57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600160208190526040808320919091555133917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91a350565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146109c85760405163055692d760e21b815260040160405180910390fd5b6109d28482610bab565b505050505050565b600080610a01816109ea86610605565b856109f65760026109f9565b60015b60ff16611dc4565b90506000610a2f7f0000000000000000000000000000000000000000000000000000000000000000836120ce565b95945050505050565b6000818152602081905260408120546105ff90612116565b600080610a938585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061213d92505050565b9050336001600160a01b0316817ff059ab16d1ca60e123eab60e3c02b68faf060347c701a5d14885a8e1def7b3a8878787604051610ad393929190613444565b60405180910390a3949350505050565b3360009081526001602081905260409091205414610b1457604051637bfa4b9f60e01b815260040160405180910390fd5b336000818152600160205260408082208290555182917f787a2e12f4a55b658b8f573c32432ee11a5e8b51677d1e1e937aaf6a0bb5776e91a3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614610ba15760405163055692d760e21b815260040160405180910390fd5b6109d28482610e1b565b610be06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846121d7565b604051635f9bb63d60e11b8152306004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bf376c7a90604401600060405180830381600087803b158015610c4857600080fd5b505af1158015610c5c573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166372ce42757f00000000000000000000000000000000000000000000000000000000000000006000801b85610cbd612273565b866040518663ffffffff1660e01b8152600401610cde95949392919061354e565b600060405180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d63033610d6b7f0000000000000000000000000000000000000000000000000000000000000000876122de565b610d7660028761236d565b6040518563ffffffff1660e01b8152600401610d95949392919061358d565b600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b50506040518381528492503391507fbbed930dbfb7907ae2d60ddf78345610214f26419a0128df39b6cc3d9e5df9b0906020015b60405180910390a35050565b6000818152602081905260408120546105ff906123ee565b6000610e477f0000000000000000000000000000000000000000000000000000000000000000846122de565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6333084610e8660028861236d565b6040518563ffffffff1660e01b8152600401610ea5949392919061358d565b600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639e7212ad7f00000000000000000000000000000000000000000000000000000000000000006000801b86610f34612273565b876040518663ffffffff1660e01b8152600401610f5595949392919061354e565b600060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b50506040516339f4769360e01b8152336004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506339f476939150604401600060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50506040518481528592503391507fba33ac50d8894676597e6e35dc09cff59854708b642cd069d21eb9c7ca072a049060200160405180910390a3505050565b6000818152602081905260408120546105ff906123fb565b60008381526020819052604081205490611074826123fb565b90506001600160a01b03821661109d5760405163b664949560e01b815260040160405180910390fd5b600181116110be576040516324f2dfe760e01b815260040160405180910390fd5b836000036110df57604051639667d38160e01b815260040160405180910390fd5b83811c1561110057604051639667d38160e01b815260040160405180910390fd5b8260000361110f575050505050565b6000805b82821015611135576001821b86161561112a576001015b816001019150611113565b600061114182856135fe565b90506000826001600160401b0381111561115d5761115d612f70565b604051908082528060200260200182016040528015611186578160200160208202803683370190505b5090506000826001600160401b038111156111a3576111a3612f70565b6040519080825280602002602001820160405280156111cc578160200160208202803683370190505b5090506000836001600160401b038111156111e9576111e9612f70565b604051908082528060200260200182016040528015611212578160200160208202803683370190505b5090506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a0712d6861124e8b87613611565b6040518263ffffffff1660e01b815260040161126c91815260200190565b600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b50505050600080600097505b8888101561136a5760ff88168d016001891b8d16156112f3576112ca8160006109da565b8684815181106112dc576112dc613628565b60200260200101818152505082600101925061135e565b6112fe8160016109da565b85838151811061131057611310613628565b6020026020010181815250506113278160006109da565b84838151811061133957611339613628565b60200260200101818152505061135761135182610605565b8d612404565b8160010191505b886001019850506112a6565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6337fa5ef39c3d3e10d0b270233af41cac69796b12966b80367e2fe6c6f7041543fbf60601c866113cc88518f61236d565b6040518563ffffffff1660e01b81526004016113eb949392919061358d565b600060405180830381600087803b15801561140557600080fd5b505af1158015611419573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6307fa5ef39c3d3e10d0b270233af41cac69796b12966b80367e2fe6c6f7041543fbf60601c8461147c898f61236d565b6040518563ffffffff1660e01b815260040161149b949392919061358d565b600060405180830381600087803b1580156114b557600080fd5b505af11580156114c9573d6000803e3d6000fd5b506000925061271091505060d88a901c61ffff166114e7908c613611565b6114f19190613654565b905060006114ff828c6135fe565b90506001855111156116765760006001865161151b91906135fe565b905082156115dc576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630357371d7f000000000000000000000000000000000000000000000000000000000000000061157d8685613611565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156115c357600080fd5b505af11580156115d7573d6000803e3d6000fd5b505050505b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016630357371d336116168585613611565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561165c57600080fd5b505af1158015611670573d6000803e3d6000fd5b50505050505b8351156117c1578115611732577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d6307f0000000000000000000000000000000000000000000000000000000000000000876116e089518861236d565b6040518563ffffffff1660e01b81526004016116ff949392919061358d565b600060405180830381600087803b15801561171957600080fd5b505af115801561172d573d6000803e3d6000fd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632eb2c2d630338761176f89518761236d565b6040518563ffffffff1660e01b815260040161178e949392919061358d565b600060405180830381600087803b1580156117a857600080fd5b505af11580156117bc573d6000803e3d6000fd5b505050505b8b8d336001600160a01b03167fb03d19dddbc72a87e735ff0ea3b57bef133ebe44e1894284916a84044deb367e8e6040516117fe91815260200190565b60405180910390a450505050505050505050505050565b6000818152602081905260408120546105ff565b60006118557f0000000000000000000000000000000000000000000000000000000000000000856122de565b604051631759616b60e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632eb2c2d6906118ac903390309086908990899060040161369a565b600060405180830381600087803b1580156118c657600080fd5b505af11580156118da573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166301b7037c7f00000000000000000000000000000000000000000000000000000000000000006000801b8761193b612273565b6040518563ffffffff1660e01b815260040161195a94939291906136f7565b600060405180830381600087803b15801561197457600080fd5b505af1158015611988573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613402565b90508015611aa0576040516339f4769360e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906339f4769390604401600060405180830381600087803b158015611a8757600080fd5b505af1158015611a9b573d6000803e3d6000fd5b505050505b84336001600160a01b03167f9140a6a270ef945260c03894b3c6b3b2695e9d5101feef0ff24fec960cfd3224868685604051611ade93929190613724565b60405180910390a35050505050565b611af782826124ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c49298ac83611b3084612592565b6040518363ffffffff1660e01b8152600401611b4d929190613748565b600060405180830381600087803b158015611b6757600080fd5b505af1158015611b7b573d6000803e3d6000fd5b5050505081611b8b8360ff191690565b60405183151581527f9e9fa7fd355160bd4cd3f22d4333519354beff1f5689bde87f2c5e63d8d484b290602001610df7565b3360009081526001602081905260409091205414611bee57604051637bfa4b9f60e01b815260040160405180910390fd5b60405163e985e9c560e01b81526001600160a01b0387811660048301523360248301527f0000000000000000000000000000000000000000000000000000000000000000169063e985e9c590604401602060405180830381865afa158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190613769565b611c9b5760405163cd7769ff60e01b815260040160405180910390fd5b604051637921219560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f242432a90611cf190899089908990899089908990600401613786565b600060405180830381600087803b158015611d0b57600080fd5b505af1158015611d1f573d6000803e3d6000fd5b50505050505050505050565b6000818152602081905260408120548190806001600160a01b038116611d645760405163b664949560e01b815260040160405180910390fd5b6001600160a01b0381163314611d8d576040516380fee10560e01b815260040160405180910390fd5b611d96826123fb565b925060ff831685019350611da98261261e565b60009586526020869052604090952094909455509092909150565b6000808383604051602001611de3929190918252602082015260400190565b60408051601f198184030181529190528051602090910120905060ff81901c15156000805b6000805160206138a28339815191526001850893506000805160206138a283398151915260036000805160206138a2833981519152808788098709089050611e4f81612636565b9150806000805160206138a283398151915283840903611e0857828015611e7e5750611e7c6002836137cd565b155b80611e9c575082158015611e9c5750611e986002836137cd565b6001145b15611ebc57611eb9826000805160206138a28339815191526135fe565b91505b8780156120a55760fe81901c151593506001600160fe1b03166000805160206138a283398151915260036000805160206138a28339815191528084850984090891506000611f0983612636565b9050848015611f205750611f1e6002826137cd565b155b80611f3e575084158015611f3e5750611f3a6002826137cd565b6001145b15611f5e57611f5b816000805160206138a28339815191526135fe565b90505b826000805160206138a283398151915282830914611fc35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c696420706172656e7420636f6c6c656374696f6e2049440000000060448201526064015b60405180910390fd5b60408051602081018890529081018590526060810183905260808101829052600090819060069060a00160408051601f198184030181529082905261200791613805565b600060405180830381855afa9150503d8060008114612042576040519150601f19603f3d011682016040523d82523d6000602084013e612047565b606091505b5091509150816120885760405162461bcd60e51b815260206004820152600c60248201526b1958d859190819985a5b195960a21b6044820152606401611fba565b8080602001905181019061209c9190613821565b90985095505050505b6120b06002846137cd565b6001036120c157600160fe1b851894505b5092979650505050505050565b6040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160408051601f1981840301815291905280516020909101209392505050565b60008160011a60f81b6001600160f81b031916156121355760016105ff565b600092915050565b60003361214b818585612ddb565b600081815260208190526040812054919350816001600160a01b0316146121855760405163695a606360e11b815260040160405180910390fd5b6127108511156121a85760405163fc520af560e01b815260040160405180910390fd5b6001600160a01b03821661ffff60d81b60d887901b161760008481526020819052604090205550909392505050565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061226c5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401611fba565b5050505050565b604080516002808252606080830184529260009291906020830190803683370190505090506001816000815181106122ad576122ad613628565b6020026020010181815250506002816001815181106122ce576122ce613628565b6020908102919091010152919050565b60408051600280825260608083018452926000929190602083019080368337019050509050612319846123146000866001611dc4565b6120ce565b8160008151811061232c5761232c613628565b6020908102919091010152612348846123146000866002611dc4565b8160018151811061235b5761235b613628565b60209081029190910101529392505050565b60606000836001600160401b0381111561238957612389612f70565b6040519080825280602002602001820160405280156123b2578160200160208202803683370190505b50905060005b848110156123e657838282815181106123d3576123d3613628565b60209081029190910101526001016123b8565b509392505050565b60008160025b1a92915050565b600081816123f4565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166372ce42757f000000000000000000000000000000000000000000000000000000000000000060008561245f612273565b866040518663ffffffff1660e01b815260040161248095949392919061354e565b600060405180830381600087803b15801561249a57600080fd5b505af11580156109d2573d6000803e3d6000fd5b60ff19821660008181526020819052604090205460ff841690806001600160a01b0381166124ef5760405163b664949560e01b815260040160405180910390fd5b6001600160a01b0381163314612518576040516380fee10560e01b815260040160405180910390fd5b612521826123fb565b831061254057604051634e23d03560e01b815260040160405180910390fd5b8415156001036109d25761255382612116565b156125715760405163e3b0238960e01b815260040160405180910390fd5b61257b8284612e17565b600085815260208190526040902055505050505050565b60408051600280825260608083018452926000929190602083019080368337019050509050826125c35760006125c6565b60015b60ff16816000815181106125dc576125dc613628565b602002602001018181525050826125f45760016125f7565b60005b60ff168160018151811061260d5761260d613628565b602090810291909101015292915050565b60008161262f600160f81b82613845565b9392505050565b60006000805160206138a2833981519152808380099150808283098181820990508181840992508183850993508184840992508183840990508181820982818309905082818209905082818209905082818309915082828609945082858609915082828309915082828509935082848509915082828309915082828309915082828509915082828609945082858609915082828309915082828309915082828609915082828509935082848609945082858609915082828309915082828509935082848509915082828309905082818209905082818209905082818309915082828609945082858509935082848509915082828309915082828309915082828609945082858609915082828309915082828609915082828309915082828309915082828609915082828509935082848509915082828309905082818209905082818309905082818509905082818209905082818209905082818209905082818209905082818309915082828609945082858609915082828609915082828509935082848509915082828509915082828309915082828309905082818309905082818209838182099050838182099050838182099050838182099050838183099150508281830991508282860994508285850993508284850991508282860994508285850993508284860994508285850993508284860994508285860991508282860991508282830991508282850993508284850991508282830991508282860994508285850993508284850991508282850991508282860994508285850993508284860994508285850993508284850991508282830991508282850991508282860994508285860991508282860991508282850993508284860994508285850993508284860994508285850993508284850991508282850991508282830991508282860994508285850993508284850991508282850991508282830991508282860994508285860991508282830990508281820990508281830990508281860990508281820990508281820990508281820990508281820990508281830991508282850993508284860994508285850993508284860994508285860991508282860991508282830991508282830991508282830991508282860991508282850993508284850991508282850991508282830991508282860994508285860991508282860991508282850993508284860994508285860991508282830991508282850993508284860994508285860991508282850993508284860994508285850993508284850991508282850991508282860994508285850993508284850991508282850991508282830991508282830991508282860994508285860991508282830991508282830991508282860991508282850993508284860994508285860991508282860990508281820990508281820990508281830991508282850993508284850991508282860994508285850993508284860994508285850993508284860994508285850993508284850991508282850990508281850991508282830991508282830991508282820991505081818509935081848409925081838509935081848409925081838509935081848509905081818509905081818409925050808284099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808383099392505050565b60405160009060ff1990612df790869086908690602001613858565b604051602081830303815290604052805190602001201690509392505050565b6000828060011a60f81b6001600160f81b03191615612e49576040516359b7581b60e11b815260040160405180910390fd5b60ff60e81b60e884901b1617600160f01b17905092915050565b80356001600160a01b0381168114612e7a57600080fd5b919050565b60008060408385031215612e9257600080fd5b612e9b83612e63565b946020939093013593505050565b600060208284031215612ebb57600080fd5b5035919050565b600060208284031215612ed457600080fd5b6105fc82612e63565b60008083601f840112612eef57600080fd5b5081356001600160401b03811115612f0657600080fd5b602083019150836020828501011115612f1e57600080fd5b9250929050565b600080600060408486031215612f3a57600080fd5b8335925060208401356001600160401b03811115612f5757600080fd5b612f6386828701612edd565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612fae57612fae612f70565b604052919050565b60006001600160401b03821115612fcf57612fcf612f70565b5060051b60200190565b600082601f830112612fea57600080fd5b81356020612fff612ffa83612fb6565b612f86565b82815260059290921b8401810191818101908684111561301e57600080fd5b8286015b848110156130395780358352918301918301613022565b509695505050505050565b6000806040838503121561305757600080fd5b82356001600160401b038082111561306e57600080fd5b818501915085601f83011261308257600080fd5b81356020613092612ffa83612fb6565b82815260059290921b840181019181810190898411156130b157600080fd5b948201945b838610156130d6576130c786612e63565b825294820194908201906130b6565b965050860135925050808211156130ec57600080fd5b506130f985828601612fd9565b9150509250929050565b600081518084526020808501945080840160005b8381101561313357815187529582019590820190600101613117565b509495945050505050565b6020815260006105fc6020830184613103565b60008083601f84011261316357600080fd5b5081356001600160401b0381111561317a57600080fd5b6020830191508360208260051b8501011115612f1e57600080fd5b60008060008060008060a087890312156131ae57600080fd5b6131b787612e63565b9550602087013594506040870135935060608701356001600160401b038111156131e057600080fd5b6131ec89828a01613151565b979a9699509497949695608090950135949350505050565b801515811461321257600080fd5b50565b6000806040838503121561322857600080fd5b82359150602083013561323a81613204565b809150509250929050565b6000806040838503121561325857600080fd5b50508035926020909101359150565b60008060008060008060008060a0898b03121561328357600080fd5b61328c89612e63565b975061329a60208a01612e63565b965060408901356001600160401b03808211156132b657600080fd5b6132c28c838d01613151565b909850965060608b01359150808211156132db57600080fd5b6132e78c838d01613151565b909650945060808b013591508082111561330057600080fd5b5061330d8b828c01612edd565b999c989b5096995094979396929594505050565b60008060006060848603121561333657600080fd5b505081359360208301359350604090920135919050565b60008060006040848603121561336257600080fd5b8335925060208401356001600160401b0381111561337f57600080fd5b612f6386828701613151565b60008060008060008060a087890312156133a457600080fd5b6133ad87612e63565b95506133bb60208801612e63565b9450604087013593506060870135925060808701356001600160401b038111156133e457600080fd5b6133f089828a01612edd565b979a9699509497509295939492505050565b60006020828403121561341457600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b838152604060208201526000610a2f60408301848661341b565b604080825283519082018190526000906020906060840190828701845b828110156134a05781516001600160a01b03168452928401929084019060010161347b565b505050838103828501526134b48186613103565b9695505050505050565b600060208083850312156134d157600080fd5b82516001600160401b038111156134e757600080fd5b8301601f810185136134f857600080fd5b8051613506612ffa82612fb6565b81815260059190911b8201830190838101908783111561352557600080fd5b928401925b828410156135435783518252928401929084019061352a565b979650505050505050565b60018060a01b038616815284602082015283604082015260a06060820152600061357b60a0830185613103565b90508260808301529695505050505050565b6001600160a01b0385811682528416602082015260a0604082018190526000906135b990830185613103565b82810360608401526135cb8185613103565b838103608090940193909352505060008152602001949350505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105ff576105ff6135e8565b80820281158282048414176105ff576105ff6135e8565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826136635761366361363e565b500490565b81835260006001600160fb1b0383111561368157600080fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906136c690830186613103565b82810360608401526136d9818587613668565b83810360809094019390935250506000815260200195945050505050565b60018060a01b03851681528360208201528260408201526080606082015260006134b46080830184613103565b604081526000613738604083018587613668565b9050826020830152949350505050565b8281526040602082015260006137616040830184613103565b949350505050565b60006020828403121561377b57600080fd5b815161262f81613204565b6001600160a01b03878116825286166020820152604081018590526060810184905260a0608082018190526000906137c1908301848661341b565b98975050505050505050565b6000826137dc576137dc61363e565b500690565b60005b838110156137fc5781810151838201526020016137e4565b50506000910152565b600082516138178184602087016137e1565b9190910192915050565b6000806040838503121561383457600080fd5b505080516020909101519092909150565b808201808211156105ff576105ff6135e8565b60018060a01b0384168152826020820152606060408201526000825180606084015261388b8160808501602087016137e1565b601f01601f19169190910160800194935050505056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212208df348c484c9694ae085c25ce9638a4e50a9be9603fb0ccd0d312f6ba509b7e964736f6c634300081300336101206040523480156200001257600080fd5b50604051620013903803806200139083398101604081905262000035916200016e565b6040518060400160405280601281526020017115dc985c1c19590810dbdb1b185d195c985b60721b8152506040518060400160405280600481526020016315d0d3d360e21b8152508282600090816200008f919062000262565b5060016200009e838262000262565b5060ff81166080524660a052620000b4620000d2565b60c05250503360e05250506001600160a01b031661010052620003ac565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200010691906200032e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080604083850312156200018257600080fd5b82516001600160a01b03811681146200019a57600080fd5b602084015190925060ff81168114620001b257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e857607f821691505b6020821081036200020957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025d57600081815260208120601f850160051c81016020861015620002385750805b601f850160051c820191505b81811015620002595782815560010162000244565b5050505b505050565b81516001600160401b038111156200027e576200027e620001bd565b62000296816200028f8454620001d3565b846200020f565b602080601f831160018114620002ce5760008415620002b55750858301515b600019600386901b1c1916600185901b17855562000259565b600085815260208120601f198616915b82811015620002ff57888601518255948401946001909101908401620002de565b50858210156200031e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008083546200033e81620001d3565b600182811680156200035957600181146200036f57620003a0565b60ff1984168752821515830287019450620003a0565b8760005260208060002060005b85811015620003975781548a8201529084019082016200037c565b50505082870194505b50929695505050505050565b60805160a05160c05160e05161010051610f756200041b600039600081816102120152818161038801526107650152600081816102910152818161033d015281816105fe01528181610661015261071a015260006105c701526000610592015260006101ab0152610f756000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636f307dc3116100ad578063a0712d6811610071578063a0712d68146102bb578063a9059cbb146102ce578063bf376c7a146102e1578063d505accf146102f4578063dd62ed3e1461030757600080fd5b80636f307dc31461020d57806370a082311461024c5780637ecebe001461026c5780638da5cb5b1461028c57806395d89b41146102b357600080fd5b806323b872dd116100f457806323b872dd14610193578063313ce567146101a65780633644e515146101df57806339f47693146101e757806342966c68146101fa57600080fd5b80630357371d1461012657806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c575b600080fd5b610139610134366004610c75565b610332565b005b6101436103b3565b6040516101509190610c9f565b60405180910390f35b61016c610167366004610c75565b610441565b6040519015158152602001610150565b61018560025481565b604051908152602001610150565b61016c6101a1366004610ced565b6104ae565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610150565b61018561058e565b6101396101f5366004610c75565b6105e9565b610139610208366004610d29565b6105f3565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610150565b61018561025a366004610d42565b60036020526000908152604090205481565b61018561027a366004610d42565b60056020526000908152604090205481565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b610143610649565b6101396102c9366004610d29565b610656565b61016c6102dc366004610c75565b6106a9565b6101396102ef366004610c75565b61070f565b610139610302366004610d64565b610797565b610185610315366004610dd7565b600460209081526000928352604080842090915290825290205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037b57604051635fc483c560e01b815260040160405180910390fd5b6103af6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836109e0565b5050565b600080546103c090610e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546103ec90610e0a565b80156104395780601f1061040e57610100808354040283529160200191610439565b820191906000526020600020905b81548152906001019060200180831161041c57829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061049c9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019811461050a576104e58382610e5a565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b03851660009081526003602052604081208054859290610532908490610e5a565b90915550506001600160a01b0380851660008181526003602052604090819020805487019055519091871690600080516020610f208339815191529061057b9087815260200190565b60405180910390a3506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046146105c4576105bf610a67565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b61037b3382610b01565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063c57604051635fc483c560e01b815260040160405180910390fd5b6106463382610b01565b50565b600180546103c090610e0a565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461069f57604051635fc483c560e01b815260040160405180910390fd5b6106463382610b6b565b336000908152600360205260408120805483919083906106ca908490610e5a565b90915550506001600160a01b03831660008181526003602052604090819020805485019055513390600080516020610f208339815191529061049c9086815260200190565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461075857604051635fc483c560e01b815260040160405180910390fd5b61078d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084610bbd565b6103af8282610b6b565b428410156107ec5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b600060016107f861058e565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610904573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061093a5750876001600160a01b0316816001600160a01b0316145b6109775760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016107e3565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610a615760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016107e3565b50505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051610a999190610e6d565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821660009081526003602052604081208054839290610b29908490610e5a565b90915550506002805482900390556040518181526000906001600160a01b03841690600080516020610f20833981519152906020015b60405180910390a35050565b8060026000828254610b7d9190610f0c565b90915550506001600160a01b038216600081815260036020908152604080832080548601905551848152600080516020610f208339815191529101610b5f565b60006040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b03841660248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080610c525760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016107e3565b5050505050565b80356001600160a01b0381168114610c7057600080fd5b919050565b60008060408385031215610c8857600080fd5b610c9183610c59565b946020939093013593505050565b600060208083528351808285015260005b81811015610ccc57858101830151858201604001528201610cb0565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060608486031215610d0257600080fd5b610d0b84610c59565b9250610d1960208501610c59565b9150604084013590509250925092565b600060208284031215610d3b57600080fd5b5035919050565b600060208284031215610d5457600080fd5b610d5d82610c59565b9392505050565b600080600080600080600060e0888a031215610d7f57600080fd5b610d8888610c59565b9650610d9660208901610c59565b95506040880135945060608801359350608088013560ff81168114610dba57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610dea57600080fd5b610df383610c59565b9150610e0160208401610c59565b90509250929050565b600181811c90821680610e1e57607f821691505b602082108103610e3e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104a8576104a8610e44565b600080835481600182811c915080831680610e8957607f831692505b60208084108203610ea857634e487b7160e01b86526022600452602486fd5b818015610ebc5760018114610ed157610efe565b60ff1986168952841515850289019650610efe565b60008a81526020902060005b86811015610ef65781548b820152908501908301610edd565b505084890196505b509498975050505050505050565b808201808211156104a8576104a8610e4456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ef8f398dee7e56fca826f2644fb14f958a684c1b9031d77258237094af26517664736f6c6343000813003300000000000000000000000088e3c059315c8202384b963238c52a4dfafd9ff3000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000df86070d35d02a05f3d1f94e7ae32d2972949e3c