witnet-solidity-bridge
Version:
Witnet Solidity Bridge contracts for EVM-compatible chains
708 lines • 53.9 kB
JSON
{
"_format": "hh3-artifact-1",
"contractName": "WitOracleRadonRequestFactoryUpgradableDefault",
"sourceName": "contracts/core/upgradable/WitOracleRadonRequestFactoryUpgradableDefault.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_witOracleRadonRequestModalsBuilder",
"type": "address"
},
{
"internalType": "address",
"name": "_witOracleRadonRequestTemplatesBuilder",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_versionTag",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "_upgradable",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "hash",
"type": "bytes32"
}
],
"name": "NewRadonReducer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "Witnet.RadonHash",
"name": "radonHash",
"type": "bytes32"
}
],
"name": "NewRadonRequest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "witOracleRadonRequestModal",
"type": "address"
}
],
"name": "NewRadonRequestModal",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "witOracleRadonRequestTemplate",
"type": "address"
}
],
"name": "NewRadonRequestTemplate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "hash",
"type": "bytes32"
}
],
"name": "NewRadonRetrieval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "baseAddr",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "baseCodehash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "string",
"name": "versionTag",
"type": "string"
}
],
"name": "Upgraded",
"type": "event"
},
{
"stateMutability": "nonpayable",
"type": "fallback"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "base",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum Witnet.RadonRetrievalMethods",
"name": "method",
"type": "uint8"
},
{
"internalType": "string",
"name": "body",
"type": "string"
},
{
"internalType": "string[2][]",
"name": "headers",
"type": "string[2][]"
},
{
"internalType": "bytes",
"name": "script",
"type": "bytes"
}
],
"internalType": "struct IWitOracleRadonRequestFactory.DataSourceRequest",
"name": "commonDataRequest",
"type": "tuple"
},
{
"components": [
{
"internalType": "enum Witnet.RadonReduceOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"components": [
{
"internalType": "enum Witnet.RadonFilterOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"internalType": "bytes",
"name": "cborArgs",
"type": "bytes"
}
],
"internalType": "struct Witnet.RadonFilter[]",
"name": "filters",
"type": "tuple[]"
}
],
"internalType": "struct Witnet.RadonReducer",
"name": "crowdAttestationTally",
"type": "tuple"
}
],
"name": "buildRadonRequestModal",
"outputs": [
{
"internalType": "contract IWitOracleRadonRequestModal",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "string",
"name": "url",
"type": "string"
},
{
"components": [
{
"internalType": "enum Witnet.RadonRetrievalMethods",
"name": "method",
"type": "uint8"
},
{
"internalType": "string",
"name": "body",
"type": "string"
},
{
"internalType": "string[2][]",
"name": "headers",
"type": "string[2][]"
},
{
"internalType": "bytes",
"name": "script",
"type": "bytes"
}
],
"internalType": "struct IWitOracleRadonRequestFactory.DataSourceRequest",
"name": "request",
"type": "tuple"
}
],
"internalType": "struct IWitOracleRadonRequestFactory.DataSource[]",
"name": "dataSources",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "enum Witnet.RadonReduceOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"components": [
{
"internalType": "enum Witnet.RadonFilterOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"internalType": "bytes",
"name": "cborArgs",
"type": "bytes"
}
],
"internalType": "struct Witnet.RadonFilter[]",
"name": "filters",
"type": "tuple[]"
}
],
"internalType": "struct Witnet.RadonReducer",
"name": "dataSourcesAggregator",
"type": "tuple"
},
{
"components": [
{
"internalType": "enum Witnet.RadonReduceOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"components": [
{
"internalType": "enum Witnet.RadonFilterOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"internalType": "bytes",
"name": "cborArgs",
"type": "bytes"
}
],
"internalType": "struct Witnet.RadonFilter[]",
"name": "filters",
"type": "tuple[]"
}
],
"internalType": "struct Witnet.RadonReducer",
"name": "crowdAttestationTally",
"type": "tuple"
}
],
"name": "buildRadonRequestTemplate",
"outputs": [
{
"internalType": "contract IWitOracleRadonRequestTemplate",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "radonRetrieveHashes",
"type": "bytes32[]"
},
{
"components": [
{
"internalType": "enum Witnet.RadonReduceOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"components": [
{
"internalType": "enum Witnet.RadonFilterOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"internalType": "bytes",
"name": "cborArgs",
"type": "bytes"
}
],
"internalType": "struct Witnet.RadonFilter[]",
"name": "filters",
"type": "tuple[]"
}
],
"internalType": "struct Witnet.RadonReducer",
"name": "dataSourcesAggregator",
"type": "tuple"
},
{
"components": [
{
"internalType": "enum Witnet.RadonReduceOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"components": [
{
"internalType": "enum Witnet.RadonFilterOpcodes",
"name": "opcode",
"type": "uint8"
},
{
"internalType": "bytes",
"name": "cborArgs",
"type": "bytes"
}
],
"internalType": "struct Witnet.RadonFilter[]",
"name": "filters",
"type": "tuple[]"
}
],
"internalType": "struct Witnet.RadonReducer",
"name": "crowdAttestationTally",
"type": "tuple"
}
],
"name": "buildRadonRequestTemplate",
"outputs": [
{
"internalType": "contract IWitOracleRadonRequestTemplate",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "class",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "codehash",
"outputs": [
{
"internalType": "bytes32",
"name": "_codehash",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "deployer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "_initData",
"type": "bytes"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isUpgradable",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
}
],
"name": "isUpgradableFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pendingOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "specs",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracle",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleRadonRequestModalsBuilder",
"outputs": [
{
"internalType": "contract WitOracleRadonRequestFactoryModals",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleRadonRequestTemplatesBuilder",
"outputs": [
{
"internalType": "contract WitOracleRadonRequestFactoryTemplates",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x6101c06040523361018052348015610015575f5ffd5b5060405161250e38038061250e83398101604081905261003491610373565b818180826040518060400160405280601781526020017f696f2e7769746e65742e7261646f6e2e666163746f727900000000000000000081525082338a8a816001600160a01b0316631014d3756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d291906103c9565b6001600160a01b031660808190526101a790158015906100fd57505f6080516001600160a01b03163b115b801561017b5750816001600160a01b0316631014d3756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610140573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016491906103c9565b6001600160a01b03166080516001600160a01b0316145b60408051808201909152601081526f696e76616c6964206275696c6465727360801b6020820152610282565b6080516001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020991906103c9565b6001600160a01b0390811660a05291821660c052811660e052811661024857604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61025181610294565b50306101005215156101405260016002556101609190915280516020909101206101a0525061046095505050505050565b8161029057610290816102b0565b5050565b600180546001600160a01b03191690556102ad816102f0565b50565b6102b861033f565b816040516020016102ca929190610402565b60408051601f198184030181529082905262461bcd60e51b825261023f9160040161042b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060405180606001604052602d8152806020016124e1602d9139905090565b6001600160a01b03811681146102ad575f5ffd5b5f5f5f5f60808587031215610386575f5ffd5b84516103918161035f565b60208601519094506103a28161035f565b60408601516060870151919450925080151581146103be575f5ffd5b939692955090935050565b5f602082840312156103d9575f5ffd5b81516103e48161035f565b9392505050565b5f81518060208401855e5f93019283525090919050565b5f61040d82856103eb565b6101d160f51b815261042260028201856103eb565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611fac6105355f395f61023801525f61039f01525f61071f01525f8181610291015261074b01525f50505f818161020f01528181610345015281816105ba0152818161062b0152818161067201528181610694015261109001525f81816102ee01528181610dff0152610eb601525f818161026d01528181610b790152610c1b01525f81816108ba015281816109fc01528181610abc01528181610ce10152610d7001525f6101b90152611fac5ff3fe608060405234801561000f575f5ffd5b5060043610610135575f3560e01c806379ba5097116100b6578063bff852fa1161007a578063bff852fa1461037f578063c96e201f14610387578063d5f394881461039a578063e30c3978146103c1578063e71dc532146103d2578063f2fde38b146103e557610135565b806379ba5097146103185780638da5cb5b146103205780639f165d4b14610330578063a9e954b914610343578063adb7c3f71461036a57610135565b80635479d940116100fd5780635479d9401461028f57806354fd4d50146102c15780636b58960a146102d65780636f00eef9146102e9578063715018a61461031057610135565b80631014d375146101b4578063439fab91146101f85780635001f3b51461020d57806352d1902d1461023357806352fdb7cf14610268575b6101425f3560f81c6103f8565b61015260ff5f3560f01c166103f8565b61016260ff5f3560e81c166103f8565b61017260ff5f3560e01c166103f8565b604051602001610185949392919061129a565b60408051601f198184030181529082905262461bcd60e51b82526101ab91600401611326565b60405180910390fd5b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61020b610206366004611447565b6104e4565b005b7f00000000000000000000000000000000000000000000000000000000000000006101db565b61025a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101ef565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405190151581526020016101ef565b6102c9610718565b6040516101ef9190611326565b6102b16102e4366004611494565b610748565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b61020b61079d565b61020b6107b0565b5f546001600160a01b03166101db565b6101db61033e3660046114c5565b61082a565b7f00000000000000000000000000000000000000000000000000000000000000003f61025a565b60405163adb7c3f760e01b81526020016101ef565b6102c96109d0565b6101db6103953660046116cc565b6109f0565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101db565b6101db6103e0366004611733565b610cdd565b61020b6103f3366004611494565b610f7f565b6040805160028082528183019092526060915f91906020820181803683370190505090505f610428601085611829565b61043390603061184a565b90505f61044160108661186f565b61044c90603061184a565b905060398260ff1611156104685761046560078361184a565b91505b60398160ff1611156104825761047f60078261184a565b90505b8160f81b835f8151811061049857610498611890565b60200101906001600160f81b03191690815f1a9053508060f81b836001815181106104c5576104c5611890565b60200101906001600160f81b03191690815f1a90535091949350505050565b5f546001600160a01b03168061051a578180602001905181019061050891906118a4565b9250905061051581610fef565b610562565b336001600160a01b038216146105625760405162461bcd60e51b815260206004820152600d60248201526c3737ba103a34329037bbb732b960991b60448201526064016101ab565b61056b82611008565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906105dc57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b156106295760405162461bcd60e51b815260206004820152601c60248201527f616c726561647920696e697469616c697a656420636f6465686173680000000060448201526064016101ab565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600201557f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106cd5f546001600160a01b031690565b6001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66106ff610718565b60405161070c9190611326565b60405180910390a45050565b60606107437f00000000000000000000000000000000000000000000000000000000000000006110bd565b905090565b5f7f000000000000000000000000000000000000000000000000000000000000000080156107975750816001600160a01b031661078c5f546001600160a01b031690565b6001600160a01b0316145b92915050565b6107a5611165565b6107ae5f610fef565b565b60015433906001600160a01b0316811461081e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016101ab565b61082781610fef565b50565b5f80846001600160401b038111156108445761084461133f565b60405190808252806020026020018201604052801561086d578160200160208202803683370190505b5090505f5b858110156109af575f87878381811061088d5761088d611890565b905060200281019061089f919061192c565b6108ad90602081019061194a565b6108b69061196c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639eb3ab1f825f01518a8a868181106108fd576108fd611890565b905060200281019061090f919061192c565b6109199080611ae6565b8560200151866040015187606001516040518763ffffffff1660e01b815260040161094996959493929190611b7f565b6020604051808303815f875af1158015610965573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109899190611c5b565b83838151811061099b5761099b611890565b602090810291909101015250600101610872565b506109c6816109bd86611c72565b6103e086611c72565b9695505050505050565b606060405180606001604052602d815280602001611f4a602d9139905090565b5f806001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639eb3ab1f610a2e6020870187611c7d565b610a3b6020880188611ae6565b610a4860408a018a611c96565b610a5560608c018c611ae6565b6040518863ffffffff1660e01b8152600401610a779796959493929190611cdb565b6020604051808303815f875af1158015610a93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab79190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610b069190611dfc565b6020604051808303815f875af1158015610b22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b469190611c5b565b60405163a646ccc160e01b8152600481018490526001600160881b0319821660248201529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a646ccc190604401602060405180830381865afa158015610bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be29190611eae565b9050806001600160a01b03163b5f03610cd4576040516375dc8aab60e11b8152600481018490526001600160881b0319831660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ebb91556906044016020604051808303815f875af1158015610c69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611eae565b50610c9781611191565b6040516001600160a01b03821681527f05fb0138d9f716184cd659a536fe0bad16aa46c316e721c7ccfe63901c9683419060200160405180910390a15b95945050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610d2b9190611dfc565b6020604051808303815f875af1158015610d47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6b9190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610dba9190611dfc565b6020604051808303815f875af1158015610dd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfa9190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635613166e8885856040518463ffffffff1660e01b8152600401610e4d93929190611ec9565b602060405180830381865afa158015610e68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190611eae565b9050806001600160a01b03163b5f036109c657604051636e67a28560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dccf450a90610eef908a9087908790600401611ec9565b6020604051808303815f875af1158015610f0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2f9190611eae565b50610f3981611191565b6040516001600160a01b03821681527f49ebf408734238b0c9fffd37188494e99a8cd9cd5c32da3f3bfe179ddd0dd17c9060200160405180910390a19695505050505050565b610f87611165565b600180546001600160a01b0383166001600160a01b03199091168117909155610fb75f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600180546001600160a01b0319169055610827816111cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54611060577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd80546001600160a01b031916301790555b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316179055565b60605f6110c98361121a565b6001600160401b038111156110e0576110e061133f565b6040519080825280601f01601f19166020018201604052801561110a576020820181803683370190505b5090505f5b815181101561115e5783816020811061112a5761112a611890565b1a60f81b82828151811061114057611140611890565b60200101906001600160f81b03191690815f1a90535060010161110f565b5092915050565b5f546001600160a01b031633146107ae5760405163118cdaa760e01b81523360048201526024016101ab565b6108275f826001600160a01b03163b116040518060400160405280600c81526020016b63616e6e6f7420636c6f6e6560a01b815250611257565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b60208110156112525781816020811061123757611237611890565b1a60f81b6001600160f81b031916156112525760010161121c565b919050565b816112655761126581611269565b5050565b6112716109d0565b81604051602001610185929190611f29565b5f81518060208401855e5f93019283525090919050565b7f5769746e657455706772616461626c65426173653a206e6f7420696d706c656d8152680cadce8cac8744060f60bb1b60208201525f6109c66112f26112ec6112e6602986018a611283565b88611283565b86611283565b84611283565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61133860208301846112f8565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156113755761137561133f565b60405290565b604051608081016001600160401b03811182821017156113755761137561133f565b604051601f8201601f191681016001600160401b03811182821017156113c5576113c561133f565b604052919050565b5f6001600160401b038211156113e5576113e561133f565b50601f01601f191660200190565b5f82601f830112611402575f5ffd5b8135602083015f61141a611415846113cd565b61139d565b905082815285838301111561142d575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215611457575f5ffd5b81356001600160401b0381111561146c575f5ffd5b611478848285016113f3565b949350505050565b6001600160a01b0381168114610827575f5ffd5b5f602082840312156114a4575f5ffd5b813561133881611480565b5f604082840312156114bf575f5ffd5b50919050565b5f5f5f5f606085870312156114d8575f5ffd5b84356001600160401b038111156114ed575f5ffd5b8501601f810187136114fd575f5ffd5b80356001600160401b03811115611512575f5ffd5b8760208260051b8401011115611526575f5ffd5b6020918201955093508501356001600160401b03811115611545575f5ffd5b611551878288016114af565b92505060408501356001600160401b0381111561156c575f5ffd5b611578878288016114af565b91505092959194509250565b5f6001600160401b0382111561159c5761159c61133f565b5060051b60200190565b5f604082840312156115b6575f5ffd5b6115be611353565b90508135600c81106115ce575f5ffd5b815260208201356001600160401b038111156115e8575f5ffd5b8201601f810184136115f8575f5ffd5b803561160661141582611584565b8082825260208201915060208360051b850101925086831115611627575f5ffd5b602084015b838110156116bc5780356001600160401b03811115611649575f5ffd5b85016040818a03601f1901121561165e575f5ffd5b611666611353565b6020820135600a8110611677575f5ffd5b815260408201356001600160401b03811115611691575f5ffd5b6116a08b6020838601016113f3565b602083015250808552505060208301925060208101905061162c565b5060208501525091949350505050565b5f5f604083850312156116dd575f5ffd5b82356001600160401b038111156116f2575f5ffd5b830160808186031215611703575f5ffd5b915060208301356001600160401b0381111561171d575f5ffd5b611729858286016115a6565b9150509250929050565b5f5f5f60608486031215611745575f5ffd5b83356001600160401b0381111561175a575f5ffd5b8401601f8101861361176a575f5ffd5b803561177861141582611584565b8082825260208201915060208360051b850101925088831115611799575f5ffd5b6020840193505b828410156117bb5783358252602093840193909101906117a0565b955050505060208401356001600160401b038111156117d8575f5ffd5b6117e4868287016115a6565b92505060408401356001600160401b038111156117ff575f5ffd5b61180b868287016115a6565b9150509250925092565b634e487b7160e01b5f52601260045260245ffd5b5f60ff83168061183b5761183b611815565b8060ff84160491505092915050565b60ff818116838216019081111561079757634e487b7160e01b5f52601160045260245ffd5b5f60ff83168061188157611881611815565b8060ff84160691505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f604083850312156118b5575f5ffd5b82516118c081611480565b60208401519092506001600160401b038111156118db575f5ffd5b8301601f810185136118eb575f5ffd5b80516118f9611415826113cd565b81815286602083850101111561190d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f8235603e19833603018112611940575f5ffd5b9190910192915050565b5f8235607e19833603018112611940575f5ffd5b803560058110611252575f5ffd5b5f6080823603121561197c575f5ffd5b61198461137b565b61198d8361195e565b815260208301356001600160401b038111156119a7575f5ffd5b6119b3368286016113f3565b60208301525060408301356001600160401b038111156119d1575f5ffd5b830136601f8201126119e1575f5ffd5b80356119ef61141582611584565b8082825260208201915060208360051b850101925036831115611a10575f5ffd5b602084015b83811015611aad5780356001600160401b03811115611a32575f5ffd5b850136603f820112611a42575f5ffd5b611a4a611353565b806060830136811115611a5b575f5ffd5b602084015b81811015611a9b5780356001600160401b03811115611a7d575f5ffd5b611a8c366020838901016113f3565b85525060209384019301611a60565b50508552505060209283019201611a15565b50604085015250505060608301356001600160401b03811115611ace575f5ffd5b611ada368286016113f3565b60608301525092915050565b5f5f8335601e19843603018112611afb575f5ffd5b8301803591506001600160401b03821115611b14575f5ffd5b602001915036819003821315611b28575f5ffd5b9250929050565b634e487b7160e01b5f52602160045260245ffd5b60058110611b5357611b53611b2f565b9052565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b611b898188611b43565b60a060208201525f611b9f60a083018789611b57565b8281036040840152611bb181876112f8565b9050828103606084015280855180835260208301915060208160051b840101602088015f5b83811015611c3757858303601f19018552815183604081015f5b6002811015611c1e578682038352611c098285516112f8565b60209485019493909301929150600101611bf0565b5060209788019790955093909301925050600101611bd6565b50508581036080870152611c4b81886112f8565b9c9b505050505050505050505050565b5f60208284031215611c6b575f5ffd5b5051919050565b5f61079736836115a6565b5f60208284031215611c8d575f5ffd5b6113388261195e565b5f5f8335601e19843603018112611cab575f5ffd5b8301803591506001600160401b03821115611cc4575f5ffd5b6020019150600581901b3603821315611b28575f5ffd5b611ce58189611b43565b60a060208201525f60a082015260c060408201525f611d0860c08301888a611b57565b8281036060840152858152602080820190600588901b830101885f36829003603e19015b8a821015611de657858403601f190185528235818112611d4a575f5ffd5b8c018460408101825f36829003601e19015b6002821015611dc65789840385528235818112611d77575f5ffd5b86016020810190356001600160401b03811115611d92575f5ffd5b803603821315611da0575f5ffd5b611dab868284611b57565b95505050602083019250602085019450600182019150611d5c565b505050809650505050602083019250602085019450600182019150611d2c565b5050508481036080860152611c4b818789611b57565b602081525f606082018351600c8110611e1757611e17611b2f565b80602085015250602084015160408085015281815180845260808601915060808160051b87010193506020830192505f5b81811015611ea257868503607f1901835283518051600a8110611e6d57611e6d611b2f565b808752506020810151905060406020870152611e8c60408701826112f8565b9550506020938401939290920191600101611e48565b50929695505050505050565b5f60208284031215611ebe575f5ffd5b815161133881611480565b606080825284519082018190525f9060208601906080840190835b81811015611f02578351835260209384019390920191600101611ee4565b50506001600160881b03199586166020850152939094166040909201919091525092915050565b5f611f348285611283565b6101d160f51b8152610cd4600282018561128356fe5769744f7261636c655261646f6e52657175657374466163746f727955706772616461626c6544656661756c74a26469706673582212207b9e4295a75fd21cad6e5bcceaa9daa96be45ab0b7b6ce103a8bd5c79ba0a2f064736f6c634300081e00335769744f7261636c655261646f6e52657175657374466163746f727955706772616461626c6544656661756c74",
"deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610135575f3560e01c806379ba5097116100b6578063bff852fa1161007a578063bff852fa1461037f578063c96e201f14610387578063d5f394881461039a578063e30c3978146103c1578063e71dc532146103d2578063f2fde38b146103e557610135565b806379ba5097146103185780638da5cb5b146103205780639f165d4b14610330578063a9e954b914610343578063adb7c3f71461036a57610135565b80635479d940116100fd5780635479d9401461028f57806354fd4d50146102c15780636b58960a146102d65780636f00eef9146102e9578063715018a61461031057610135565b80631014d375146101b4578063439fab91146101f85780635001f3b51461020d57806352d1902d1461023357806352fdb7cf14610268575b6101425f3560f81c6103f8565b61015260ff5f3560f01c166103f8565b61016260ff5f3560e81c166103f8565b61017260ff5f3560e01c166103f8565b604051602001610185949392919061129a565b60408051601f198184030181529082905262461bcd60e51b82526101ab91600401611326565b60405180910390fd5b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61020b610206366004611447565b6104e4565b005b7f00000000000000000000000000000000000000000000000000000000000000006101db565b61025a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101ef565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000005b60405190151581526020016101ef565b6102c9610718565b6040516101ef9190611326565b6102b16102e4366004611494565b610748565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b61020b61079d565b61020b6107b0565b5f546001600160a01b03166101db565b6101db61033e3660046114c5565b61082a565b7f00000000000000000000000000000000000000000000000000000000000000003f61025a565b60405163adb7c3f760e01b81526020016101ef565b6102c96109d0565b6101db6103953660046116cc565b6109f0565b6101db7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166101db565b6101db6103e0366004611733565b610cdd565b61020b6103f3366004611494565b610f7f565b6040805160028082528183019092526060915f91906020820181803683370190505090505f610428601085611829565b61043390603061184a565b90505f61044160108661186f565b61044c90603061184a565b905060398260ff1611156104685761046560078361184a565b91505b60398160ff1611156104825761047f60078261184a565b90505b8160f81b835f8151811061049857610498611890565b60200101906001600160f81b03191690815f1a9053508060f81b836001815181106104c5576104c5611890565b60200101906001600160f81b03191690815f1a90535091949350505050565b5f546001600160a01b03168061051a578180602001905181019061050891906118a4565b9250905061051581610fef565b610562565b336001600160a01b038216146105625760405162461bcd60e51b815260206004820152600d60248201526c3737ba103a34329037bbb732b960991b60448201526064016101ab565b61056b82611008565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54158015906105dc57507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b156106295760405162461bcd60e51b815260206004820152601c60248201527f616c726561647920696e697469616c697a656420636f6465686173680000000060448201526064016101ab565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600201557f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106cd5f546001600160a01b031690565b6001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66106ff610718565b60405161070c9190611326565b60405180910390a45050565b60606107437f00000000000000000000000000000000000000000000000000000000000000006110bd565b905090565b5f7f000000000000000000000000000000000000000000000000000000000000000080156107975750816001600160a01b031661078c5f546001600160a01b031690565b6001600160a01b0316145b92915050565b6107a5611165565b6107ae5f610fef565b565b60015433906001600160a01b0316811461081e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016101ab565b61082781610fef565b50565b5f80846001600160401b038111156108445761084461133f565b60405190808252806020026020018201604052801561086d578160200160208202803683370190505b5090505f5b858110156109af575f87878381811061088d5761088d611890565b905060200281019061089f919061192c565b6108ad90602081019061194a565b6108b69061196c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639eb3ab1f825f01518a8a868181106108fd576108fd611890565b905060200281019061090f919061192c565b6109199080611ae6565b8560200151866040015187606001516040518763ffffffff1660e01b815260040161094996959493929190611b7f565b6020604051808303815f875af1158015610965573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109899190611c5b565b83838151811061099b5761099b611890565b602090810291909101015250600101610872565b506109c6816109bd86611c72565b6103e086611c72565b9695505050505050565b606060405180606001604052602d815280602001611f4a602d9139905090565b5f806001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639eb3ab1f610a2e6020870187611c7d565b610a3b6020880188611ae6565b610a4860408a018a611c96565b610a5560608c018c611ae6565b6040518863ffffffff1660e01b8152600401610a779796959493929190611cdb565b6020604051808303815f875af1158015610a93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab79190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610b069190611dfc565b6020604051808303815f875af1158015610b22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b469190611c5b565b60405163a646ccc160e01b8152600481018490526001600160881b0319821660248201529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a646ccc190604401602060405180830381865afa158015610bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be29190611eae565b9050806001600160a01b03163b5f03610cd4576040516375dc8aab60e11b8152600481018490526001600160881b0319831660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ebb91556906044016020604051808303815f875af1158015610c69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611eae565b50610c9781611191565b6040516001600160a01b03821681527f05fb0138d9f716184cd659a536fe0bad16aa46c316e721c7ccfe63901c9683419060200160405180910390a15b95945050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610d2b9190611dfc565b6020604051808303815f875af1158015610d47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6b9190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637f412e23856040518263ffffffff1660e01b8152600401610dba9190611dfc565b6020604051808303815f875af1158015610dd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfa9190611c5b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635613166e8885856040518463ffffffff1660e01b8152600401610e4d93929190611ec9565b602060405180830381865afa158015610e68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190611eae565b9050806001600160a01b03163b5f036109c657604051636e67a28560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dccf450a90610eef908a9087908790600401611ec9565b6020604051808303815f875af1158015610f0b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2f9190611eae565b50610f3981611191565b6040516001600160a01b03821681527f49ebf408734238b0c9fffd37188494e99a8cd9cd5c32da3f3bfe179ddd0dd17c9060200160405180910390a19695505050505050565b610f87611165565b600180546001600160a01b0383166001600160a01b03199091168117909155610fb75f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600180546001600160a01b0319169055610827816111cb565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe54611060577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd80546001600160a01b031916301790555b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316179055565b60605f6110c98361121a565b6001600160401b038111156110e0576110e061133f565b6040519080825280601f01601f19166020018201604052801561110a576020820181803683370190505b5090505f5b815181101561115e5783816020811061112a5761112a611890565b1a60f81b82828151811061114057611140611890565b60200101906001600160f81b03191690815f1a90535060010161110f565b5092915050565b5f546001600160a01b031633146107ae5760405163118cdaa760e01b81523360048201526024016101ab565b6108275f826001600160a01b03163b116040518060400160405280600c81526020016b63616e6e6f7420636c6f6e6560a01b815250611257565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b60208110156112525781816020811061123757611237611890565b1a60f81b6001600160f81b031916156112525760010161121c565b919050565b816112655761126581611269565b5050565b6112716109d0565b81604051602001610185929190611f29565b5f81518060208401855e5f93019283525090919050565b7f5769746e657455706772616461626c65426173653a206e6f7420696d706c656d8152680cadce8cac8744060f60bb1b60208201525f6109c66112f26112ec6112e6602986018a611283565b88611283565b86611283565b84611283565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61133860208301846112f8565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156113755761137561133f565b60405290565b604051608081016001600160401b03811182821017156113755761137561133f565b604051601f8201601f191681016001600160401b03811182821017156113c5576113c561133f565b604052919050565b5f6001600160401b038211156113e5576113e561133f565b50601f01601f191660200190565b5f82601f830112611402575f5ffd5b8135602083015f61141a611415846113cd565b61139d565b905082815285838301111561142d575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215611457575f5ffd5b81356001600160401b0381111561146c575f5ffd5b611478848285016113f3565b949350505050565b6001600160a01b0381168114610827575f5ffd5b5f602082840312156114a4575f5ffd5b813561133881611480565b5f604082840312156114bf575f5ffd5b50919050565b5f5f5f5f606085870312156114d8575f5ffd5b84356001600160401b038111156114ed575f5ffd5b8501601f810187136114fd575f5ffd5b80356001600160401b03811115611512575f5ffd5b8760208260051b8401011115611526575f5ffd5b6020918201955093508501356001600160401b03811115611545575f5ffd5b611551878288016114af565b92505060408501356001600160401b0381111561156c575f5ffd5b611578878288016114af565b91505092959194509250565b5f6001600160401b0382111561159c5761159c61133f565b5060051b60200190565b5f604082840312156115b6575f5ffd5b6115be611353565b90508135600c81106115ce575f5ffd5b815260208201356001600160401b038111156115e8575f5ffd5b8201601f810184136115f8575f5ffd5b803561160661141582611584565b8082825260208201915060208360051b850101925086831115611627575f5ffd5b602084015b838110156116bc5780356001600160401b03811115611649575f5ffd5b85016040818a03601f1901121561165e575f5ffd5b611666611353565b6020820135600a8110611677575f5ffd5b815260408201356001600160401b03811115611691575f5ffd5b6116a08b6020838601016113f3565b602083015250808552505060208301925060208101905061162c565b5060208501525091949350505050565b5f5f604083850312156116dd575f5ffd5b82356001600160401b038111156116f2575f5ffd5b830160808186031215611703575f5ffd5b915060208301356001600160401b0381111561171d575f5ffd5b611729858286016115a6565b9150509250929050565b5f5f5f60608486031215611745575f5ffd5b83356001600160401b0381111561175a575f5ffd5b8401601f8101861361176a575f5ffd5b803561177861141582611584565b8082825260208201915060208360051b850101925088831115611799575f5ffd5b6020840193505b828410156117bb5783358252602093840193909101906117a0565b955050505060208401356001600160401b038111156117d8575f5ffd5b6117e4868287016115a6565b92505060408401356001600160401b038111156117ff575f5ffd5b61180b868287016115a6565b9150509250925092565b634e487b7160e01b5f52601260045260245ffd5b5f60ff83168061183b5761183b611815565b8060ff84160491505092915050565b60ff818116838216019081111561079757634e487b7160e01b5f52601160045260245ffd5b5f60ff83168061188157611881611815565b8060ff84160691505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f604083850312156118b5575f5ffd5b82516118c081611480565b60208401519092506001600160401b038111156118db575f5ffd5b8301601f810185136118eb575f5ffd5b80516118f9611415826113cd565b81815286602083850101111561190d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f8235603e19833603018112611940575f5ffd5b9190910192915050565b5f8235607e19833603018112611940575f5ffd5b803560058110611252575f5ffd5b5f6080823603121561197c575f5ffd5b61198461137b565b61198d8361195e565b815260208301356001600160401b038111156119a7575f5ffd5b6119b3368286016113f3565b60208301525060408301356001600160401b038111156119d1575f5ffd5b830136601f8201126119e1575f5ffd5b80356119ef61141582611584565b8082825260208201915060208360051b850101925036831115611a10575f5ffd5b602084015b83811015611aad5780356001600160401b03811115611a32575f5ffd5b850136603f820112611a42575f5ffd5b611a4a611353565b806060830136811115611a5b575f5ffd5b602084015b81811015611a9b5780356001600160401b03811115611a7d575f5ffd5b611a8c366020838901016113f3565b85525060209384019301611a60565b50508552505060209283019201611a15565b50604085015250505060608301356001600160401b03811115611ace575f5ffd5b611ada368286016113f3565b60608301525092915050565b5f5f8335601e19843603018112611afb575f5ffd5b8301803591506001600160401b03821115611b14575f5ffd5b602001915036819003821315611b28575f5ffd5b9250929050565b634e487b7160e01b5f52602160045260245ffd5b60058110611b5357611b53611b2f565b9052565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b611b898188611b43565b60a060208201525f611b9f60a083018789611b57565b8281036040840152611bb181876112f8565b9050828103606084015280855180835260208