package generated

import (
	"strings"

	"github.com/autonity/autonity/accounts/abi"
	"github.com/autonity/autonity/common"
)

var OracleBytecode = common.Hex2Bytes("6080604052600160ff1b600a5534801561001857600080fd5b506040516160b33803806160b383398101604081905261003791610916565b8060e001518160c00151108015610052575060008160e00151115b6100945760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420636f6e66696760901b60448201526064015b60405180910390fd5b8051600180546001600160a01b03199081166001600160a01b039384161790915560208084015160028054909316931692909217905560408201516003556060820151600455608082015160055560a082015160065560c082015160075560e0820151600855610100820151600955825161011591600e919085019061063b565b50815161012990600f90602085019061063b565b5060005b85518110156102835783818151811061014857610148610ae1565b60200260200101516018600088848151811061016657610166610ae1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508481815181106101c4576101c4610ae1565b6020026020010151601960008884815181106101e2576101e2610ae1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600c600088848151811061024657610246610ae1565b6020908102919091018101516001600160a01b03168252810191909152604001600020600401805460ff191691151591909117905560010161012d565b5061029d856000600188516102989190610b0d565b6102f6565b84516102b0906011906020880190610691565b5084516102c4906012906020880190610691565b506003546010556001601481905560158054909101815560005260408101516102ec906104a3565b5050505050610d64565b80821261030257505050565b818160008560026103138585610b26565b61031d9190610b4d565b6103279087610b89565b8151811061033757610337610ae1565b602002602001015190505b818313610475575b806001600160a01b031686848151811061036657610366610ae1565b60200260200101516001600160a01b0316101561038f578261038781610bb1565b93505061034a565b806001600160a01b03168683815181106103ab576103ab610ae1565b60200260200101516001600160a01b031611156103d457816103cc81610bd0565b92505061038f565b818313610470578582815181106103ed576103ed610ae1565b602002602001015186848151811061040757610407610ae1565b602002602001015187858151811061042157610421610ae1565b6020026020010188858151811061043a5761043a610ae1565b6001600160a01b039384166020918202929092010152911690528261045e81610bb1565b935050818061046c90610bd0565b9250505b610342565b81851215610488576104888686846102f6565b8383121561049b5761049b8684866102f6565b505050505050565b60015460408051630aac2da160e01b815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105119190610bed565b90508061051f836002610c06565b111561056d5760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f2062696700000000000000000000604482015260640161008b565b60015460408051636fd8d26960e11b815290516001600160a01b039092169163dfb1a4d2916004808201926020929091908290030181865afa1580156105b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105db9190610bed565b9050806105e9836002610c06565b11156106375760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f2062696700000000000000000000604482015260640161008b565b5050565b828054828255906000526020600020908101928215610681579160200282015b8281111561068157825182906106719082610ca6565b509160200191906001019061065b565b5061068d9291506106f2565b5090565b8280548282559060005260206000209081019282156106e6579160200282015b828111156106e657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906106b1565b5061068d92915061070f565b8082111561068d5760006107068282610724565b506001016106f2565b5b8082111561068d5760008155600101610710565b50805461073090610c1d565b6000825580601f10610740575050565b601f01602090049060005260206000209081019061075e919061070f565b50565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561079a5761079a610761565b60405290565b604051601f8201601f191681016001600160401b03811182821017156107c8576107c8610761565b604052919050565b60006001600160401b038211156107e9576107e9610761565b5060051b60200190565b6001600160a01b038116811461075e57600080fd5b8051610813816107f3565b919050565b600082601f83011261082957600080fd5b815161083c610837826107d0565b6107a0565b8082825260208201915060208360051b86010192508583111561085e57600080fd5b602085015b83811015610884578051610876816107f3565b835260209283019201610863565b5095945050505050565b600061012082840312156108a157600080fd5b6108a9610777565b90506108b482610808565b81526108c260208301610808565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101009182015191810191909152919050565b60008060008060006101a0868803121561092f57600080fd5b85516001600160401b0381111561094557600080fd5b61095188828901610818565b602088015190965090506001600160401b0381111561096f57600080fd5b61097b88828901610818565b604088015190955090506001600160401b0381111561099957600080fd5b6109a588828901610818565b606088015190945090506001600160401b038111156109c357600080fd5b8601601f810188136109d457600080fd5b80516109e2610837826107d0565b8082825260208201915060208360051b85010192508a831115610a0457600080fd5b602084015b83811015610ac05780516001600160401b03811115610a2757600080fd5b8501603f81018d13610a3857600080fd5b60208101516001600160401b03811115610a5457610a54610761565b610a67601f8201601f19166020016107a0565b8181526040838301018f1015610a7c57600080fd5b60005b82811015610a9f5780840160400151602083830181019190915201610a7f565b50600060208383010152808652505050602083019250602081019050610a09565b5080955050505050610ad5876080880161088e565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610b2057610b20610af7565b92915050565b8181036000831280158383131683831282161715610b4657610b46610af7565b5092915050565b600082610b6a57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610b8457610b84610af7565b500590565b8082018281126000831280158216821582161715610ba957610ba9610af7565b505092915050565b60006001600160ff1b018201610bc957610bc9610af7565b5060010190565b6000600160ff1b8201610be557610be5610af7565b506000190190565b600060208284031215610bff57600080fd5b5051919050565b8082028115828204841417610b2057610b20610af7565b600181811c90821680610c3157607f821691505b602082108103610c5157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ca157806000526020600020601f840160051c81016020851015610c7e5750805b601f840160051c820191505b81811015610c9e5760008155600101610c8a565b50505b505050565b81516001600160401b03811115610cbf57610cbf610761565b610cd381610ccd8454610c1d565b84610c57565b6020601f821160018114610d075760008315610cef5750848201515b600019600385901b1c1916600184901b178455610c9e565b600084815260208120601f198516915b82811015610d375787850151825560209485019460019092019101610d17565b5084821015610d555786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61534080610d736000396000f3fe6080604052600436106101a25760003560e01c806399b0014b116100e0578063da39fbfe11610084578063ed78349d11610061578063ed78349d14610509578063ef5cc4d11461051e578063f0141d841461053e578063fb09917e1461055a57005b8063da39fbfe146104a7578063da78110e146104c7578063df7f710e146104e757005b8063b3ab15fb116100bd578063b3ab15fb1461043b578063b78dec521461045b578063c3f909d414610470578063cdd722531461049257005b806399b0014b146103a15780639ed1f255146103b65780639f8743f71461042657005b80634bb278f31161014757806359974e381161012457806359974e38146103395780635a4d3a271461034c57806367b11630146103615780638d4f75d21461038157005b80634bb278f3146102df57806356833ebe1461030457806357eba7591461032457005b806333d162931161018057806333d162931461021c57806333f98c771461024a5780633c8510fd1461029f5780633f422ef3146102bf57005b8063077945d3146101a45780630f65875c146101cf5780632d35d158146101e4575b005b3480156101b057600080fd5b506101b96105a9565b6040516101c691906144c1565b60405180910390f35b3480156101db57600080fd5b506101a261066a565b3480156101f057600080fd5b506102046101ff366004614524565b610888565b6040516001600160a01b0390911681526020016101c6565b34801561022857600080fd5b5061023c610237366004614524565b6108fd565b6040519081526020016101c6565b34801561025657600080fd5b5061026a61026536600461460f565b61096c565b6040516101c6919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b3480156102ab57600080fd5b5061026a6102ba366004614644565b610aa8565b3480156102cb57600080fd5b506101a26102da36600461468b565b610bbb565b3480156102eb57600080fd5b506102f4610d6b565b60405190151581526020016101c6565b34801561031057600080fd5b506101a261031f3660046146c7565b610f0a565b34801561033057600080fd5b5061023c611454565b6101a2610347366004614763565b6114ae565b34801561035857600080fd5b5061023c61154b565b34801561036d57600080fd5b506101a261037c366004614763565b6115a5565b34801561038d57600080fd5b506101a261039c3660046147a0565b61169a565b3480156103ad57600080fd5b50600a5461023c565b3480156103c257600080fd5b506103d66103d1366004614524565b61180d565b6040516101c69190600060c0820190508251825260208301516020830152604083015160408301526060830151606083015260808301511515608083015260a0830151151560a083015292915050565b34801561043257600080fd5b5061023c611909565b34801561044757600080fd5b506101a2610456366004614524565b611963565b34801561046757600080fd5b5061023c611a1d565b34801561047c57600080fd5b50610485611a77565b6040516101c6919061485c565b34801561049e57600080fd5b506101b9611b8d565b3480156104b357600080fd5b506101a26104c23660046148d8565b611c46565b3480156104d357600080fd5b506101a26104e2366004614979565b611e97565b3480156104f357600080fd5b506104fc6120cd565b6040516101c69190614ab9565b34801561051557600080fd5b5060075461023c565b34801561052a57600080fd5b50610204610539366004614524565b61228b565b34801561054a57600080fd5b50604051601281526020016101c6565b34801561056657600080fd5b5061057a610575366004614acc565b6122fd565b6040805182516effffffffffffffffffffffffffffff16815260209283015160ff1692810192909252016101c6565b60606105b760005460011490565b156106095760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e637920646574656374656400000060448201526064015b60405180910390fd5b601280548060200260200160405190810160405280929190818152602001828054801561065f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610641575b505050505090505b90565b6001546001600160a01b031633146106ea5760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f20746865206175746f6e69747920636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610600565b60135460ff1615156001036107905760005b60125481101561075e576001600c60006012848154811061071f5761071f614b1a565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600401805460ff19169115159190911790556001016106fc565b50601380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790556107d5565b601354610100900460ff1615156001036107d5576107ac6123d7565b601380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b600a546107e3906002614b78565b6014540361088657600f80546107fb91600e916142fe565b5060005b601154811015610884576000600c60006011848154811061082257610822614b1a565b60009182526020808320909101546001600160a01b0316835282019290925260400190206004018054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9092169190911790556001016107ff565b505b565b600080546001036108db5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b506001600160a01b03808216600090815260196020526040902054165b919050565b600080546001036109505760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b506001600160a01b03166000908152601a602052604090205490565b61099960405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000546001036109eb5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b6000601560016014546109fe9190614ba0565b81548110610a0e57610a0e614b1a565b9060005260206000200183604051610a269190614bb3565b90815260408051918290036020908101832060608401835280548452600180820154928501929092526002015460ff161515838301528151608081019092526014549293506000928291610a7991614ba0565b815260200183600001518152602001836020015181526020018360400151151581525090508092505050919050565b610ad560405180608001604052806000815260200160008152602001600081526020016000151581525090565b600054600103610b275760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b600060158481548110610b3c57610b3c614b1a565b9060005260206000200183604051610b549190614bb3565b9081526040805191829003602090810183206060808501845281548552600182015485840190815260029092015460ff16151585850190815284516080810186528a8152955193860193909352905192840192909252511515908201529150505b92915050565b6002546001600160a01b03163314610c155760405162461bcd60e51b815260206004820152601660248201527f7265737472696374656420746f206f70657261746f72000000000000000000006044820152606401610600565b8082108015610c245750600081115b610c705760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420636f6e6669670000000000000000000000000000000000006044820152606401610600565b6008546040805160808082526013908201527f72657665616c5265736574496e74657276616c0000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a160088190556007546040805160808082526012908201527f6e6f6e52657665616c5468726573686f6c64000000000000000000000000000060a0820152602081019290925281018390524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a150600755565b6001546000906001600160a01b03163314610dee5760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f20746865206175746f6e69747920636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610600565b610df6612607565b600354600b54610e069190614bcf565b431015610e1557506000610f01565b6000610e1f61265e565b600854601454919250610e3191614c11565b600003610e4057610e4061284c565b60158054600101815560009081525b600e54811015610e7557610e6381836128a2565b610e6e600182614bcf565b9050610e4f565b50610e7e613062565b43600b81905550600160146000828254610e989190614bcf565b909155505060105460035414610eaf576010546003555b601454600354604080519283524260208401528201527f5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f49060600160405180910390a1610efb81613156565b60019150505b61066760008055565b336000908152600c602052604090206004015460ff16610f6c5760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f74657273000000000000006044820152606401610600565b610f74612607565b336000908152600c60205260409020601454815403610fd55760405162461bcd60e51b815260206004820152600d60248201527f616c726561647920766f746564000000000000000000000000000000000000006044820152606401610600565b60018101805490879055815460145483556000819003611032576040805133815260ff861660208201527fd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73910160405180910390a1505050611444565b60016014546110419190614ba0565b81146110e057336001600160a01b03167f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b160016014546110819190614ba0565b6040805160808082526016908201527f4c617374566f746564526f756e644d69736d617463680000000000000000000060a08201526020810192909252810184905260ff8716606082015260c0015b60405180910390a2505050611444565b868686336040516020016110f79493929190614c42565b6040516020818303038152906040528051906020012060001c975087821461119a576111233384613202565b604080516080808252600e908201527f436f6d6d69744d69736d6174636800000000000000000000000000000000000060a08201526020810184905290810189905260ff8516606082015233907f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b19060c0016110d0565b600e54861461121e57600e546040805160808082526014908201527f5265706f72744c656e6774684d69736d6174636800000000000000000000000060a0820152602081018990529081019190915260ff8516606082015233907f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b19060c0016110d0565b60005b868110156113d957606488888381811061123d5761123d614b1a565b90506040020160200160208101906112559190614cc6565b60ff1611156112a65760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420636f6e666964656e63652073636f726500000000000000006044820152606401610600565b60008888838181106112ba576112ba614b1a565b6112d09260206040909202019081019150614ce3565b6effffffffffffffffffffffffffffff1611801561131a575060008888838181106112fd576112fd614b1a565b90506040020160200160208101906113159190614cc6565b60ff16115b6113665760405162461bcd60e51b815260206004820152601660248201527f636f6e666964656e63652f7072696365206572726f72000000000000000000006044820152606401610600565b87878281811061137857611378614b1a565b905060400201600d600e838154811061139357611393614b1a565b906000526020600020016040516113aa9190614d4d565b9081526040805160209281900383019020336000908152925290206113cf8282614dc2565b5050600101611221565b506004830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560405160ff8516815233907f8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f089060200160405180910390a25050505b61144d60008055565b5050505050565b600080546001036114a75760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b5060105490565b6001546001600160a01b0316331461152e5760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f20746865206175746f6e69747920636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610600565b611536612607565b47611541818361326f565b5061088460008055565b6000805460010361159e5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b50600b5490565b6002546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820152601660248201527f7265737472696374656420746f206f70657261746f72000000000000000000006044820152606401610600565b61160881613519565b6010819055600354600b547f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba91908390611643908390614bcf565b604080516080808252600a908201527f766f7465506572696f640000000000000000000000000000000000000000000060a08201526020810194909452830191909152606082015260c0015b60405180910390a150565b6002546001600160a01b031633146116f45760405162461bcd60e51b815260206004820152601660248201527f7265737472696374656420746f206f70657261746f72000000000000000000006044820152606401610600565b80516000036117455760405162461bcd60e51b815260206004820152601660248201527f73796d626f6c732063616e277420626520656d707479000000000000000000006044820152606401610600565b601454600a54611756906001614b78565b141580156117685750601454600a5414155b6117b45760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e6400006044820152606401610600565b80516117c790600f906020840190614356565b50601454600a8190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d9082906117ff906001614bcf565b60405161168f929190614e5d565b61184a6040518060c00160405280600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b60005460010361189c5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b506001600160a01b03166000908152600c6020908152604091829020825160c081018452815481526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff8082161515608084015261010090910416151560a082015290565b6000805460010361195c5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b5060145490565b6001546001600160a01b031633146119e35760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f20746865206175746f6e69747920636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610600565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008054600103611a705760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b5060035490565b611ad860405180610120016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600054600103611b2a5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b5060408051610120810182526001546001600160a01b039081168252600254166020820152600354918101919091526004546060820152600554608082015260065460a082015260075460c082015260085460e082015260095461010082015290565b6060611b9b60005460011490565b15611be85760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b601180548060200260200160405190810160405280929190818152602001828054801561065f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610641575050505050905090565b6002546001600160a01b03163314611ca05760405162461bcd60e51b815260206004820152601660248201527f7265737472696374656420746f206f70657261746f72000000000000000000006044820152606401610600565b6005546040805160808082526018908201527f6f75746c696572536c617368696e675468726573686f6c64000000000000000060a0820152602081019290925281018590524360608201527fb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c9060c00160405180910390a160058490556004546040805160808082526019908201527f6f75746c696572446574656374696f6e5468726573686f6c640000000000000060a0820152602081019290925281018490524360608201527fb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c9060c00160405180910390a160048390556006546040805160808082526010908201527f62617365536c617368696e67526174650000000000000000000000000000000060a0820152602081019290925281018390524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a16006829055600954604080516080808252600f908201527f736c617368696e6752617465436170000000000000000000000000000000000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600955505050565b6001546001600160a01b03163314611f175760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f20746865206175746f6e69747920636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610600565b611f1f612607565b8251600003611f705760405162461bcd60e51b815260206004820152601560248201527f566f746572732063616e277420626520656d70747900000000000000000000006044820152606401610600565b60005b835181101561208457828181518110611f8e57611f8e614b1a565b602002602001015160186000868481518110611fac57611fac614b1a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081818151811061200a5761200a614b1a565b60200260200101516019600086848151811061202857612028614b1a565b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001692909116919091179055600101611f73565b5061209e836000600186516120999190614ba0565b6136df565b82516120b190601290602086019061439c565b506013805460ff191660011790556120c860008055565b505050565b6060601454600a5460016120e19190614b78565b036121bd57600f805480602002602001604051908101604052809291908181526020016000905b828210156121b457838290600052602060002001805461212790614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461215390614d00565b80156121a05780601f10612175576101008083540402835291602001916121a0565b820191906000526020600020905b81548152906001019060200180831161218357829003601f168201915b505050505081526020019060010190612108565b50505050905090565b600e805480602002602001604051908101604052809291908181526020016000905b828210156121b45783829060005260206000200180546121fe90614d00565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90614d00565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b5050505050815260200190600101906121df565b600080546001036122de5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b506001600160a01b039081166000908152601860205260409020541690565b60408051808201909152600080825260208201526000546001036123635760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610600565b600d836040516123739190614bb3565b90815260408051602092819003830181206001600160a01b0395909516600090815294835293819020848201909152546effffffffffffffffffffffffffffff811684526f01000000000000000000000000000000900460ff169083015250919050565b6000805b601154821080156123ed575060125481105b1561255e576012818154811061240557612405614b1a565b600091825260209091200154601180546001600160a01b03909216918490811061243157612431614b1a565b6000918252602090912001546001600160a01b03160361246b578161245581614e7f565b925050808061246390614e7f565b9150506123db565b6012818154811061247e5761247e614b1a565b600091825260209091200154601180546001600160a01b0390921691849081106124aa576124aa614b1a565b6000918252602090912001546001600160a01b0316101561255457600c6000601184815481106124dc576124dc614b1a565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810182905560028101829055600381019190915560040180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690558161254c81614e7f565b9250506123db565b8061246381614e7f565b6011548210156125f757600c60006011848154811061257f5761257f614b1a565b60009182526020808320909101546001600160a01b0316835282019290925260400181208181556001810182905560028101829055600381019190915560040180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169055816125ef81614e7f565b92505061255e565b601280546120c891601191614415565b600054156126575760405162461bcd60e51b815260206004820152601360248201527f7265656e7472616e6379206465746563746564000000000000000000000000006044820152606401610600565b6001600055565b60115460609060009067ffffffffffffffff81111561267f5761267f61453f565b6040519080825280602002602001820160405280156126a8578160200160208202803683370190505b50905060005b601154811015612846576000601182815481106126cd576126cd614b1a565b60009182526020808320909101546001600160a01b0316808352600c90915260409091206014549192509061270490600190614ba0565b8154148015612717575060008160010154115b15612726576127268282613202565b6007546003820154111561283c57600184848151811061274857612748614b1a565b911515602092830291909101820152601454600383015460408051928352928201526001600160a01b038416917f9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1910160405180910390a2600060038201556001546009546040517f02fb4d850000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015260248201929092529116906302fb4d85906044016020604051808303816000875af1158015612816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283a9190614e99565b505b50506001016126ae565b50919050565b60005b601154811015610884576000600c60006011848154811061287257612872614b1a565b60009182526020808320909101546001600160a01b0316835282019290925260400190206003015560010161284f565b6000600e83815481106128b7576128b7614b1a565b9060005260206000200180546128cc90614d00565b80601f01602080910402602001604051908101604052809291908181526020018280546128f890614d00565b80156129455780601f1061291a57610100808354040283529160200191612945565b820191906000526020600020905b81548152906001019060200180831161292857829003601f168201915b50505050509050600060118054905067ffffffffffffffff81111561296c5761296c61453f565b6040519080825280602002602001820160405280156129b157816020015b604080518082019091526000808252602082015281526020019060019003908161298a5790505b5090506000805b601154811015612ab5576000601182815481106129d7576129d7614b1a565b60009182526020808320909101546001600160a01b0316808352600c90915260409091206004015490915060ff61010090910416612a155750612aad565b600d85604051612a259190614bb3565b9081526040805191829003602090810183206001600160a01b038516600090815290825282902083830190925290546effffffffffffffffffffffffffffff8116835260ff6f0100000000000000000000000000000090910416908201528484612a8e81614e7f565b955081518110612aa057612aa0614b1a565b6020026020010181905250505b6001016129b8565b508015612f30576000612ac8838361388c565b6effffffffffffffffffffffffffffff1690506000612ae7828661395c565b606081015190915015612dfd5760005b8160200151811015612d05576000612bdf83600001518381518110612b1e57612b1e614b1a565b602002602001015185600d8a604051612b379190614bb3565b90815260200160405180910390206000601188600001518881518110612b5f57612b5f614b1a565b602002602001015181548110612b7757612b77614b1a565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151808301909252546effffffffffffffffffffffffffffff8116825260ff6f0100000000000000000000000000000090910416918101919091528b613ca5565b9050601183600001518381518110612bf957612bf9614b1a565b602002602001015181548110612c1157612c11614b1a565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03167f372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57828987600d8c604051612c6c9190614bb3565b9081526020016040518091039020600060118a600001518a81518110612c9457612c94614b1a565b602002602001015181548110612cac57612cac614b1a565b60009182526020808320909101546001600160a01b031683528201929092526040908101909120549051612cf4949392916effffffffffffffffffffffffffffff1690614eb2565b60405180910390a250600101612af7565b506000612d1a82604001518360600151613e94565b9050604051806060016040528082815260200142815260200160011515815250601560145481548110612d4f57612d4f614b1a565b9060005260206000200187604051612d679190614bb3565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff1916911515919091179055612da7908790614bb3565b604080519182900382206014548484526020840152600183830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a250612f29565b600060156001601454612e109190614ba0565b81548110612e2057612e20614b1a565b9060005260206000200186604051612e389190614bb3565b9081526020016040518091039020600001549050604051806060016040528082815260200142815260200160001515815250601560145481548110612e7f57612e7f614b1a565b9060005260206000200187604051612e979190614bb3565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff1916911515919091179055612ed7908790614bb3565b604080519182900382206014548484526020840152600083830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a2505b505061144d565b600060156001601454612f439190614ba0565b81548110612f5357612f53614b1a565b9060005260206000200184604051612f6b9190614bb3565b9081526020016040518091039020600001549050604051806060016040528082815260200142815260200160001515815250601560145481548110612fb257612fb2614b1a565b9060005260206000200185604051612fca9190614bb3565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff191691151591909117905561300a908590614bb3565b604080519182900382206014548484526020840152600083830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a2505050505050565b60005b6011548110156108845760006011828154811061308457613084614b1a565b60009182526020808320909101546001600160a01b0316808352600c9091526040909120600201549091501561314d576130bf601682613f52565b506001600160a01b0381166000908152600c6020908152604080832060020154601a90925282208054919290916130f7908490614bcf565b90915550506001600160a01b0381166000908152600c6020526040812060020154601b80549192909161312b908490614bcf565b90915550506001600160a01b0381166000908152600c60205260408120600201555b50600101613065565b60005b6011548110156131fe5781818151811061317557613175614b1a565b6020026020010151156131f6576000600c60006011848154811061319b5761319b614b1a565b60009182526020808320909101546001600160a01b0316835282019290925260400190206004018054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9092169190911790555b600101613159565b5050565b60038101805490600061321483614e7f565b9190505550816001600160a01b03167f176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced430926014548360030154604051613263929190918252602082015260400190565b60405180910390a25050565b601b5460000361327d575050565b60006132896016613f6e565b905060005b81518110156134d55760008282815181106132ab576132ab614b1a565b602002602001015190506000601b54601a6000846001600160a01b03166001600160a01b0316815260200190815260200160002054876132eb9190614ef3565b6132f59190614f0a565b601b546001600160a01b0384166000908152601a60205260408120549293509161331f9088614ef3565b6133299190614f0a565b90508115613402576001600160a01b03838116600090815260186020526040808220549051919283929116906108fc90869084818181858888f193505050503d8060008114613394576040519150601f19603f3d011682016040523d82523d6000602084013e613399565b606091505b5090925090508115156000036133ff576001600160a01b03808616600090815260186020526040908190205490517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352926133f69216908490614f1e565b60405180910390a15b50505b80156134a1576001546001600160a01b038481166000908152601960205260408082205490517ff7fcc510000000000000000000000000000000000000000000000000000000008152908316600482015260248101859052604481019190915291169063f7fcc51090606401600060405180830381600087803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152601a60205260408120556134c5601684613f7b565b50506001909201915061328e9050565b5060408051838152602081018590527f3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec910160405180910390a150506000601b5550565b600154604080517f0aac2da100000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa15801561357c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a09190614e99565b9050806135ae836002614ef3565b11156135fc5760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f20626967000000000000000000006044820152606401610600565b600154604080517fdfb1a4d200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163dfb1a4d2916004808201926020929091908290030181865afa15801561365f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136839190614e99565b905080613691836002614ef3565b11156131fe5760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f20626967000000000000000000006044820152606401610600565b8082126136eb57505050565b818160008560026136fc8585614f4e565b6137069190614f6e565b6137109087614b78565b8151811061372057613720614b1a565b602002602001015190505b81831361385e575b806001600160a01b031686848151811061374f5761374f614b1a565b60200260200101516001600160a01b03161015613778578261377081614fb8565b935050613733565b806001600160a01b031686838151811061379457613794614b1a565b60200260200101516001600160a01b031611156137bd57816137b581614fe9565b925050613778565b818313613859578582815181106137d6576137d6614b1a565b60200260200101518684815181106137f0576137f0614b1a565b602002602001015187858151811061380a5761380a614b1a565b6020026020010188858151811061382357613823614b1a565b6001600160a01b039384166020918202929092010152911690528261384781614fb8565b935050818061385590614fe9565b9250505b61372b565b81851215613871576138718686846136df565b83831215613884576138848684866136df565b505050505050565b60008160000361389e57506000610bb5565b6138b48360006138af600186614ba0565b613f90565b60006138c1600284614f0a565b90506138ce600284614c11565b156138f6578381815181106138e5576138e5614b1a565b602002602001015160000151613954565b600284828151811061390a5761390a614b1a565b602002602001015160000151856001846139249190614ba0565b8151811061393457613934614b1a565b60200260200101516000015161394a9190615022565b6139549190615049565b949350505050565b6139876040518060800160405280606081526020016000815260200160608152602001600081525090565b6139b26040518060800160405280606081526020016000815260200160608152602001600081525090565b60115467ffffffffffffffff8111156139cd576139cd61453f565b604051908082528060200260200182016040528015613a1257816020015b60408051808201909152600080825260208201528152602001906001900390816139eb5790505b50604082015260115467ffffffffffffffff811115613a3357613a3361453f565b604051908082528060200260200182016040528015613a5c578160200160208202803683370190505b50815260005b601154811015613c9d57600060118281548110613a8157613a81614b1a565b60009182526020808320909101546001600160a01b0316808352600c90915260409091206004015490915060ff61010090910416613abf5750613c95565b600086600d87604051613ad29190614bb3565b90815260408051602092819003830190206001600160a01b03861660009081529252902054613b12906effffffffffffffffffffffffffffff1689614f4e565b613b1d906064615087565b613b279190614f6e565b6004549091508113801590613b495750600454613b4682600019615087565b13155b15613c5f57600d86604051613b5e9190614bb3565b9081526040805191829003602090810183206001600160a01b03861660009081529082528290208383018352546effffffffffffffffffffffffffffff8116845260ff6f01000000000000000000000000000000909104169083015285015160608601805190613bcd82614e7f565b905281518110613bdf57613bdf614b1a565b6020026020010181905250600d86604051613bfa9190614bb3565b90815260408051602092819003830190206001600160a01b038516600090815290835281812054600c90935290812060020180546f0100000000000000000000000000000090930460ff1692909190613c54908490614bcf565b90915550613c929050565b8351602085018051859291613c7382614e7f565b905281518110613c8557613c85614b1a565b6020026020010181815250505b50505b600101613a62565b509392505050565b60008060118681548110613cbb57613cbb614b1a565b60009182526020808320909101546001600160a01b0316808352600c909152604090912060040180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690558351909150839087908110613d1f57613d1f614b1a565b602002602001015115613d36576000915050613954565b6000858686600001516effffffffffffffffffffffffffffff16613d5a9190614f4e565b613d65906064615087565b613d6f9190614f6e565b9050613d7b8180615087565b6005549091508113613d9257600092505050613954565b6000612710600160050154876020015160ff1660016004015485613db69190614f4e565b613dc09190614ef3565b613dca9190614ef3565b613dd49190614f0a565b600954909150811115613de657506009545b6001546001600160a01b03848116600090815260196020526040908190205490517f02fb4d850000000000000000000000000000000000000000000000000000000081529082166004820152602481018490529116906302fb4d85906044016020604051808303816000875af1158015613e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e889190614e99565b98975050505050505050565b60008080805b84811015613f3e57858181518110613eb457613eb4614b1a565b60200260200101516020015160ff16868281518110613ed557613ed5614b1a565b602002602001015160000151613eeb91906150d3565b613f06906effffffffffffffffffffffffffffff1683614bcf565b9150858181518110613f1a57613f1a614b1a565b60200260200101516020015160ff1683613f349190614bcf565b9250600101613e9a565b50613f498282614f0a565b95945050505050565b6000613f67836001600160a01b038416614159565b9392505050565b60606000613f67836141a8565b6000613f67836001600160a01b038416614204565b8181808203613fa0575050505050565b6000856002613faf8787614f4e565b613fb99190614f6e565b613fc39087614b78565b81518110613fd357613fd3614b1a565b60200260200101516000015190505b818313614133575b806effffffffffffffffffffffffffffff1686848151811061400e5761400e614b1a565b6020026020010151600001516effffffffffffffffffffffffffffff161015614043578261403b81614fb8565b935050613fea565b85828151811061405557614055614b1a565b6020026020010151600001516effffffffffffffffffffffffffffff16816effffffffffffffffffffffffffffff16101561409c578161409481614fe9565b925050614043565b81831361412e578582815181106140b5576140b5614b1a565b60200260200101518684815181106140cf576140cf614b1a565b60200260200101518785815181106140e9576140e9614b1a565b6020026020010188858151811061410257614102614b1a565b602002602001018290528290525050818061411c90614fe9565b925050828061412a90614fb8565b9350505b613fe2565b8185121561414657614146868684613f90565b8383121561388457613884868486613f90565b60008181526001830160205260408120546141a057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bb5565b506000610bb5565b6060816000018054806020026020016040519081016040528092919081815260200182805480156141f857602002820191906000526020600020905b8154815260200190600101908083116141e4575b50505050509050919050565b600081815260018301602052604081205480156142ed576000614228600183614ba0565b855490915060009061423c90600190614ba0565b90508082146142a157600086600001828154811061425c5761425c614b1a565b906000526020600020015490508087600001848154811061427f5761427f614b1a565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142b2576142b26150fd565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610bb5565b6000915050610bb5565b5092915050565b8280548282559060005260206000209081019282156143465760005260206000209182015b8281111561434657816143368482615173565b5091600101919060010190614323565b50614352929150614455565b5090565b828054828255906000526020600020908101928215614346579160200282015b82811115614346578251829061438c9082615253565b5091602001919060010190614376565b828054828255906000526020600020908101928215614409579160200282015b8281111561440957825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906143bc565b50614352929150614472565b8280548282559060005260206000209081019282156144095760005260206000209182015b8281111561440957825482559160010191906001019061443a565b808211156143525760006144698282614487565b50600101614455565b5b808211156143525760008155600101614473565b50805461449390614d00565b6000825580601f106144a3575050565b601f0160209004906000526020600020908101906108849190614472565b602080825282518282018190526000918401906040840190835b818110156145025783516001600160a01b03168352602093840193909201916001016144db565b509095945050505050565b80356001600160a01b03811681146108f857600080fd5b60006020828403121561453657600080fd5b613f678261450d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145975761459761453f565b604052919050565b600082601f8301126145b057600080fd5b813567ffffffffffffffff8111156145ca576145ca61453f565b6145dd6020601f19601f8401160161456e565b8181528460208386010111156145f257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561462157600080fd5b813567ffffffffffffffff81111561463857600080fd5b6139548482850161459f565b6000806040838503121561465757600080fd5b82359150602083013567ffffffffffffffff81111561467557600080fd5b6146818582860161459f565b9150509250929050565b6000806040838503121561469e57600080fd5b50508035926020909101359150565b60ff8116811461088457600080fd5b80356108f8816146ad565b6000806000806000608086880312156146df57600080fd5b85359450602086013567ffffffffffffffff8111156146fd57600080fd5b8601601f8101881361470e57600080fd5b803567ffffffffffffffff81111561472557600080fd5b8860208260061b840101111561473a57600080fd5b6020919091019450925060408601359150614757606087016146bc565b90509295509295909350565b60006020828403121561477557600080fd5b5035919050565b600067ffffffffffffffff8211156147965761479661453f565b5060051b60200190565b6000602082840312156147b257600080fd5b813567ffffffffffffffff8111156147c957600080fd5b8201601f810184136147da57600080fd5b80356147ed6147e88261477c565b61456e565b8082825260208201915060208360051b85010192508683111561480f57600080fd5b602084015b8381101561485157803567ffffffffffffffff81111561483357600080fd5b6148428960208389010161459f565b84525060209283019201614814565b509695505050505050565b81516001600160a01b03168152602080830151610120830191614889908401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b600080600080608085870312156148ee57600080fd5b5050823594602084013594506040840135936060013592509050565b600082601f83011261491b57600080fd5b81356149296147e88261477c565b8082825260208201915060208360051b86010192508583111561494b57600080fd5b602085015b8381101561496f576149618161450d565b835260209283019201614950565b5095945050505050565b60008060006060848603121561498e57600080fd5b833567ffffffffffffffff8111156149a557600080fd5b6149b18682870161490a565b935050602084013567ffffffffffffffff8111156149ce57600080fd5b6149da8682870161490a565b925050604084013567ffffffffffffffff8111156149f757600080fd5b614a038682870161490a565b9150509250925092565b60005b83811015614a28578181015183820152602001614a10565b50506000910152565b60008151808452614a49816020860160208601614a0d565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015614aad57601f19858403018852614a97838351614a31565b6020988901989093509190910190600101614a7b565b50909695505050505050565b602081526000613f676020830184614a5d565b60008060408385031215614adf57600080fd5b823567ffffffffffffffff811115614af657600080fd5b614b028582860161459f565b925050614b116020840161450d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018281126000831280158216821582161715614b9857614b98614b49565b505092915050565b81810381811115610bb557610bb5614b49565b60008251614bc5818460208701614a0d565b9190910192915050565b80820180821115610bb557610bb5614b49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614c2057614c20614be2565b500690565b6effffffffffffffffffffffffffffff8116811461088457600080fd5b6060808252810184905260008560808301825b87811015614ca3578235614c6881614c25565b6effffffffffffffffffffffffffffff1682526020830135614c89816146ad565b60ff16602083015260409283019290910190600101614c55565b50602084019590955250506001600160a01b039190911660409091015292915050565b600060208284031215614cd857600080fd5b8135613f67816146ad565b600060208284031215614cf557600080fd5b8135613f6781614c25565b600181811c90821680614d1457607f821691505b602082108103612846577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000808354614d5b81614d00565b600182168015614d725760018114614d8757614db7565b60ff1983168652811515820286019350614db7565b86600052602060002060005b83811015614daf57815488820152600190910190602001614d93565b505081860193505b509195945050505050565b8135614dcd81614c25565b6effffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffffffffffffff00000000000000000000000000000082161783556020840135614e18816146ad565b6fff0000000000000000000000000000008160781b16837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416171784555050505050565b604081526000614e706040830185614a5d565b90508260208301529392505050565b60006000198203614e9257614e92614b49565b5060010190565b600060208284031215614eab57600080fd5b5051919050565b848152608060208201526000614ecb6080830186614a31565b90508360408301526effffffffffffffffffffffffffffff8316606083015295945050505050565b8082028115828204841417610bb557610bb5614b49565b600082614f1957614f19614be2565b500490565b6001600160a01b038316815260606020820152600060608201526080604082015260006139546080830184614a31565b81810360008312801583831316838312821617156142f7576142f7614b49565b600082614f7d57614f7d614be2565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615614fb357614fb3614b49565b500590565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e9257614e92614b49565b60007f8000000000000000000000000000000000000000000000000000000000000000820361501a5761501a614b49565b506000190190565b6effffffffffffffffffffffffffffff8181168382160190811115610bb557610bb5614b49565b60006effffffffffffffffffffffffffffff83168061506a5761506a614be2565b806effffffffffffffffffffffffffffff84160491505092915050565b808202600082127f8000000000000000000000000000000000000000000000000000000000000000841416156150bf576150bf614b49565b8181058314821517610bb557610bb5614b49565b6effffffffffffffffffffffffffffff81811683821602908116908181146142f7576142f7614b49565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b601f8211156120c857806000526020600020601f840160051c810160208510156151535750805b601f840160051c820191505b8181101561144d576000815560010161515f565b81810361517e575050565b6151888254614d00565b67ffffffffffffffff8111156151a0576151a061453f565b6151b4816151ae8454614d00565b8461512c565b6000601f8211600181146151eb57600083156151d05750848201545b600184901b600019600386901b1c198216175b85555061144d565b600085815260209020601f19841690600086815260209020845b838110156152255782860154825560019586019590910190602001615205565b50858310156152435781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b815167ffffffffffffffff81111561526d5761526d61453f565b61527b816151ae8454614d00565b6020601f8211600181146152ad57600083156151d0575081850151600184901b600019600386901b1c198216176151e3565b600084815260208120601f198516915b828110156152dd57878501518255602094850194600190920191016152bd565b50848210156152fb5786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220646325d016a96c9583ca668fb0e4c49aec8da619da107a6fd6a77302e87f2dc864736f6c634300081e0033")

