witnet-solidity-bridge
Version:
Witnet Solidity Bridge contracts for EVM-compatible chains
543 lines • 79.2 kB
JSON
{
"_format": "hh3-artifact-1",
"contractName": "WitOracleTrustlessDataLib",
"sourceName": "contracts/data/WitOracleTrustlessDataLib.sol",
"abi": [
{
"inputs": [],
"name": "EmptyBuffer",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "range",
"type": "uint256"
}
],
"name": "IndexOutOfBounds",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "InvalidLengthEncoding",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "read",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expected",
"type": "uint256"
}
],
"name": "UnexpectedMajorType",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "unexpected",
"type": "uint256"
}
],
"name": "UnsupportedMajorType",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Burnt",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Received",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "prevIndex",
"type": "uint32"
},
{
"internalType": "bytes24",
"name": "prevRoot",
"type": "bytes24"
},
{
"internalType": "bytes16",
"name": "ddrTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "bytes16",
"name": "droTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "uint256[4]",
"name": "nextCommitteeAggPubkey",
"type": "uint256[4]"
}
],
"indexed": false,
"internalType": "struct Witnet.Beacon",
"name": "head",
"type": "tuple"
}
],
"name": "Rollup",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Slashed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Staked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Unstaked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "Witnet.QueryId",
"name": "queryId",
"type": "uint64"
},
{
"indexed": false,
"internalType": "address",
"name": "evmDisputer",
"type": "address"
}
],
"name": "WitOracleQueryReportDispute",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "Witnet.TransactionHash",
"name": "witDrTxHash",
"type": "bytes32"
},
{
"internalType": "Witnet.RadonHash",
"name": "queryRadHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint16",
"name": "witResultMaxSize",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "witCommitteeSize",
"type": "uint16"
},
{
"internalType": "uint64",
"name": "witUnitaryReward",
"type": "uint64"
}
],
"internalType": "struct Witnet.QuerySLA",
"name": "queryParams",
"type": "tuple"
},
{
"internalType": "Witnet.Timestamp",
"name": "resultTimestamp",
"type": "uint64"
},
{
"internalType": "bytes",
"name": "resultCborBytes",
"type": "bytes"
}
],
"internalType": "struct Witnet.DataPushReport",
"name": "report",
"type": "tuple"
},
{
"components": [
{
"components": [
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "prevIndex",
"type": "uint32"
},
{
"internalType": "bytes24",
"name": "prevRoot",
"type": "bytes24"
},
{
"internalType": "bytes16",
"name": "ddrTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "bytes16",
"name": "droTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "uint256[4]",
"name": "nextCommitteeAggPubkey",
"type": "uint256[4]"
}
],
"internalType": "struct Witnet.Beacon",
"name": "beacon",
"type": "tuple"
},
{
"internalType": "uint256[2]",
"name": "committeeAggSignature",
"type": "uint256[2]"
},
{
"internalType": "uint256[4][]",
"name": "committeeMissingPubkeys",
"type": "uint256[4][]"
}
],
"internalType": "struct Witnet.FastForward[]",
"name": "rollup",
"type": "tuple[]"
},
{
"internalType": "bytes32[]",
"name": "droMerkleTrie",
"type": "bytes32[]"
}
],
"name": "parseDataPushReport",
"outputs": [
{
"components": [
{
"internalType": "enum Witnet.ResultStatus",
"name": "status",
"type": "Witnet.ResultStatus"
},
{
"internalType": "enum Witnet.RadonDataTypes",
"name": "dataType",
"type": "Witnet.RadonDataTypes"
},
{
"internalType": "Witnet.TransactionHash",
"name": "drTxHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "finality",
"type": "uint256"
},
{
"internalType": "Witnet.Timestamp",
"name": "timestamp",
"type": "uint64"
},
{
"components": [
{
"components": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "cursor",
"type": "uint256"
}
],
"internalType": "struct WitnetBuffer.Buffer",
"name": "buffer",
"type": "tuple"
},
{
"internalType": "uint8",
"name": "initialByte",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "majorType",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "additionalInformation",
"type": "uint8"
},
{
"internalType": "uint64",
"name": "len",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "tag",
"type": "uint64"
}
],
"internalType": "struct WitnetCBOR.CBOR",
"name": "value",
"type": "tuple"
}
],
"internalType": "struct Witnet.DataResult",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"components": [
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "prevIndex",
"type": "uint32"
},
{
"internalType": "bytes24",
"name": "prevRoot",
"type": "bytes24"
},
{
"internalType": "bytes16",
"name": "ddrTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "bytes16",
"name": "droTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "uint256[4]",
"name": "nextCommitteeAggPubkey",
"type": "uint256[4]"
}
],
"internalType": "struct Witnet.Beacon",
"name": "beacon",
"type": "tuple"
},
{
"internalType": "uint256[2]",
"name": "committeeAggSignature",
"type": "uint256[2]"
},
{
"internalType": "uint256[4][]",
"name": "committeeMissingPubkeys",
"type": "uint256[4][]"
}
],
"internalType": "struct Witnet.FastForward[]",
"name": "rollup",
"type": "tuple[]"
}
],
"name": "verifyBeacons",
"outputs": [
{
"components": [
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "prevIndex",
"type": "uint32"
},
{
"internalType": "bytes24",
"name": "prevRoot",
"type": "bytes24"
},
{
"internalType": "bytes16",
"name": "ddrTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "bytes16",
"name": "droTalliesMerkleRoot",
"type": "bytes16"
},
{
"internalType": "uint256[4]",
"name": "nextCommitteeAggPubkey",
"type": "uint256[4]"
}
],
"internalType": "struct Witnet.Beacon",
"name": "head",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x613f56610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061011c575f3560e01c806355caae04116100a9578063adc9772e11610079578063adc9772e146102ee578063bd75eadb1461030d578063c2a672e014610320578063e74f82391461033f578063f308da0f1461035e575f5ffd5b806355caae041461025f578063653ac7bc1461027e57806385783377146102b05780639dc29fac146102cf575f5ffd5b806345ac7f3f116100ef57806345ac7f3f146101b65780634656a450146101ed57806347e7ef241461020057806351cff8d9146102215780635386690814610240575f5ffd5b80631ac07503146101205780633317044f1461014957806334c20ee3146101695780633962372d14610196575b5f5ffd5b61013361012e366004612fee565b61037d565b6040516101409190613166565b60405180910390f35b61015c6101573660046131e8565b6105cd565b6040516101409190613226565b818015610174575f5ffd5b506101886101833660046132c7565b6106ed565b604051908152602001610140565b6101a96101a436600461336c565b610bf0565b604051610140919061339c565b8180156101c1575f5ffd5b506101d56101d03660046133af565b610cca565b6040516001600160481b039091168152602001610140565b6101336101fb36600461336c565b610e67565b81801561020b575f5ffd5b5061021f61021a3660046133ee565b610e8e565b005b81801561022c575f5ffd5b5061018861023b366004613416565b610f09565b81801561024b575f5ffd5b5061018861025a3660046133af565b610f70565b81801561026a575f5ffd5b506101886102793660046133af565b611096565b818015610289575f5ffd5b5061029d61029836600461342f565b611256565b6040516101409796959493929190613478565b8180156102bb575f5ffd5b506101336102ca366004612fee565b6113f6565b8180156102da575f5ffd5b5061021f6102e93660046133ee565b6114b0565b8180156102f9575f5ffd5b5061021f6103083660046133ee565b611596565b6101a961031b36600461336c565b61167f565b81801561032b575f5ffd5b5061021f61033a3660046133ee565b6117e4565b81801561034a575f5ffd5b5061021f6103593660046134de565b611896565b818015610369575f5ffd5b5061015c6103783660046131e8565b61199f565b610385612e49565b6020860135158015906103a557505f6103a160c0880188613518565b9050115b80156103ce57506103cc6103bf60c0880160a0890161356e565b6001600160401b03161590565b155b80156103da5750853515155b80156103fb57506103fb6103f6368890038801604089016135f8565b611ad8565b6104435760405162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081c5d595c9e481c995c1bdc9d60621b60448201526064015b60405180910390fd5b5f61044e86866105cd565b905061046861046360c0890160a08a0161356e565b611b13565b610473906001613679565b6001600160401b0316815f015163ffffffff1610156104cd5760405162461bcd60e51b815260206004820152601660248201527536b4b9b632b0b234b733903432b0b2103132b0b1b7b760511b604482015260640161043a565b6104e084846104db8a611b20565b611ba9565b60808201516001600160801b031916146105335760405162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015260640161043a565b6040805160c080820183525f80835260208301526105c29282019061055d908b0160a08c0161356e565b6001600160401b031681528935602082015260400161057f60c08b018b613518565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602090910152600343611be8565b979650505050505050565b6105d5612e89565b61066f83835f8181106105ea576105ea613698565b90506020028101906105fc91906136ac565b7ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e1015f8686828161062e5761062e613698565b905060200281019061064091906136ac565b61064e9060208101906136de565b63ffffffff1681526020019081526020015f20611e7d90919063ffffffff16565b6106ca5760405162461bcd60e51b815260206004820152602660248201527f666173742d666f7277617264696e672066726f6d20756e6d61746368696e67206044820152653132b0b1b7b760d11b606482015260840161043a565b6106d48383611eae565b8036038101906106e49190613726565b90505b92915050565b5f8061070d6106ff602089018961356e565b6001600160401b03166120d0565b90505f5f61071b838a6120ff565b9150915081819061073f5760405162461bcd60e51b815260040161043a91906137e4565b505f61074b8c8c61199f565b905061076561076060808c0160608d0161356e565b612217565b610770906001613679565b6001600160401b0316815f015163ffffffff16146107c95760405162461bcd60e51b815260206004820152601660248201527536b4b9b632b0b234b733903432b0b2103132b0b1b7b760511b604482015260640161043a565b6107d789896104db8d612223565b60608201516001600160801b0319161461082a5760405162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015260640161043a565b5f6108358589610bf0565b9050600281600681111561084b5761084b613089565b036109ed576005850154600486015461087390600160c01b90046001600160401b0316612279565b6040516108899291906006890190602001613828565b60408051601f19818403018152919052805160209091012060a08c01356108b660808e0160608f0161356e565b6108c360808f018f613518565b6040516020016108d694939291906138ee565b60405160208183030381529060405280519060200120036109325760405162461bcd60e51b81526020600482015260166024820152751c1c9bdd9a5b99c81b9bc819985ad9481c995c1bdc9d60521b604482015260640161043a565b600485015461094b906001600160a01b03163389611896565b600985015461096b903390600160781b90046001600160481b0316610e8e565b6004850180546001600160a01b0319163317905561098c60808c018c613518565b600687019161099c91908361396c565b5060a08b013560058601556109bf6109ba60808d0160608e0161356e565b6122da565b6004860180546001600160401b0392909216600160c01b026001600160c01b03909216919091179055610b93565b6006816006811115610a0157610a01613089565b03610b545760058501546004860154610a2990600160c01b90046001600160401b0316612279565b604051610a3f9291906006890190602001613828565b60408051601f19818403018152919052805160209091012060a08c0135610a6c60808e0160608f0161356e565b610a7960808f018f613518565b604051602001610a8c94939291906138ee565b6040516020818303038152906040528051906020012014610aef5760405162461bcd60e51b815260206004820152601c60248201527f70726f76696e672064697370757465642066616b65207265706f727400000000604482015260640161043a565b60078501546004860154610b10916001600160a01b03908116911689611896565b60048501546009860154610b3d916001600160a01b031690600160781b90046001600160481b0316610e8e565b6007850180546001600160a01b0319169055610b93565b610b5d816122f0565b604051602001610b6d9190613a3c565b60408051601f198184030181529082905262461bcd60e51b825261043a916004016137e4565b6009850154610bb3908890600160781b90046001600160481b0316613a66565b60099590950180546effffffffffffffffffffffffffffff16600160c01b436001600160401b03160217905550929b9a5050505050505050505050565b60048201545f90600160c01b90046001600160401b031615610c52576009830154600160c01b90046001600160401b03164310610c4a5760078301546001600160a01b031615610c42575060066106e7565b5060036106e7565b5060026106e7565b6009830154600160c01b90046001600160401b03165f819003610c78575f9150506106e7565b610c83836002613a79565b610c8d9082613a66565b431115610c9e5760059150506106e7565b610ca88382613a66565b431115610cb95760049150506106e7565b60019150506106e7565b5092915050565b5f5f610cd5856120d0565b80549091506001600160a01b03163314610d015760405162461bcd60e51b815260040161043a90613a90565b6009810154600160781b90046001600160481b031691505f610d238286610bf0565b90506005816006811115610d3957610d39613089565b03610d9e576001600160481b03831615610d995760078201546001600160a01b031615610d995760048201546007830154610d81916001600160a01b03908116911686611896565b6007820154610d99906001600160a01b0316856117e4565b610dc0565b6003816006811115610db257610db2613089565b14610dc057610b5d816122f0565b5f8681527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e18460205260408120818155908181610dff6001830182612ebf565b505f600282018190556003909101819055600483018181556005840182905590610e2c6006850182612ebf565b5060030180546001600160a01b0319169055506008810180546bffffffffffffffffffffffff191690555f6009909101555090949350505050565b610e6f612e49565b5f610e7a8484610bf0565b9050610e868482612480565b949350505050565b6001600160a01b0382165f9081525f516020613f015f395f51905f52602052604081208054839290610ec1908490613a66565b90915550506040518181526001600160a01b038316907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874906020015b60405180910390a25050565b6001600160a01b0381165f8181525f516020613f015f395f51905f5260209081526040808320805493815590518381529293909290917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a250919050565b5f5f610f7b856120d0565b90506002610f898286610bf0565b6006811115610f9a57610f9a613089565b14610fe05760405162461bcd60e51b81526020600482015260166024820152756e6f7420696e205265706f727465642073746174757360501b604482015260640161043a565b610fea3384611596565b610ff48443613a66565b6009820180546001600160c01b0316600160c01b6001600160401b0393841602179055600782018054336001600160a01b0319909116811790915560408051928816835260208301919091527f0c659cb9cb62e341db66980f799f14edbc937a08725319a4cd26d77b077e3b7d910160405180910390a1600981015461108b908490600160781b90046001600160481b0316613a66565b9150505b9392505050565b5f5f6110a1856120d0565b60098101805468ffffffffffffffffff60781b198116909155600160781b90046001600160481b0316925090508161110d5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015260640161043a565b6111173383610e8e565b5f6111228286610bf0565b9050600381600681111561113857611138613089565b036111755781546001600160a01b031633146111665760405162461bcd60e51b815260040161043a90613a90565b61117033856117e4565b61124d565b600581600681111561118957611189613089565b03610b545760078201546001600160a01b0316156112245760078201546001600160a01b031633146111f05760405162461bcd60e51b815260206004820152601060248201526f3737ba103a3432903234b9b83aba32b960811b604482015260640161043a565b6004820154611209906001600160a01b03163386611896565b61121333856117e4565b61121d8484613a66565b925061124d565b81546001600160a01b031633146111705760405162461bcd60e51b815260040161043a90613a90565b50509392505050565b5f808080808060608161126f6106ff60208d018d61356e565b90505f5f61127d838e6120ff565b915091508181906112a15760405162461bcd60e51b815260040161043a91906137e4565b505f6112ad848e610bf0565b905060018160068111156112c3576112c3613089565b03611330576112d18e6125a1565b9a506001600160a01b038b16331461132b5760405162461bcd60e51b815260206004820152601b60248201527f756e617574686f72697a6564207175657279207265706f727465720000000000604482015260640161043a565b61134d565b600481600681111561134457611344613089565b03610b5457339a505b611357338d611596565b3a99506113648d43613a66565b985061137360208f018f61356e565b975061138b8e60600160208101906109ba919061356e565b965060a08e013595506113a160808f018f613518565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050509450505050509397509397509397909450565b6113fe612e49565b60208601351580159061141e57505f61141a60c0880188613518565b9050115b801561143a57506114386103bf60c0880160a0890161356e565b155b80156114465750853515155b801561146257506114626103f6368890038801604089016135f8565b6114a55760405162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081c5d595c9e481c995c1bdc9d60621b604482015260640161043a565b5f61044e868661199f565b6001600160a01b0382165f9081525f516020613f015f395f51905f5260205260409020548111156115235760405162461bcd60e51b815260206004820181905260248201527f457363726f7761626c653a20696e73756666696369656e742062616c616e6365604482015260640161043a565b6001600160a01b0382165f9081525f516020613f015f395f51905f52602052604081208054839290611556908490613abb565b90915550506040518181526001600160a01b038316907f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b190602001610efd565b6001600160a01b0382165f9081525f516020613f015f395f51905f5260205260409020805482111561160a5760405162461bcd60e51b815260206004820181905260248201527f457363726f7761626c653a20696e73756666696369656e742062616c616e6365604482015260640161043a565b81815f015f82825461161c9190613abb565b9250508190555081816001015f8282546116369190613a66565b90915550506040518281526001600160a01b038416907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020015b60405180910390a2505050565b5f5f61168b8484610bf0565b905060038160068111156116a1576116a1613089565b03611738576006840180545f9082906116b9906137f6565b9050111561172d578054601b60fb1b9082905f906116d6906137f6565b81106116e4576116e4613698565b81546001161561170157905f5260205f2090602091828204019190065b9054901a600160f81b026001600160f81b03191614611721576002611724565b60035b925050506106e7565b6005925050506106e7565b600281600681111561174c5761174c613089565b0361175b5760049150506106e7565b600181600681111561176f5761176f613089565b148061178c5750600481600681111561178a5761178a613089565b145b1561179b5760019150506106e7565b60058160068111156117af576117af613089565b14806117cc575060068160068111156117ca576117ca613089565b145b156117db5760069150506106e7565b5f9150506106e7565b6001600160a01b0382165f9081525f516020613f015f395f51905f5260205260409020600181015482111561182b5760405162461bcd60e51b815260040161043a90613ace565b81816001015f82825461183e9190613abb565b90915550508054829082905f90611856908490613a66565b90915550506040518281526001600160a01b038416907f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7590602001611672565b6001600160a01b038381165f9081525f516020613f015f395f51905f5260205260408082209285168252902060018201548311156118e65760405162461bcd60e51b815260040161043a90613ace565b82815f015f8282546118f89190613a66565b9250508190555082826001015f8282546119129190613abb565b90915550506040518381526001600160a01b038616907f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd9060200160405180910390a2836001600160a01b03167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258748460405161199091815260200190565b60405180910390a25050505050565b6119a7612e89565b6119b183836105cd565b9050807ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e100825163ffffffff9081165f9081526001928301602090815260409182902085518154928701518785015190941c600160401b026001600160401b039486166401000000000267ffffffffffffffff19909416919095161791909117919091169190911781556060830151608080850151811c600160801b0291901c179181019190915560a0820151611a6d9060028301906004612ef9565b5050815163ffffffff167ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e10055506040517fa6c87e90e325ce88c911f114881deb39dabb89e1ba9bf11a1a8e0ca8de94798a90611aca908390613226565b60405180910390a192915050565b5f5f826020015161ffff16118015611af95750607f826020015161ffff1611155b80156106e7575050604001516001600160401b0316151590565b5f6106e761076083612279565b5f81356020830135611b386060850160408601613b11565b611b486080860160608701613b11565b611b5860a087016080880161356e565b611b6860c0880160a0890161356e565b611b7560c0890189613518565b604051602001611b8c989796959493929190613b2a565b604051602081830303815290604052805190602001209050919050565b805f5b83811015611be057611bd682868684818110611bca57611bca613698565b90506020020135612604565b9150600101611bac565b509392505050565b611bf0612e49565b60608401516040820152602084015163ffffffff1615611c415760408401805160208087015191811b67ffffffff000000001663ffffffff928316176060850152915190911c166080820152611c5d565b6001600160401b03808316606083015260408501511660808201525b60808401515115611cb257611c758460800151612630565b60a08201819052611c8590612654565b81602001906013811115611c9b57611c9b613089565b90816013811115611cae57611cae613089565b9052505b6003836006811115611cc657611cc6613089565b03611dd55760808401515115611dcd5760808401518051601b60fb1b91905f90611cf257611cf2613698565b01602001516001600160f81b03191603611dcd57600181602001516013811115611d1e57611d1e613089565b148015611d4b575060a08101518051606090910151600191611d3f91612716565b6001600160401b031610155b15611dc4576004611d5f8260a00151612654565b6013811115611d7057611d70613089565b03611dc457611d828160a001516127dd565b60070b60ff811115611d9657611d96613089565b819060ff811115611da957611da9613089565b908160ff811115611dbc57611dbc613089565b90525061108f565b60ff8181611dbc565b5f8181611dbc565b6002836006811115611de957611de9613089565b03611df6578060f1611da9565b6001836006811115611e0a57611e0a613089565b1480611e2757506004836006811115611e2557611e25613089565b145b15611e34578060f0611da9565b6005836006811115611e4857611e48613089565b1480611e6557506006836006811115611e6357611e63613089565b145b15611e72578060f9611da9565b60ff81529392505050565b5f611e878261284c565b67ffffffffffffffff1916611e9b846128b3565b67ffffffffffffffff1916149392505050565b3660015b828110156120a1578383611ec7600184613abb565b818110611ed657611ed6613698565b9050602002810190611ee891906136ac565b611ef69060208101906136de565b63ffffffff16848483818110611f0e57611f0e613698565b9050602002810190611f2091906136ac565b611f319060408101906020016136de565b63ffffffff16148015611fc25750611f758484611f4f600185613abb565b818110611f5e57611f5e613698565b9050602002810190611f7091906136ac565b61284c565b67ffffffffffffffff1916848483818110611f9257611f92613698565b9050602002810190611fa491906136ac565b611fb5906060810190604001613b89565b67ffffffffffffffff1916145b611fcb82612901565b604051602001611fdb9190613ba2565b604051602081830303815290604052906120085760405162461bcd60e51b815260040161043a91906137e4565b5061201560036040613bfa565b63ffffffff1684848381811061202d5761202d613698565b905060200281019061203f91906136ac565b61204e90610160810190613c21565b9050111561205b82612901565b60405160200161206b9190613c66565b604051602081830303815290604052906120985760405162461bcd60e51b815260040161043a91906137e4565b50600101611eb2565b5082826120af600182613abb565b8181106120be576120be613698565b90506020028101906106e491906136ac565b5f9081527ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e1846020526040902090565b60098201545f9060609060881b6001600160881b0319166121266040850160208601613caf565b6001600160881b031916146121675750506040805180820190915260128152710d2dcecc2d8d2c840e2eacae4f240d0c2e6d60731b60208201525f90612210565b61217a6103bf608085016060860161356e565b156121b35750506040805180820190915260148152730d2dcecc2d8d2c840e4cae6ead8e840cae0dec6d60631b60208201525f90612210565b6121c06080840184613518565b90505f036121fc5750506040805180820190915260148152731a5b9d985b1a5908195b5c1d1e481c995cdd5b1d60621b60208201525f90612210565b5050604080515f8152602081019091526001905b9250929050565b5f6106e7600a83613cd6565b5f6122346040830160208401613caf565b6122416040840184613518565b60a0850135612256608087016060880161356e565b6122636080880188613518565b604051602001611b8c9796959493929190613d03565b5f6001600160401b038216156122a95760146122955f84613d58565b61229f9190613cd6565b6106e7905f613679565b6001600160401b038216156122ce57602d6122c45f84613d58565b6106e79190613cd6565b505f919050565b919050565b5f6122e55f83613d58565b61229f906014613d77565b6060600182600681111561230657612306613089565b0361232d575050604080518082019091526006815265141bdcdd195960d21b602082015290565b600282600681111561234157612341613089565b0361236a57505060408051808201909152600881526714995c1bdc9d195960c21b602082015290565b600382600681111561237e5761237e613089565b036123a8575050604080518082019091526009815268119a5b985b1a5e995960ba1b602082015290565b60048260068111156123bc576123bc613089565b036123e457505060408051808201909152600781526611195b185e595960ca1b602082015290565b60058260068111156123f8576123f8613089565b03612420575050604080518082019091526007815266115e1c1a5c995960ca1b602082015290565b600682600681111561243457612434613089565b0361245d575050604080518082019091526008815267111a5cdc1d5d195960c21b602082015290565b50506040805180820190915260078152662ab735b737bbb760c91b602082015290565b612488612e49565b6040805160c0810182526004850180546001600160a01b0381168352600160a01b810463ffffffff166020840152600160c01b90046001600160401b031692820192909252600585015460608201526006850180546106e4939160808401916124f0906137f6565b80601f016020809104026020016040519081016040528092919081815260200182805461251c906137f6565b80156125675780601f1061253e57610100808354040283529160200191612567565b820191905f5260205f20905b81548152906001019060200180831161254a57829003601f168201915b5050509183525050600391909101546001600160a01b031660209091015260098501548490600160c01b90046001600160401b0316611be8565b5f6106e76125b26040840184613518565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506125ff92506125fa9150506040860160208701613caf565b612a55565b612a71565b5f81831061261e575f8281526020849052604090206106e4565b5f8381526020839052604090206106e4565b612638612f37565b604080518082019091528281525f602082015261108f81612b53565b5f6126688251805151602090910151101590565b6122d5576006826040015160ff16116126b05760408201516502020183808360d11b9060ff166007811061269e5761269e613698565b1a60138111156106e7576106e7613089565b816040015160ff166007036122d557816060015160ff16601414806126dc5750816060015160ff166015145b156126e957506002919050565b6019826060015160ff16101580156127095750601b826060015160ff1611155b156122d557506005919050565b5f60188260ff16101561272d575060ff81166106e7565b8160ff1660180361274b5761274183612c73565b60ff1690506106e7565b8160ff1660190361276a5761275f83612cd3565b61ffff1690506106e7565b8160ff16601a0361278b5761277e83612d3e565b63ffffffff1690506106e7565b8160ff16601b036127a65761279f83612d9c565b90506106e7565b8160ff16601f036127bf57506001600160401b036106e7565b604051636d785b1360e01b815260ff8316600482015260240161043a565b5f816040015160ff1660010361280c575f6127ff835f01518460600151612716565b905061108f815f19613d99565b816040015160ff165f03612823576106e782612dfa565b604080830151905161800560e51b815260ff90911660048201526001602482015260440161043a565b5f61285a60208301836136de565b61286a60408401602085016136de565b61287a6060850160408601613b89565b61288a6080860160608701613dc8565b61289a60a0870160808801613dc8565b8660a001604051602001611b8c96959493929190613de1565b80546001820154604080515f93611b8c9363ffffffff80831694640100000000840490911693600160401b909304901b91608082811b92600160801b9004901b906002890190602001613e36565b60408051606480825260a08201909252606091905f90826020820181803683370190505090505f5b5f612935600a87613ea9565b9050612942600a87613ebc565b955061294f816030613ecf565b60f81b838361295d81613ee8565b94508151811061296f5761296f613698565b60200101906001600160f81b03191690815f1a90535050845f03612929575f816001600160401b038111156129a6576129a6613589565b6040519080825280601f01601f1916602001820160405280156129d0576020820181803683370190505b50905060015b828111612a4b57836129e88285613abb565b815181106129f8576129f8613698565b01602001516001600160f81b03191682612a13600184613abb565b81518110612a2357612a23613698565b60200101906001600160f81b03191690815f1a90535080612a4381613ee8565b9150506129d6565b5095945050505050565b604080516001600160881b0319831660208201525f9101611b8c565b5f8251604114612a8257505f6106e7565b6020830151604084015160608501515f1a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612ac6575f93505050506106e7565b8060ff16601b14158015612ade57508060ff16601c14155b15612aee575f93505050506106e7565b604080515f81526020810180835287905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015612b3e573d5f5f3e3d5ffd5b5050604051601f190151979650505050505050565b612b5b612f37565b81515182905f03612b7f576040516309036d4760e21b815260040160405180910390fd5b5f60ff816001600160401b038160015b8015612c0057612b9e89612c73565b955081612baa81613ee8565b6007600589901c169650601f881695509250506005198501612bf9576020890151612bd58a86612716565b9350808a60200151612be79190613abb565b612bf19084613a66565b925050612b8f565b505f612b8f565b600760ff86161115612c2a5760405163bd2ac87960e01b815260ff8616600482015260240161043a565b506040805160c08101825289815260ff9687166020820152948616908501529190931660608301526001600160401b03908116608083015290911660a082015291505b50919050565b5f8160200151825f01515180821115612ca9576040516363a056dd60e01b8152600481018390526024810182905260440161043a565b8351602085018051808301600101519550908190612cc682613ee8565b8152505050505050919050565b5f81602001516002612ce59190613a66565b82515180821115612d13576040516363a056dd60e01b8152600481018390526024810182905260440161043a565b8351602085018051600281840181015196509091612d318284613a66565b9052509395945050505050565b5f81602001516004612d509190613a66565b82515180821115612d7e576040516363a056dd60e01b8152600481018390526024810182905260440161043a565b8351602085018051600481840181015196509091612d318284613a66565b5f81602001516008612dae9190613a66565b82515180821115612ddc576040516363a056dd60e01b8152600481018390526024810182905260440161043a565b8351602085018051600881840181015196509091612d318284613a66565b5f815f8060ff16826040015160ff1614612e3857604080830151905161800560e51b815260ff9182166004820152908216602482015260440161043a565b610e86845f01518560600151612716565b6040805160c08101909152805f81526020015f81526020015f81526020015f81526020015f6001600160401b03168152602001612e84612f37565b905290565b6040805160c0810182525f8082526020820181905291810182905260608101829052608081019190915260a08101612e84612f7c565b508054612ecb906137f6565b5f825580601f10612eda575050565b601f0160209004905f5260205f2090810190612ef69190612f9a565b50565b8260048101928215612f27579160200282015b82811115612f27578251825591602001919060010190612f0c565b50612f33929150612f9a565b5090565b604080516101008101909152606060c082019081525f60e0830152819081525f6020820181905260408201819052606082018190526080820181905260a09091015290565b60405180608001604052806004906020820280368337509192915050565b5b80821115612f33575f8155600101612f9b565b5f5f83601f840112612fbe575f5ffd5b5081356001600160401b03811115612fd4575f5ffd5b6020830191508360208260051b8501011115612210575f5ffd5b5f5f5f5f5f60608688031215613002575f5ffd5b85356001600160401b03811115613017575f5ffd5b860160e08189031215613028575f5ffd5b945060208601356001600160401b03811115613042575f5ffd5b61304e88828901612fae565b90955093505060408601356001600160401b0381111561306c575f5ffd5b61307888828901612fae565b969995985093965092949392505050565b634e487b7160e01b5f52602160045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f815160c084528051604060c08601526130e961010086018261309d565b9050602082015160e086015260ff602085015116602086015260408401519150613118604086018360ff169052565b6060840151915061312e606086018360ff169052565b6080840151915061314a60808601836001600160401b03169052565b60a08401519150610e8660a08601836001600160401b03169052565b602081525f8251610100811061317e5761317e613089565b8060208401525060208301516014811061319a5761319a613089565b80604084015250604083015160608301526060830151608083015260808301516131cf60a08401826001600160401b03169052565b5060a083015160c080840152610e8660e08401826130cb565b5f5f602083850312156131f9575f5ffd5b82356001600160401b0381111561320e575f5ffd5b61321a85828601612fae565b90969095509350505050565b5f6101208201905063ffffffff835116825263ffffffff60208401511660208301526001600160401b031960408401511660408301526001600160801b031960608401511660608301526001600160801b0319608084015116608083015260a083015160a083015f5b60048110156132ae57825182526020928301929091019060010161328f565b50505092915050565b5f60c08284031215612c6d575f5ffd5b5f5f5f5f5f5f5f60a0888a0312156132dd575f5ffd5b87356001600160401b038111156132f2575f5ffd5b6132fe8a828b01612fae565b90985096505060208801356001600160401b0381111561331c575f5ffd5b6133288a828b016132b7565b95505060408801356001600160401b03811115613343575f5ffd5b61334f8a828b01612fae565b989b979a5095989597966060870135966080013595509350505050565b5f5f6040838503121561337d575f5ffd5b50508035926020909101359150565b60078110612ef657612ef6613089565b602081016133a98361338c565b91905290565b5f5f5f606084860312156133c1575f5ffd5b505081359360208301359350604090920135919050565b80356001600160a01b03811681146122d5575f5ffd5b5f5f604083850312156133ff575f5ffd5b613408836133d8565b946020939093013593505050565b5f60208284031215613426575f5ffd5b6106e4826133d8565b5f5f5f60608486031215613441575f5ffd5b83356001600160401b03811115613456575f5ffd5b613462868287016132b7565b9660208601359650604090950135949350505050565b60018060a01b03881681528660208201526001600160401b03861660408201526001600160401b03851660608201526001600160401b03841660808201528260a082015260e060c08201525f6134d160e083018461309d565b9998505050505050505050565b5f5f5f606084860312156134f0575f5ffd5b6134f9846133d8565b9250613507602085016133d8565b929592945050506040919091013590565b5f5f8335601e1984360301811261352d575f5ffd5b8301803591506001600160401b03821115613546575f5ffd5b602001915036819003821315612210575f5ffd5b6001600160401b0381168114612ef6575f5ffd5b5f6020828403121561357e575f5ffd5b813561108f8161355a565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156135bf576135bf613589565b60405290565b604051608081016001600160401b03811182821017156135bf576135bf613589565b803561ffff811681146122d5575f5ffd5b5f6060828403128015613609575f5ffd5b50604051606081016001600160401b038111828210171561362c5761362c613589565b604052613638836135e7565b8152613646602084016135e7565b602082015260408301356136598161355a565b60408201529392505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156106e7576106e7613665565b634e487b7160e01b5f52603260045260245ffd5b5f823561017e198336030181126136c1575f5ffd5b9190910192915050565b803563ffffffff811681146122d5575f5ffd5b5f602082840312156136ee575f5ffd5b6106e4826136cb565b803567ffffffffffffffff19811681146122d5575f5ffd5b80356001600160801b0319811681146122d5575f5ffd5b5f610120828403128015613738575f5ffd5b5061374161359d565b61374a836136cb565b8152613758602084016136cb565b6020820152613769604084016136f7565b604082015261377a6060840161370f565b606082015261378b6080840161370f565b60808201528360bf84011261379e575f5ffd5b6137a66135c5565b806101208501868111156137b8575f5ffd5b60a086015b818110156137d55780358452602093840193016137bd565b505060a0830152509392505050565b602081525f6106e4602083018461309d565b600181811c9082168061380a57607f821691505b602082108103612c6d57634e487b7160e01b5f52602260045260245ffd5b8381526001600160401b0383166020820152606060408201525f5f835461384e816137f6565b806060860152600182165f811461386c5760018114613888576138b9565b60ff1983166080870152608082151560051b87010193506138b9565b865f5260205f205f5b838110156138b057815488820160800152600190910190602001613891565b87016080019450505b5091979650505050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8481526001600160401b0384166020820152606060408201525f6139166060830184866138c6565b9695505050505050565b601f82111561396757805f5260205f20601f840160051c810160208510156139455750805b601f840160051c820191505b81811015613964575f8155600101613951565b50505b505050565b6001600160401b0383111561398357613983613589565b6139978361399183546137f6565b83613920565b5f601f8411600181146139c8575f85156139b15750838201355b5f19600387901b1c1916600186901b178355613964565b5f83815260208120601f198716915b828110156139f757868501358255602094850194600190920191016139d7565b5086821015613a13575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f81518060208401855e5f93019283525090919050565b75034b73b30b634b21038bab2b93c9039ba30ba3ab99d160551b81525f6106e46016830184613a25565b808201808211156106e7576106e7613665565b80820281158282048414176106e7576106e7613665565b6020808252601190820152703737ba103a3432903932b8bab2b9ba32b960791b604082015260600190565b818103818111156106e7576106e7613665565b60208082526023908201527f457363726f7761626c653a20696e73756666696369656e7420636f6c6c6174656040820152621c985b60ea1b606082015260800190565b5f60208284031215613b21575f5ffd5b6106e4826135e7565b88815287602082015261ffff8716604082015261ffff861660608201526001600160401b03851660808201526001600160401b03841660a082015260e060c08201525f613b7b60e0830184866138c6565b9a9950505050505050505050565b5f60208284031215613b99575f5ffd5b6106e4826136f7565b7f6d69736d61746368696e6720626561636f6e73206f6e20666173742d666f72778152696172642073746570202360b01b60208201525f6106e4602a830184613a25565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff831680613c0f57613c0f613be6565b8063ffffffff84160491505092915050565b5f5f8335601e19843603018112613c36575f5ffd5b8301803591506001600160401b03821115613c4f575f5ffd5b6020019150600781901b3603821315612210575f5ffd5b7f746f6f206d616e79206d697373696e67207075626b657973206f6e206661737481526e2d666f72776172642073746570202360881b60208201525f6106e4602f830184613a25565b5f60208284031215613cbf575f5ffd5b81356001600160881b03198116811461108f575f5ffd5b5f6001600160401b03831680613cee57613cee613be6565b806001600160401b0384160491505092915050565b70ffffffffffffffffffffffffffffffffff198816815260a060208201525f613d3060a08301888a6138c6565b8660408401526001600160401b03861660608401528281036080840152613b7b8185876138c6565b6001600160401b0382811682821603908111156106e7576106e7613665565b6001600160401b038181168382160290811690818114610cc357610cc3613665565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff821317156106e7576106e7613665565b5f60208284031215613dd8575f5ffd5b6106e48261370f565b63ffffffff87811682528616602082015267ffffffffffffffff19851660408201526001600160801b0319848116606083015283166080808301919091526101208201908360a0840137979650505050505050565b63ffffffff87811682528616602082015267ffffffffffffffff19851660408201526001600160801b0319848116606083015283166080820152610120810160a08201835f5b6004811015613e9b578154835260209092019160019182019101613e7c565b505050979650505050505050565b5f82613eb757613eb7613be6565b500690565b5f82613eca57613eca613be6565b500490565b60ff81811683821601908111156106e7576106e7613665565b5f60018201613ef957613ef9613665565b506001019056fef595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e102a2646970667358221220c7286d038a73121ba5fb025d03fd209728bf4a7922269976e3c9294b14e4745964736f6c634300081e0033",
"deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061011c575f3560e01c806355caae04116100a9578063adc9772e11610079578063adc9772e146102ee578063bd75eadb1461030d578063c2a672e014610320578063e74f82391461033f578063f308da0f1461035e575f5ffd5b806355caae041461025f578063653ac7bc1461027e57806385783377146102b05780639dc29fac146102cf575f5ffd5b806345ac7f3f116100ef57806345ac7f3f146101b65780634656a450146101ed57806347e7ef241461020057806351cff8d9146102215780635386690814610240575f5ffd5b80631ac07503146101205780633317044f1461014957806334c20ee3146101695780633962372d14610196575b5f5ffd5b61013361012e366004612fee565b61037d565b6040516101409190613166565b60405180910390f35b61015c6101573660046131e8565b6105cd565b6040516101409190613226565b818015610174575f5ffd5b506101886101833660046132c7565b6106ed565b604051908152602001610140565b6101a96101a436600461336c565b610bf0565b604051610140919061339c565b8180156101c1575f5ffd5b506101d56101d03660046133af565b610cca565b6040516001600160481b039091168152602001610140565b6101336101fb36600461336c565b610e67565b81801561020b575f5ffd5b5061021f61021a3660046133ee565b610e8e565b005b81801561022c575f5ffd5b5061018861023b366004613416565b610f09565b81801561024b575f5ffd5b5061018861025a3660046133af565b610f70565b81801561026a575f5ffd5b506101886102793660046133af565b611096565b818015610289575f5ffd5b5061029d61029836600461342f565b611256565b6040516101409796959493929190613478565b8180156102bb575f5ffd5b506101336102ca366004612fee565b6113f6565b8180156102da575f5ffd5b5061021f6102e93660046133ee565b6114b0565b8180156102f9575f5ffd5b5061021f6103083660046133ee565b611596565b6101a961031b36600461336c565b61167f565b81801561032b575f5ffd5b5061021f61033a3660046133ee565b6117e4565b81801561034a575f5ffd5b5061021f6103593660046134de565b611896565b818015610369575f5ffd5b5061015c6103783660046131e8565b61199f565b610385612e49565b6020860135158015906103a557505f6103a160c0880188613518565b9050115b80156103ce57506103cc6103bf60c0880160a0890161356e565b6001600160401b03161590565b155b80156103da5750853515155b80156103fb57506103fb6103f6368890038801604089016135f8565b611ad8565b6104435760405162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081c5d595c9e481c995c1bdc9d60621b60448201526064015b60405180910390fd5b5f61044e86866105cd565b905061046861046360c0890160a08a0161356e565b611b13565b610473906001613679565b6001600160401b0316815f015163ffffffff1610156104cd5760405162461bcd60e51b815260206004820152601660248201527536b4b9b632b0b234b733903432b0b2103132b0b1b7b760511b604482015260640161043a565b6104e084846104db8a611b20565b611ba9565b60808201516001600160801b031916146105335760405162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015260640161043a565b6040805160c080820183525f80835260208301526105c29282019061055d908b0160a08c0161356e565b6001600160401b031681528935602082015260400161057f60c08b018b613518565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602090910152600343611be8565b979650505050505050565b6105d5612e89565b61066f83835f8181106105ea576105ea613698565b90506020028101906105fc91906136ac565b7ff595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e1015f8686828161062e5761062e613698565b905060200281019061064091906136ac565b61064e9060208101906136de565b63ffffffff1681526020019081526020015f20611e7d90919063ffffffff16565b6106ca5760405162461bcd60e51b815260206004820152602660248201527f666173742d666f7277617264696e672066726f6d20756e6d61746368696e67206044820152653132b0b1b7b760d11b606482015260840161043a565b6106d48383611eae565b8036