var OracleAbi, _ = abi.JSON(strings.NewReader(`[
   {
      "inputs" : [
         {
            "internalType" : "address[]",
            "name" : "_voters",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "_nodeAddresses",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "_treasuries",
            "type" : "address[]"
         },
         {
            "internalType" : "string[]",
            "name" : "_symbols",
            "type" : "string[]"
         },
         {
            "components" : [
               {
                  "internalType" : "contract IAutonity",
                  "name" : "autonity",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "operator",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "votePeriod",
                  "type" : "uint256"
               },
               {
                  "internalType" : "int256",
                  "name" : "outlierDetectionThreshold",
                  "type" : "int256"
               },
               {
                  "internalType" : "int256",
                  "name" : "outlierSlashingThreshold",
                  "type" : "int256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "baseSlashingRate",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "nonRevealThreshold",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "revealResetInterval",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "slashingRateCap",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct Oracle.Config",
            "name" : "_config",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "constructor"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "to",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "methodSignature",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "bytes",
            "name" : "returnData",
            "type" : "bytes"
         }
      ],
      "name" : "CallFailed",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "_voter",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_round",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_nonRevealCount",
            "type" : "uint256"
         }
      ],
      "name" : "CommitRevealMissed",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "oldValue",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "newValue",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateAddress",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "oldValue",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "newValue",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateBool",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "int256",
            "name" : "oldValue",
            "type" : "int256"
         },
         {
            "indexed" : false,
            "internalType" : "int256",
            "name" : "newValue",
            "type" : "int256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateInt",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "name",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "oldValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "newValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "appliesAtHeight",
            "type" : "uint256"
         }
      ],
      "name" : "ConfigUpdateUint",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "cause",
            "type" : "string"
         },
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "reporter",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "expValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "actualValue",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint8",
            "name" : "extra",
            "type" : "uint8"
         }
      ],
      "name" : "InvalidVote",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_round",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_timestamp",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_votePeriod",
            "type" : "uint256"
         }
      ],
      "name" : "NewRound",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "string[]",
            "name" : "_symbols",
            "type" : "string[]"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_round",
            "type" : "uint256"
         }
      ],
      "name" : "NewSymbols",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "address",
            "name" : "reporter",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint8",
            "name" : "extra",
            "type" : "uint8"
         }
      ],
      "name" : "NewVoter",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "_voter",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_round",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_missedReveal",
            "type" : "uint256"
         }
      ],
      "name" : "NoRevealPenalty",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "_participant",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "_slashingAmount",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "string",
            "name" : "_symbol",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "int256",
            "name" : "_median",
            "type" : "int256"
         },
         {
            "indexed" : false,
            "internalType" : "uint120",
            "name" : "_reported",
            "type" : "uint120"
         }
      ],
      "name" : "Penalized",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "price",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "round",
            "type" : "uint256"
         },
         {
            "indexed" : true,
            "internalType" : "string",
            "name" : "symbol",
            "type" : "string"
         },
         {
            "indexed" : false,
            "internalType" : "bool",
            "name" : "status",
            "type" : "bool"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "timestamp",
            "type" : "uint256"
         }
      ],
      "name" : "PriceUpdated",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : true,
            "internalType" : "address",
            "name" : "reporter",
            "type" : "address"
         },
         {
            "indexed" : false,
            "internalType" : "uint8",
            "name" : "extra",
            "type" : "uint8"
         }
      ],
      "name" : "SuccessfulVote",
      "type" : "event"
   },
   {
      "anonymous" : false,
      "inputs" : [
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "ntnReward",
            "type" : "uint256"
         },
         {
            "indexed" : false,
            "internalType" : "uint256",
            "name" : "atnReward",
            "type" : "uint256"
         }
      ],
      "name" : "TotalOracleRewards",
      "type" : "event"
   },
   {
      "stateMutability" : "payable",
      "type" : "fallback"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_ntn",
            "type" : "uint256"
         }
      ],
      "name" : "distributeRewards",
      "outputs" : [],
      "stateMutability" : "payable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "finalize",
      "outputs" : [
         {
            "internalType" : "bool",
            "name" : "",
            "type" : "bool"
         }
      ],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getConfig",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "contract IAutonity",
                  "name" : "autonity",
                  "type" : "address"
               },
               {
                  "internalType" : "address",
                  "name" : "operator",
                  "type" : "address"
               },
               {
                  "internalType" : "uint256",
                  "name" : "votePeriod",
                  "type" : "uint256"
               },
               {
                  "internalType" : "int256",
                  "name" : "outlierDetectionThreshold",
                  "type" : "int256"
               },
               {
                  "internalType" : "int256",
                  "name" : "outlierSlashingThreshold",
                  "type" : "int256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "baseSlashingRate",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "nonRevealThreshold",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "revealResetInterval",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "slashingRateCap",
                  "type" : "uint256"
               }
            ],
            "internalType" : "struct Oracle.Config",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getDecimals",
      "outputs" : [
         {
            "internalType" : "uint8",
            "name" : "",
            "type" : "uint8"
         }
      ],
      "stateMutability" : "pure",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getLastRoundBlock",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getNewVotePeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getNewVoters",
      "outputs" : [
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getNonRevealThreshold",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "string",
            "name" : "_symbol",
            "type" : "string"
         },
         {
            "internalType" : "address",
            "name" : "_voter",
            "type" : "address"
         }
      ],
      "name" : "getReports",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint120",
                  "name" : "price",
                  "type" : "uint120"
               },
               {
                  "internalType" : "uint8",
                  "name" : "confidence",
                  "type" : "uint8"
               }
            ],
            "internalType" : "struct IOracle.Report",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_voter",
            "type" : "address"
         }
      ],
      "name" : "getRewardPeriodPerformance",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getRound",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_round",
            "type" : "uint256"
         },
         {
            "internalType" : "string",
            "name" : "_symbol",
            "type" : "string"
         }
      ],
      "name" : "getRoundData",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "round",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "price",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "timestamp",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bool",
                  "name" : "success",
                  "type" : "bool"
               }
            ],
            "internalType" : "struct IOracle.RoundData",
            "name" : "data",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getSymbolUpdatedRound",
      "outputs" : [
         {
            "internalType" : "int256",
            "name" : "",
            "type" : "int256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getSymbols",
      "outputs" : [
         {
            "internalType" : "string[]",
            "name" : "",
            "type" : "string[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getVotePeriod",
      "outputs" : [
         {
            "internalType" : "uint256",
            "name" : "",
            "type" : "uint256"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_voter",
            "type" : "address"
         }
      ],
      "name" : "getVoterInfo",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "round",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "commit",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "performance",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "nonRevealCount",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bool",
                  "name" : "isVoter",
                  "type" : "bool"
               },
               {
                  "internalType" : "bool",
                  "name" : "reportAvailable",
                  "type" : "bool"
               }
            ],
            "internalType" : "struct Oracle.VoterInfo",
            "name" : "",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_oracleAddress",
            "type" : "address"
         }
      ],
      "name" : "getVoterTreasuries",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_oracleAddress",
            "type" : "address"
         }
      ],
      "name" : "getVoterValidators",
      "outputs" : [
         {
            "internalType" : "address",
            "name" : "",
            "type" : "address"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "getVoters",
      "outputs" : [
         {
            "internalType" : "address[]",
            "name" : "",
            "type" : "address[]"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "string",
            "name" : "_symbol",
            "type" : "string"
         }
      ],
      "name" : "latestRoundData",
      "outputs" : [
         {
            "components" : [
               {
                  "internalType" : "uint256",
                  "name" : "round",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "price",
                  "type" : "uint256"
               },
               {
                  "internalType" : "uint256",
                  "name" : "timestamp",
                  "type" : "uint256"
               },
               {
                  "internalType" : "bool",
                  "name" : "success",
                  "type" : "bool"
               }
            ],
            "internalType" : "struct IOracle.RoundData",
            "name" : "data",
            "type" : "tuple"
         }
      ],
      "stateMutability" : "view",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_threshold",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_resetInterval",
            "type" : "uint256"
         }
      ],
      "name" : "setCommitRevealConfig",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address",
            "name" : "_operator",
            "type" : "address"
         }
      ],
      "name" : "setOperator",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "int256",
            "name" : "_outlierSlashingThreshold",
            "type" : "int256"
         },
         {
            "internalType" : "int256",
            "name" : "_outlierDetectionThreshold",
            "type" : "int256"
         },
         {
            "internalType" : "uint256",
            "name" : "_baseSlashingRate",
            "type" : "uint256"
         },
         {
            "internalType" : "uint256",
            "name" : "_slashingRateCap",
            "type" : "uint256"
         }
      ],
      "name" : "setSlashingConfig",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "string[]",
            "name" : "_symbols",
            "type" : "string[]"
         }
      ],
      "name" : "setSymbols",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_votePeriod",
            "type" : "uint256"
         }
      ],
      "name" : "setVotePeriod",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "address[]",
            "name" : "_newVoters",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "_treasury",
            "type" : "address[]"
         },
         {
            "internalType" : "address[]",
            "name" : "_validator",
            "type" : "address[]"
         }
      ],
      "name" : "setVoters",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [],
      "name" : "updateVotersAndSymbol",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "inputs" : [
         {
            "internalType" : "uint256",
            "name" : "_commit",
            "type" : "uint256"
         },
         {
            "components" : [
               {
                  "internalType" : "uint120",
                  "name" : "price",
                  "type" : "uint120"
               },
               {
                  "internalType" : "uint8",
                  "name" : "confidence",
                  "type" : "uint8"
               }
            ],
            "internalType" : "struct IOracle.Report[]",
            "name" : "_reports",
            "type" : "tuple[]"
         },
         {
            "internalType" : "uint256",
            "name" : "_salt",
            "type" : "uint256"
         },
         {
            "internalType" : "uint8",
            "name" : "_extra",
            "type" : "uint8"
         }
      ],
      "name" : "vote",
      "outputs" : [],
      "stateMutability" : "nonpayable",
      "type" : "function"
   },
   {
      "stateMutability" : "payable",
      "type" : "receive"
   }
]
`))
