0 txs
167 calls
constructor
No constructor.
functions
bitcoinFee
viewfunction bitcoinFee() view returns (uint256)
bitcoinFeeOracle
viewfunction bitcoinFeeOracle() view returns (address)
burnRequestCounter
viewfunction burnRequestCounter(address) view returns (uint256)
burnRequests
viewfunction burnRequests(address, uint256) view returns (uint256 amount, uint256 burntAmount, address sender, bytes userScript, uint256 deadline, bool isTransferred, uint8 scriptType, uint256 requestIdOfLocker)
isTransferred
viewfunction isTransferred(address _lockerTargetAddress, uint256 _index) view returns (bool)
isUsedAsBurnProof
viewfunction isUsedAsBurnProof(bytes32) view returns (bool)
lockers
viewfunction lockers() view returns (address)
owner
viewfunction owner() view returns (address)
protocolPercentageFee
viewfunction protocolPercentageFee() view returns (uint256)
relay
viewfunction relay() view returns (address)
slasherPercentageReward
viewfunction slasherPercentageReward() view returns (uint256)
startingBlockNumber
viewfunction startingBlockNumber() view returns (uint256)
teleBTC
viewfunction teleBTC() view returns (address)
thirdPartyAddress
viewfunction thirdPartyAddress(uint256) view returns (address)
thirdPartyFee
viewfunction thirdPartyFee(uint256) view returns (uint256)
transferDeadline
viewfunction transferDeadline() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
wrappedNativeToken
viewfunction wrappedNativeToken() view returns (address)
burnProof
payablefunction burnProof(bytes4 _version, bytes _vin, bytes _vout, bytes4 _locktime, uint256 _blockNumber, bytes _intermediateNodes, uint256 _index, bytes _lockerLockingScript, uint256[] _burnReqIndexes, uint256[] _voutIndexes) payable returns (bool)
disputeBurn
nonpayablefunction disputeBurn(bytes _lockerLockingScript, uint256[] _indices)
disputeLocker
payablefunction disputeLocker(bytes _lockerLockingScript, bytes4[] _versions, bytes _inputVin, bytes _inputVout, bytes _outputVin, bytes _outputVout, bytes4[] _locktimes, bytes _inputIntermediateNodes, uint256[] _indexesAndBlockNumbers) payable
initialize
nonpayablefunction initialize(uint256 _startingBlockNumber, address _relay, address _lockers, address _treasury, address _teleBTC, uint256 _transferDeadline, uint256 _protocolPercentageFee, uint256 _slasherPercentageReward, uint256 _networkFee, address _wrappedNativeToken)
renounceOwnership
nonpayablefunction renounceOwnership()
setLockers
nonpayablefunction setLockers(address _lockers)
setNetworkFee
nonpayablefunction setNetworkFee(uint256 _networkFee)
setNetworkFeeOracle
nonpayablefunction setNetworkFeeOracle(address _networkFeeOracle)
setProtocolPercentageFee
nonpayablefunction setProtocolPercentageFee(uint256 _protocolPercentageFee)
setRelay
nonpayablefunction setRelay(address _relay)
setSlasherPercentageReward
nonpayablefunction setSlasherPercentageReward(uint256 _slasherPercentageReward)
setStartingBlockNumber
nonpayablefunction setStartingBlockNumber(uint256 _startingBlockNumber)
setTeleBTC
nonpayablefunction setTeleBTC(address _teleBTC)
setThirdPartyAddress
nonpayablefunction setThirdPartyAddress(uint256 _thirdPartyId, address _thirdPartyAddress)
setThirdPartyFee
nonpayablefunction setThirdPartyFee(uint256 _thirdPartyId, uint256 _thirdPartyFee)
setTransferDeadline
nonpayablefunction setTransferDeadline(uint256 _transferDeadline)
setTreasury
nonpayablefunction setTreasury(address _treasury)
setWrappedNativeToken
nonpayablefunction setWrappedNativeToken(address _wrappedNativeToken)
swapAndUnwrap
payablefunction swapAndUnwrap(address _exchangeConnector, uint256[] _amounts, bool _isFixedToken, address[] _path, uint256 _deadline, bytes _userScript, uint8 _scriptType, bytes _lockerLockingScript, uint256 thirdParty) payable returns (uint256)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unwrap
nonpayablefunction unwrap(uint256 _amount, bytes _userScript, uint8 _scriptType, bytes _lockerLockingScript, uint256 thirdParty) returns (uint256)
useAsBurnProof
nonpayablefunction useAsBurnProof(bytes32 _txId)
events
BurnDispute
event BurnDispute(address indexed userTargetAddress, address indexed _lockerTargetAddress, bytes lockerLockingScript, uint256 requestIdOfLocker)
Initialized
event Initialized(uint8 version)
LockerDispute
event LockerDispute(address _lockerTargetAddress, bytes lockerLockingScript, uint256 _blockNumber, bytes32 txId, uint256 amount)
NewLockers
event NewLockers(address oldLockers, address newLockers)
NewNetworkFee
event NewNetworkFee(uint256 oldNetworkFee, uint256 newNetworkFee)
NewNetworkFeeOracle
event NewNetworkFeeOracle(address oldNetworkFeeOracle, address newNetworkFeeOracle)
NewProtocolPercentageFee
event NewProtocolPercentageFee(uint256 oldProtocolPercentageFee, uint256 newProtocolPercentageFee)
NewRelay
event NewRelay(address oldRelay, address newRelay)
NewSlasherPercentageFee
event NewSlasherPercentageFee(uint256 oldSlasherPercentageFee, uint256 newSlasherPercentageFee)
NewTeleBTC
event NewTeleBTC(address oldTeleBTC, address newTeleBTC)
NewThirdPartyAddress
event NewThirdPartyAddress(uint256 thirdPartyId, address oldThirdPartyAddress, address newThirdPartyAddress)
NewThirdPartyFee
event NewThirdPartyFee(uint256 thirdPartyId, uint256 oldThirdPartyFee, uint256 newThirdPartyFee)
NewTransferDeadline
event NewTransferDeadline(uint256 oldTransferDeadline, uint256 newTransferDeadline)
NewTreasury
event NewTreasury(address oldTreasury, address newTreasury)
NewUnwrap
event NewUnwrap(bytes userScript, uint8 scriptType, address lockerTargetAddress, address indexed userTargetAddress, uint256 requestIdOfLocker, uint256 indexed deadline, uint256 thirdPartyId, address inputToken, uint256[3] amounts, uint256[4] fees)
NewWrappedNativeToken
event NewWrappedNativeToken(address oldWrappedNativeToken, address newWrappedNativeToken)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PaidUnwrap
event PaidUnwrap(address indexed lockerTargetAddress, uint256 requestIdOfLocker, bytes32 bitcoinTxId, uint256 bitcoinTxOutputIndex)
errors
ZeroAddress
error ZeroAddress()
creation bytecode
0x608060405234801561001057600080fd5b50615f6e80620000216000396000f3fe6080604052600436106101cf5760003560e01c80630e757850146101db57806317fcb39b146101fd5780631812adb6146102335780631876dec4146102575780631e236168146102775780631e7107c7146102b757806333453d15146102d75780633fea4367146102f7578063419cba7f1461031757806344dd6aa51461032d5780634782bc361461034057806350a058361461036057806359fd0b0c146103805780635c4f5f3e146103ad57806361d027b3146103cd57806370872aa5146103ed578063715018a61461040357806373532b2a146104185780637ed55748146104385780637f0f1817146104585780637ffe9a92146104785780638d3d78cd146104985780638d5fc1d4146104b85780638da5cb5b146104d85780638f9eb78b146104ed578063930a60e81461050d578063a9b682711461053a578063b14d353214610570578063b59589d114610590578063b74d0d35146105b0578063bed6a602146105c6578063c780c03f146105dc578063c805f68b146105ef578063cd5830431461060f578063cf54ce471461062f578063da058ae31461064f578063ea7326371461066f578063f0f4426014610682578063f2fde38b146106a2578063f47e2240146106c257600080fd5b366101d657005b600080fd5b3480156101e757600080fd5b506101fb6101f636600461547a565b6106f6565b005b34801561020957600080fd5b5060a65461021d906001600160a01b031681565b60405161022a9190615770565b60405180910390f35b34801561023f57600080fd5b5061024960075481565b60405190815260200161022a565b34801561026357600080fd5b5060015461021d906001600160a01b031681565b34801561028357600080fd5b506102a7610292366004615137565b600c6020526000908152604090205460ff1681565b604051901515815260200161022a565b3480156102c357600080fd5b506101fb6102d2366004615137565b610883565b3480156102e357600080fd5b506101fb6102f2366004614ef7565b6108f2565b34801561030357600080fd5b5061024961031236600461551c565b610963565b34801561032357600080fd5b5061024960085481565b61024961033b366004614f2f565b610a7f565b34801561034c57600080fd5b506101fb61035b366004615137565b610b25565b34801561036c57600080fd5b5060045461021d906001600160a01b031681565b34801561038c57600080fd5b5061024961039b366004615137565b60a46020526000908152604090205481565b3480156103b957600080fd5b506101fb6103c8366004615137565b610bbf565b3480156103d957600080fd5b5060035461021d906001600160a01b031681565b3480156103f957600080fd5b5061024960055481565b34801561040f57600080fd5b506101fb610d55565b34801561042457600080fd5b506101fb61043336600461528c565b610d5f565b34801561044457600080fd5b506101fb610453366004615137565b611385565b34801561046457600080fd5b506101fb610473366004614ef7565b61141e565b34801561048457600080fd5b506102a7610493366004615047565b6114b8565b3480156104a457600080fd5b5060025461021d906001600160a01b031681565b3480156104c457600080fd5b506101fb6104d336600461544b565b611510565b3480156104e457600080fd5b5061021d6115b4565b3480156104f957600080fd5b506101fb6105083660046155a5565b6115c3565b34801561051957600080fd5b50610249610528366004614ef7565b600b6020526000908152604090205481565b34801561054657600080fd5b5061021d610555366004615137565b60a5602052600090815260409020546001600160a01b031681565b34801561057c57600080fd5b506101fb61058b366004614ef7565b611628565b34801561059c57600080fd5b5060005461021d906001600160a01b031681565b3480156105bc57600080fd5b5061024960095481565b3480156105d257600080fd5b5061024960065481565b6101fb6105ea3660046152f1565b6116c2565b3480156105fb57600080fd5b506101fb61060a366004614ef7565b611840565b34801561061b57600080fd5b506101fb61062a366004615137565b6118da565b34801561063b57600080fd5b506101fb61064a366004615137565b6118fd565b34801561065b57600080fd5b506101fb61066a366004614ef7565b611998565b6102a761067d366004615167565b611a09565b34801561068e57600080fd5b506101fb61069d366004614ef7565b611d7a565b3480156106ae57600080fd5b506101fb6106bd366004614ef7565b611e14565b3480156106ce57600080fd5b506106e26106dd366004615047565b611e8d565b60405161022a989796959493929190615bb1565b600d54610100900460ff16158080156107165750600d54600160ff909116105b806107305750303b1580156107305750600d5460ff166001145b6107985760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600d805460ff1916600117905580156107bb57600d805461ff0019166101001790555b6107c3611f8a565b6107cb611fb9565b6107d48b610883565b6107dd8a611840565b6107e689611628565b6107ef88611d7a565b6107f88761141e565b61080186610bbf565b61080a85611385565b61081384610b25565b61081e6102f26115b4565b610827836118fd565b61083082611998565b801561087657600d805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b61088b611fe8565b60055481116108ed5760405162461bcd60e51b815260206004820152602860248201527f4275726e526f757465724c6f6769633a206c6f77207374617274696e67426c6f60448201526731b5a73ab6b132b960c11b606482015260840161078f565b600555565b6108fa611fe8565b6004546040517f68bf625687194a1bbeeccbaa327c37aa1f9940a3c6c9e8fe84f06f1dc14fd17691610939916001600160a01b03909116908490615784565b60405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600061096d612047565b6002546001600160a01b03166323b872dd33308a6040518463ffffffff1660e01b815260040161099f9392919061579e565b602060405180830381600087803b1580156109b957600080fd5b505af11580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f19190615072565b610a495760405162461bcd60e51b8152602060048201526024808201527f4275726e526f757465724c6f6769633a207472616e7366657246726f6d2066616044820152631a5b195960e21b606482015260840161078f565b600254600090610a68906001600160a01b031689808a8a8a8a8a6120a1565b915050610a756001607255565b9695505050505050565b6000610a89612047565b6000610a9a8e8e8e8e8e8e8e612548565b9050610b088d8d6000818110610ac057634e487b7160e01b600052603260045260246000fd5b905060200201358b8b6000818110610ae857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610afd9190614ef7565b838a8a8a8a8a612aa2565b915050610b156001607255565b9c9b505050505050505050505050565b610b2d611fe8565b806127101015610b7f5760405162461bcd60e51b815260206004820152601f60248201527f4275726e526f757465724c6f6769633a20696e76616c69642072657761726400604482015260640161078f565b7faa50b3683e42a13535a5b9c2c32780cccf956fb546b523a3542ac4ad8b544f6760085482604051610bb2929190615ba3565b60405180910390a1600855565b600080546040516353bcd1c960e11b815273428351462684f4c9df7ef60b35825471d6d7540a9163a779a39291610c02916001600160a01b031690600401615770565b60206040518083038186803b158015610c1a57600080fd5b505af4158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c52919061514f565b9050610c5c6115b4565b6001600160a01b0316336001600160a01b03161480610c7c575080600654105b610cc55760405162461bcd60e51b815260206004820152601a602482015279109d5c9b949bdd5d195c931bd9da58ce881b9bc81c195c9b5a5d60321b604482015260640161078f565b808211610d145760405162461bcd60e51b815260206004820152601d60248201527f4275726e526f757465724c6f6769633a206c6f7720646561646c696e65000000604482015260640161078f565b7f92c10a242ca42973030420e2ee32b3ba7818cc643f896958f620c606cf30041660065483604051610d47929190615ba3565b60405180910390a150600655565b610d5d611fe8565b565b610d67612047565b610d6f611fe8565b60015460405163aff2faa360e01b81526001600160a01b039091169063aff2faa390610da1908690869060040161591b565b60206040518083038186803b158015610db957600080fd5b505afa158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df19190615072565b610e0d5760405162461bcd60e51b815260040161078f90615ad6565b60015460405163626885b560e11b81526000916001600160a01b03169063c4d10b6a90610e40908790879060040161591b565b60206040518083038186803b158015610e5857600080fd5b505afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e909190614f13565b905060005b82518110156113745773428351462684f4c9df7ef60b35825471d6d7540a6315755789600a84868581518110610edb57634e487b7160e01b600052603260045260246000fd5b60209081029190910101516006546000546040516310889dc360e01b815273428351462684f4c9df7ef60b35825471d6d7540a916310889dc391610f2b916001600160a01b031690600401615770565b60206040518083038186803b158015610f4357600080fd5b505af4158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b919061514f565b6005546040516001600160e01b031960e089901b16815260048101969096526001600160a01b03909416602486015260448501929092526064840152608483015260a482015260c40160006040518083038186803b158015610fdc57600080fd5b505af4158015610ff0573d6000803e3d6000fd5b50506001546008546001600160a01b038681166000908152600a602052604090208851919093169450631697565b93508692612710929189908890811061104757634e487b7160e01b600052603260045260246000fd5b60200260200101518154811061106d57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600001546110899190615de7565b6110939190615dc7565b336001600160a01b0387166000908152600a6020526040902088518990889081106110ce57634e487b7160e01b600052603260045260246000fd5b6020026020010151815481106110f457634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160000154600a6000896001600160a01b03166001600160a01b0316815260200190815260200160002089888151811061114b57634e487b7160e01b600052603260045260246000fd5b60200260200101518154811061117157634e487b7160e01b600052603260045260246000fd5b600091825260209091206007909102016002015460405160e087901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094529184166044840152606483015291909116608482015260a401602060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190615072565b506001600160a01b0382166000818152600a60205260409020845185908490811061125757634e487b7160e01b600052603260045260246000fd5b60200260200101518154811061127d57634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160020160009054906101000a90046001600160a01b03166001600160a01b03167f58c23b4ae0617be275628875bcfd65759a441263099a256eeb27899fb5dd846d8787600a6000886001600160a01b03166001600160a01b0316815260200190815260200160002088878151811061131357634e487b7160e01b600052603260045260246000fd5b60200260200101518154811061133957634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016006015460405161135a9392919061592f565b60405180910390a38061136c81615ece565b915050610e95565b50506113806001607255565b505050565b61138d611fe8565b8061271010156113de5760405162461bcd60e51b815260206004820152601c60248201527b4275726e526f757465724c6f6769633a20696e76616c69642066656560201b604482015260640161078f565b7f7d205f60891f60851c61cd244ba387d72b6589e7c0ac41b9d909ab0ce2c2a53b60075482604051611411929190615ba3565b60405180910390a1600755565b611426611fe8565b806001600160a01b03811661144e5760405163d92e233d60e01b815260040160405180910390fd5b6002546040517f36a4c08a38b736dcecb6c328dba61238529620e83ccb23db2cc43cd34ec260969161148d916001600160a01b03909116908590615784565b60405180910390a150600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600a602052604081208054839081106114f057634e487b7160e01b600052603260045260246000fd5b600091825260209091206005600790920201015460ff1690505b92915050565b611518611fe8565b600082815260a56020526040908190205490517f1e73962bcff5b98a9ac70c9b0f71fbb31dc0f5a09348c6d3ceab164169a9e7299161157e9185916001600160a01b03169085909283526001600160a01b03918216602084015216604082015260600190565b60405180910390a1600091825260a5602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040546001600160a01b031690565b6115cb611fe8565b600082815260a46020526040908190205490517f188adabf806a6b6d814acc1dbd9f09e5a251c8c065d6285749a5824e4579b6459161160e918591908590615b8d565b60405180910390a1600091825260a4602052604090912055565b611630611fe8565b806001600160a01b0381166116585760405163d92e233d60e01b815260040160405180910390fd5b6001546040517ffa021c2ec0f46429a53e7f88b88065e40001f50c9d38b2e8b713beaf9828d4c391611697916001600160a01b03909116908590615784565b60405180910390a150600180546001600160a01b0319166001600160a01b0392909216919091179055565b6116ca612047565b6116d2611fe8565b6000611730896000815181106116f857634e487b7160e01b600052603260045260246000fd5b602002602001015189898760008151811061172357634e487b7160e01b600052603260045260246000fd5b6020026020010151612ab5565b905073428351462684f4c9df7ef60b35825471d6d7540a63441d3a21600160009054906101000a90046001600160a01b03168c8c60405180606001604052808e81526020018c81526020018b815250600c60065460008054906101000a90046001600160a01b03166005548a8e8e8e6040518d63ffffffff1660e01b81526004016117c69c9b9a99989796959493929190615801565b60006040518083038186803b1580156117de57600080fd5b505af41580156117f2573d6000803e3d6000fd5b5050505061182a878b838560028151811061181d57634e487b7160e01b600052603260045260246000fd5b6020026020010151612c1b565b506118356001607255565b505050505050505050565b611848611fe8565b806001600160a01b0381166118705760405163d92e233d60e01b815260040160405180910390fd5b6000546040517f4c28a3f61a715259c4dc930c23e7423b8fa52e13232c061a6e488729c66184f4916118af916001600160a01b03909116908590615784565b60405180910390a150600080546001600160a01b0319166001600160a01b0392909216919091179055565b6118e2611fe8565b6000908152600c60205260409020805460ff19166001179055565b60045433906001600160a01b031681146119575760405162461bcd60e51b815260206004820152601b60248201527a4275726e526f757465724c6f6769633a206e6f74206f7261636c6560281b604482015260640161078f565b7f890eb41e398fd9cf425695b34269b781ad56c257422859094a28db47fb78f1b36009548360405161198a929190615ba3565b60405180910390a150600955565b6119a0611fe8565b60a6546040517f4da8064030e901e42f6de0ab04f4c322d7936d0120503addfe8a51f127090689916119df916001600160a01b03909116908490615784565b60405180910390a160a680546001600160a01b0319166001600160a01b0392909216919091179055565b6000611a13612047565b60015460405163626885b560e11b81526000916001600160a01b03169063c4d10b6a90611a44908890600401615953565b60206040518083038186803b158015611a5c57600080fd5b505afa158015611a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a949190614f13565b9050336001600160a01b0382161480611ac057506004546001600160a01b0316336001600160a01b0316145b611adc5760405162461bcd60e51b815260040161078f90615ad6565b73428351462684f4c9df7ef60b35825471d6d7540a6344922b64896005548c600160009054906101000a90046001600160a01b03168a8a518a516040518863ffffffff1660e01b8152600401611b389796959493929190615c93565b60006040518083038186803b158015611b5057600080fd5b505af4158015611b64573d6000803e3d6000fd5b505050506000611b768d8d8d8d612ab5565b600054604051637ebc232760e01b815291925073428351462684f4c9df7ef60b35825471d6d7540a91637ebc232791611bc5916001600160a01b039091169085908e908e908e906004016157c2565b60206040518083038186803b158015611bdd57600080fd5b505af4158015611bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c159190615072565b611c615760405162461bcd60e51b815260206004820152601e60248201527f4275726e526f757465724c6f6769633a206e6f742066696e616c697a65640000604482015260640161078f565b6000611c71828b858f8a8a612de7565b905073428351462684f4c9df7ef60b35825471d6d7540a63191e28dc600c838f8b876040518663ffffffff1660e01b8152600401611cb3959493929190615a5d565b60206040518083038186803b158015611ccb57600080fd5b505af4158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190615072565b611d5b5760405162461bcd60e51b815260206004820152602360248201527f4275726e526f757465724c6f6769633a20696e76616c6964206275726e20707260448201526237b7b360e91b606482015260840161078f565b60019350505050611d6c6001607255565b9a9950505050505050505050565b611d82611fe8565b806001600160a01b038116611daa5760405163d92e233d60e01b815260040160405180910390fd5b6003546040517f567657fa3f286518b318f4a29870674f433f622fdfc819691acb13105b22822591611de9916001600160a01b03909116908590615784565b60405180910390a150600380546001600160a01b0319166001600160a01b0392909216919091179055565b611e1c611fe8565b6001600160a01b038116611e815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078f565b611e8a816132cb565b50565b600a6020528160005260406000208181548110611ea957600080fd5b600091825260209091206007909102018054600182015460028301546003840180549396509194506001600160a01b03169291611ee590615e99565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1190615e99565b8015611f5e5780601f10611f3357610100808354040283529160200191611f5e565b820191906000526020600020905b815481529060010190602001808311611f4157829003601f168201915b505050600484015460058501546006909501549394909360ff8083169450610100909204909116915088565b600d54610100900460ff16611fb15760405162461bcd60e51b815260040161078f90615b0b565b610d5d61331b565b600d54610100900460ff16611fe05760405162461bcd60e51b815260040161078f90615b0b565b610d5d61334b565b33611ff16115b4565b6001600160a01b031614610d5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161078f565b6002607254141561209a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161078f565b6002607255565b600154604051630f87661560e41b815260009173428351462684f4c9df7ef60b35825471d6d7540a9163f8766150916120f0918a918a916001600160a01b03909116908a908a90600401615966565b60006040518083038186803b15801561210857600080fd5b505af415801561211c573d6000803e3d6000fd5b5050505060008060006121678a88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250613372915050565b60025460015460405163095ea7b360e01b81529497509295509093506001600160a01b039081169263095ea7b3926121a59216908790600401615902565b602060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f79190615072565b506001546040516338463cff60e01b81526001600160a01b03909116906338463cff9061222c908a908a90889060040161592f565b602060405180830381600087803b15801561224657600080fd5b505af115801561225a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227e919061514f565b60015460405163626885b560e11b81529195506000916001600160a01b039091169063c4d10b6a906122b6908b908b9060040161591b565b60206040518083038186803b1580156122ce57600080fd5b505afa1580156122e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123069190614f13565b6000546040516310889dc360e01b81529192506123ad918d9188918e918e9173428351462684f4c9df7ef60b35825471d6d7540a916310889dc391612357916001600160a01b031690600401615770565b60206040518083038186803b15801561236f57600080fd5b505af4158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a7919061514f565b86613797565b604080516060810182528d815260208082018e905281830188905282516080810190935260095483528f9260009181016123e78a8a615e2f565b8152602080820189905260409182018890526001600160a01b0387166000908152600a9091522080549192509061242090600190615e2f565b8154811061243e57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600401546124573390565b6001600160a01b03167f6b5c22e69db87534a562352580358411dc7b2d98d24684765342f2ebf2dd8c318f8f88600a60008b6001600160a01b03166001600160a01b031681526020019081526020016000206001600a60008d6001600160a01b03166001600160a01b03168152602001908152602001600020805490506124de9190615e2f565b815481106124fc57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600601548f8a8a8a6040516125269897969594939291906159b4565b60405180910390a35050505050505098975050505050505050565b6001607255565b6002546000906001600160a01b03168484612564600182615e2f565b81811061258157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125969190614ef7565b6001600160a01b0316146125bc5760405162461bcd60e51b815260040161078f90615b56565b6002861461260c5760405162461bcd60e51b815260206004820152601e60248201527f4275726e526f757465724c6f6769633a2077726f6e6720616d6f756e74730000604482015260640161078f565b3415612759578686600081811061263357634e487b7160e01b600052603260045260246000fd5b9050602002013534146126885760405162461bcd60e51b815260206004820152601f60248201527f4275726e526f757465724c6f6769633a20696e76616c696420616d6f756e7400604482015260640161078f565b838360008181106126a957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906126be9190614ef7565b60a6546001600160a01b039081169116146126eb5760405162461bcd60e51b815260040161078f90615b56565b60a660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561273b57600080fd5b505af115801561274f573d6000803e3d6000fd5b5050505050612839565b8383600081811061277a57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061278f9190614ef7565b6001600160a01b03166323b872dd33308a8a60008181106127c057634e487b7160e01b600052603260045260246000fd5b905060200201356040518463ffffffff1660e01b81526004016127e59392919061579e565b602060405180830381600087803b1580156127ff57600080fd5b505af1158015612813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128379190615072565b505b8383600081811061285a57634e487b7160e01b600052603260045260246000fd5b905060200201602081019061286f9190614ef7565b6001600160a01b031663095ea7b3898989600081811061289f57634e487b7160e01b600052603260045260246000fd5b905060200201356040518363ffffffff1660e01b81526004016128c3929190615902565b602060405180830381600087803b1580156128dd57600080fd5b505af11580156128f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129159190615072565b50600080896001600160a01b031663b0bbcd888a8a600081811061294957634e487b7160e01b600052603260045260246000fd5b9050602002013560648c8c600181811061297357634e487b7160e01b600052603260045260246000fd5b90506020020135605a6129869190615de7565b6129909190615dc7565b8989308a8e6040518863ffffffff1660e01b81526004016129b79796959493929190615c14565b600060405180830381600087803b1580156129d157600080fd5b505af11580156129e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a0d919081019061508e565b9150915081612a5e5760405162461bcd60e51b815260206004820181905260248201527f4275726e526f757465724c6f6769633a2065786368616e6765206661696c6564604482015260640161078f565b8060018251612a6d9190615e2f565b81518110612a8b57634e487b7160e01b600052603260045260246000fd5b602002602001015192505050979650505050505050565b600080611d6c898b8a8a8a8a8a8a6120a1565b600080612aca612ac58683613967565b61398b565b9050612adb62ffffff198216613ae1565b15612b255760405162461bcd60e51b815260206004820152601a602482015279109a5d18dbda5b92195b1c195c8e881d9a5b881a5cc81b9d5b1b60321b604482015260640161078f565b6000600287878787604051602001612b409493929190615701565b60408051601f1981840301815290829052612b5a91615754565b602060405180830381855afa158015612b77573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612b9a919061514f565b90506000600282604051602001612bb391815260200190565b60408051601f1981840301815290829052612bcd91615754565b602060405180830381855afa158015612bea573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612c0d919061514f565b93505050505b949350505050565b6000612c2685613aed565b60015460405163626885b560e11b81526001600160401b039290921692506000916001600160a01b039091169063c4d10b6a90612c67908890600401615953565b60206040518083038186803b158015612c7f57600080fd5b505afa158015612c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb79190614f13565b6001546008549192506001600160a01b03169063b734de2690839061271090612ce09087615de7565b612cea9190615dc7565b3360405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252909116604482015260648101859052608401602060405180830381600087803b158015612d4357600080fd5b505af1158015612d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7b9190615072565b507f7ff138134e34ccab071315c38e38eec079f54726b890304ab46e2c5ab6f722bb8186858761271060085488612db29190615de7565b612dbc9190615dc7565b612dc69088615d3d565b604051612dd79594939291906158c1565b60405180910390a1505050505050565b60008080805b85518110156132be5780612e2a57848181518110612e1b57634e487b7160e01b600052603260045260246000fd5b60200260200101519150612edb565b81858281518110612e4b57634e487b7160e01b600052603260045260246000fd5b602002602001015111612eb05760405162461bcd60e51b815260206004820152602760248201527f4275726e526f757465724c6f6769633a20756e2d736f7274656420766f757420604482015266696e646578657360c81b606482015260840161078f565b848181518110612ed057634e487b7160e01b600052603260045260246000fd5b602002602001015191505b6000868281518110612efd57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600a60008a6001600160a01b03166001600160a01b031681526020019081526020016000208181548110612f4b57634e487b7160e01b600052603260045260246000fd5b600091825260209091206005600790920201015460ff16158015612fba57506001600160a01b0389166000908152600a6020526040902080548b919083908110612fa557634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016004015410155b156132ab5761312788878481518110612fe357634e487b7160e01b600052603260045260246000fd5b6020026020010151600a60008d6001600160a01b03166001600160a01b03168152602001908152602001600020848154811061302f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600301805461304b90615e99565b80601f016020809104026020016040519081016040528092919081815260200182805461307790615e99565b80156130c45780601f10613099576101008083540402835291602001916130c4565b820191906000526020600020905b8154815290600101906020018083116130a757829003601f168201915b5050506001600160a01b038f166000908152600a602052604090208054909250879150811061310357634e487b7160e01b600052603260045260246000fd5b906000526020600020906007020160050160019054906101000a900460ff16613b90565b6001600160401b0316935083600a60008b6001600160a01b03166001600160a01b03168152602001908152602001600020828154811061317757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600702016001015414156132ab576001600160a01b0389166000908152600a60205260409020805460019190839081106131cb57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600790910201600501805460ff19169115159190911790556131f8856001615d3d565b6001600160a01b038a166000818152600a60205260409020805492975090917f7b8cb33b1d4dc1e5d05c58e9945c383eb161ac22029c5b963989d08c3d0ef4da91908490811061325857634e487b7160e01b600052603260045260246000fd5b9060005260206000209060070201600601548d89868151811061328b57634e487b7160e01b600052603260045260246000fd5b60200260200101516040516132a293929190615b8d565b60405180910390a25b50806132b681615ece565b915050612ded565b5050509695505050505050565b604080546001600160a01b038381166001600160a01b031983168117845592519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600d54610100900460ff166133425760405162461bcd60e51b815260040161078f90615b0b565b610d5d336132cb565b600d54610100900460ff166125415760405162461bcd60e51b815260040161078f90615b0b565b6000806000612710600754876133889190615de7565b6133929190615dc7565b600085815260a46020526040902054909250612710906133b29088615de7565b6133bc9190615dc7565b600954909150816133cd8489615e2f565b6133d79190615e2f565b6133e19190615e2f565b92506103e88310156134335760405162461bcd60e51b815260206004820152601b60248201527a109d5c9b949bdd5d195c931bd9da58ce881b1bddc8185b5bdd5b9d602a1b604482015260640161078f565b81156135195760025460035460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261346f929116908690600401615902565b602060405180830381600087803b15801561348957600080fd5b505af115801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190615072565b6135195760405162461bcd60e51b8152602060048201526024808201527f4275726e526f757465724c6f6769633a20666565207472616e736665722066616044820152631a5b195960e21b606482015260840161078f565b801561361957600254600085815260a560205260409081902054905163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92613562929116908590600401615902565b602060405180830381600087803b15801561357c57600080fd5b505af1158015613590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b49190615072565b6136195760405162461bcd60e51b815260206004820152603060248201527f4275726e526f757465724c6f6769633a2074686972642070617274792066656560448201526f081d1c985b9cd9995c8819985a5b195960821b606482015260840161078f565b6009541561378e5760015460405163626885b560e11b81526000916001600160a01b03169063c4d10b6a90613652908990600401615953565b60206040518083038186803b15801561366a57600080fd5b505afa15801561367e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a29190614f13565b60025460095460405163a9059cbb60e01b81529293506001600160a01b039091169163a9059cbb916136d991859190600401615902565b602060405180830381600087803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190615072565b61378c5760405162461bcd60e51b815260206004820152602c60248201527f4275726e526f757465724c6f6769633a206e6574776f726b206665652074726160448201526b1b9cd9995c8819985a5b195960a21b606482015260840161078f565b505b93509350939050565b604080516101008101825260006080820181905260a0820181905260c0820181815260e083019190915288825260208201889052339282019290925260608101869052908460058111156137fb57634e487b7160e01b600052602160045260246000fd5b9081600581111561381c57634e487b7160e01b600052602160045260246000fd5b90525060065461382c9084615d3d565b6080820152600060a082018190526001600160a01b038316808252600b6020818152604084205460e086018190529290935290915261386c906001615d3d565b6001600160a01b038381166000908152600b6020908152604080832094909455600a81528382208054600180820183559184529282902086516007909402019283558582015190830155928401516002820180546001600160a01b03191691909316179091556060830151805184936138ec926003850192910190614c65565b506080820151600482015560a08201516005808301805492151560ff1984168117825560c086015193919261ff001990911661ffff19909216919091179061010090849081111561394d57634e487b7160e01b600052602160045260246000fd5b021790555060e08201518160060155505050505050505050565b81516000906020840161398264ffffffffff85168284613e04565b95945050505050565b600081816139a1815b62ffffff19841690613e4b565b506139b162ffffff198516613f25565b6001600160601b03166139cd576139c6613f34565b9250613ada565b60006139da856000613f3c565b905060006139ed62ffffff198716613f25565b6001600160601b031690506001600160401b038216613a1757613a0e613f34565b94505050613ada565b6000613a2283614085565b60ff16905060005b836001600160401b0316811015613aa057828210613a5557613a4a613f34565b965050505050613ada565b6000613a75613a648486615e2f565b60055b62ffffff198c1691906140e3565b9050613a808161410d565b613a8a9084615d3d565b9250508080613a9890615ece565b915050613a2a565b50818114613aba57613ab0613f34565b9550505050613ada565b613ad460065b60d81b6301000000600160d81b0389161790565b95505050505b5050919050565b62ffffff199081161490565b600080613b02613afd8483613967565b614161565b9050613b1362ffffff198216613ae1565b15613b305760405162461bcd60e51b815260040161078f90615aa1565b600080613b3e836000613f3c565b6001600160401b0316905060005b81811015613b8757613b5e8482614262565b9250613b6983614379565b613b739086615d55565b945080613b7f81615ece565b915050613b4c565b50505050919050565b600080613ba0613afd8783613967565b9050613bb162ffffff198216613ae1565b15613bce5760405162461bcd60e51b815260040161078f90615aa1565b6000613bda8287614262565b90506000613be78261439e565b90506005856005811115613c0b57634e487b7160e01b600052602160045260246000fd5b1415613c7057613c2462ffffff198216600260206143ef565b604051602001613c3691815260200190565b60405160208183030381529060405280519060200120868051906020012014613c60576000613c69565b613c6982614379565b9350613df9565b6000856005811115613c9257634e487b7160e01b600052602160045260246000fd5b1415613cab57613c2462ffffff198216600160206143ef565b6001856005811115613ccd57634e487b7160e01b600052602160045260246000fd5b1415613d0757613ce462ffffff198216600361451d565b604051602001613c36919060609190911b6001600160601b031916815260140190565b6002856005811115613d2957634e487b7160e01b600052602160045260246000fd5b1415613d4057613ce462ffffff198216600261451d565b6003856005811115613d6257634e487b7160e01b600052602160045260246000fd5b1415613d7957613ce462ffffff198216600261451d565b6004856005811115613d9b57634e487b7160e01b600052602160045260246000fd5b1415613df957613db462ffffff198216600260206143ef565b604051602001613dc691815260200190565b60405160208183030381529060405280519060200120868051906020012014613df0576000612c0d565b612c0d82614379565b505050949350505050565b600080613e118385615d3d565b9050604051811115613e21575060005b80613e335762ffffff19915050613e44565b5050606083811b8317901b811760181b5b9392505050565b6000613e57838361452b565b613f1e576000613e76613e6a8560d81c90565b64ffffffffff1661454e565b9150506000613e8b8464ffffffffff1661454e565b6040517f5479706520617373657274696f6e206661696c65642e20476f7420307800000060208201526001600160b01b031960b086811b8216603d8401526c05c408af0e0cac6e8cac84060f609b1b604784015283901b16605482015290925060009150605e015b60405160208183030381529060405290508060405162461bcd60e51b815260040161078f9190615953565b5090919050565b60181c6001600160601b031690565b62ffffff1990565b600080613f5162ffffff1985168460016145fa565b905060fc8111613f6c57613f648161462a565b91505061150a565b8060fd1415613fd257613f9a613f95613f86856001615d3d565b62ffffff198716906002614696565b61462a565b9150613fa582614085565b60ff16600314613fcd57613fcb613fc662ffffff19861685600360006147d9565b61483f565b505b61407e565b8060fe141561402757613ffb613f95613fec856001615d3d565b62ffffff198716906004614696565b915061400682614085565b60ff16600514613fcd57613fcb613fc662ffffff19861685600560006147d9565b8060ff141561407e57614050613f95614041856001615d3d565b62ffffff198716906008614696565b915061405b82614085565b60ff1660091461407e5761407c613fc662ffffff19861685600960006147d9565b505b5092915050565b600060fc826001600160401b0316116140a057506001919050565b61ffff826001600160401b0316116140ba57506003919050565b63ffffffff826001600160401b0316116140d657506005919050565b506009919050565b919050565b6000612c1384846140f387613f25565b6001600160601b03166141069190615e2f565b85856147d9565b600081600561411b81613994565b506000614129856024613f3c565b9050806001600160401b031661413e82614085565b60ff1661414b9190615d3d565b614156906024615d3d565b613982906004615d3d565b6000818161416e81613994565b5061417e62ffffff198516613f25565b6001600160601b0316614193576139c6613f34565b60006141a0856000613f3c565b905060006141b362ffffff198716613f25565b6001600160601b031690506001600160401b0382166141d457613a0e613f34565b60006141df83614085565b60ff16905060005b836001600160401b03168110156142485782821061420757613a4a613f34565b600061421d6142168486615e2f565b600e613a67565b9050614228816148c7565b6142329084615d3d565b925050808061424090615ece565b9150506141e7565b5081811461425857613ab0613f34565b613ad4600f613ac0565b600082600f61427081613994565b50600061427e866000613f3c565b6001600160401b03169050600061429a62ffffff198816613f25565b6001600160601b031690508186106142e85760405162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015260640161078f565b60006142f383614085565b60ff1690506000805b88811015614349576143206143118486615e2f565b62ffffff198c1690600e6140e3565b915061432b826148c7565b6143359084615d3d565b9250614342600182615d3d565b90506142fc565b506143576142168385615e2f565b90506000614364826148c7565b9050611d6c62ffffff198b168483600d6147d9565b600081600d61438781613994565b50612c13613f9562ffffff19861660006008614696565b600081600d6143ac81613994565b5060006143ba856008613f3c565b90506139826143c882614085565b6143d3906008615d80565b62ffffff1987169060ff166001600160401b03841660076147d9565b600060ff821661440157506000613e44565b61440a84613f25565b6001600160601b031661442060ff841685615d3d565b11156144705761445761443285614910565b6001600160601b031661444486613f25565b6001600160601b0316858560ff1661491f565b60405162461bcd60e51b815260040161078f9190615953565b60208260ff1611156144e75760405162461bcd60e51b815260206004820152603a60248201527f54797065644d656d566965772f696e646578202d20417474656d7074656420746044820152796f20696e646578206d6f7265207468616e20333220627974657360301b606482015260840161078f565b6008820260006144f686614910565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b6000613e44838360146145fa565b60008164ffffffffff1661453f8460d81c90565b64ffffffffff16149392505050565b600080601f5b600f8160ff1611156145ac57600061456d826008615e06565b60ff1685901c905061457e81614a49565b61ffff16841793508160ff1660101461459957601084901b93505b506145a5600182615e46565b9050614554565b50600f5b60ff8160ff1610156145f45760ff600882021684901c6145cf81614a49565b61ffff16831792508160ff166000146145ea57601083901b92505b50600019016145b0565b50915091565b6000614607826020615e46565b614612906008615e06565b60ff166146208585856143ef565b901c949350505050565b60006001600160401b038211156146925760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b606482015260840161078f565b5090565b6000612c136146a68585856143ef565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff161790506040816001600160401b03600160801b03600160c01b0316901b604082901c6001600160401b03600160801b03600160c01b0316179050608081901b608082901c179050919050565b6000806147e586614910565b6001600160601b031690506147f986614a7b565b846148048784615d3d565b61480e9190615d3d565b11156148215762ffffff19915050612c13565b61482b8582615d3d565b9050610a758364ffffffffff168286613e04565b6060600061487d6148788261486a61485c62ffffff198816613f25565b6001600160601b0316614aa8565b62ffffff19871691906145fa565b61454e565b6040517a09cdedc5adad2dcd2dac2d840ecc2e440d2dce85c408edee84060f602b1b60208201526001600160701b0319607083901b16603b82015290925060009150604d01613ef3565b600081600e6148d581613994565b5060006148e3856008613f3c565b9050806001600160401b03166148f882614085565b60ff166149059190615d3d565b613982906008615d3d565b60781c6001600160601b031690565b6060600061492c8661454e565b915050600061493a8661454e565b91505060006149488661454e565b91505060006149568661454e565b604080517f54797065644d656d566965772f696e646578202d204f76657272616e20746865602082015274040ecd2caee5c40a6d8d2c6ca40d2e640c2e84060f605b1b818301526001600160d01b031960d098891b811660558301526e040eed2e8d040d8cadccee8d04060f608b1b605b830181905297891b8116606a8301527f2e20417474656d7074656420746f20696e646578206174206f666673657420306070830152600f60fb1b609083015295881b861660918201526097810196909652951b90921660a68401525050601760f91b60ac8201528151808203608d01815260ad90910190915295945050505050565b6000614a5b60048360ff16901c614b09565b60ff1661ffff919091161760081b614a7282614b09565b60ff1617919050565b6000614a8682613f25565b614a8f83614910565b614a999190615da5565b6001600160601b031692915050565b600060ff8211156146925760405162461bcd60e51b815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2038604482015264206269747360d81b606482015260840161078f565b600060f08083179060ff82161415614b245750603092915050565b8060ff1660f11415614b395750603192915050565b8060ff1660f21415614b4e5750603292915050565b8060ff1660f31415614b635750603392915050565b8060ff1660f41415614b785750603492915050565b8060ff1660f51415614b8d5750603592915050565b8060ff1660f61415614ba25750603692915050565b8060ff1660f71415614bb75750603792915050565b8060ff1660f81415614bcc5750603892915050565b8060ff1660f91415614be15750603992915050565b8060ff1660fa1415614bf65750606192915050565b8060ff1660fb1415614c0b5750606292915050565b8060ff1660fc1415614c205750606392915050565b8060ff1660fd1415614c355750606492915050565b8060ff1660fe1415614c4a5750606592915050565b8060ff1660ff1415614c5f5750606692915050565b50919050565b828054614c7190615e99565b90600052602060002090601f016020900481019282614c935760008555614cd9565b82601f10614cac57805160ff1916838001178555614cd9565b82800160010185558215614cd9579182015b82811115614cd9578251825591602001919060010190614cbe565b506146929291505b808211156146925760008155600101614ce1565b80356140de81615f15565b60008083601f840112614d11578182fd5b5081356001600160401b03811115614d27578182fd5b6020830191508360208260051b8501011115614d4257600080fd5b9250929050565b600082601f830112614d59578081fd5b81356020614d6e614d6983615d1a565b615cea565b80838252828201915082860187848660051b8901011115614d8d578586fd5b855b85811015614db257614da082614e27565b84529284019290840190600101614d8f565b5090979650505050505050565b600082601f830112614dcf578081fd5b81356020614ddf614d6983615d1a565b80838252828201915082860187848660051b8901011115614dfe578586fd5b855b85811015614db257813584529284019290840190600101614e00565b80356140de81615f2a565b80356001600160e01b0319811681146140de57600080fd5b60008083601f840112614e50578182fd5b5081356001600160401b03811115614e66578182fd5b602083019150836020828501011115614d4257600080fd5b600082601f830112614e8e578081fd5b81356001600160401b03811115614ea757614ea7615eff565b614eba601f8201601f1916602001615cea565b818152846020838601011115614ece578283fd5b816020850160208301379081016020019190915292915050565b8035600681106140de57600080fd5b600060208284031215614f08578081fd5b8135613e4481615f15565b600060208284031215614f24578081fd5b8151613e4481615f15565b6000806000806000806000806000806000806101208d8f031215614f51578788fd5b614f5a8d614cf5565b9b506001600160401b0360208e01351115614f73578788fd5b614f838e60208f01358f01614d00565b909b509950614f9460408e01614e1c565b98506001600160401b0360608e01351115614fad578788fd5b614fbd8e60608f01358f01614d00565b909850965060808d013595506001600160401b0360a08e01351115614fe0578485fd5b614ff08e60a08f01358f01614e7e565b9450614ffe60c08e01614ee8565b93506001600160401b0360e08e01351115615017578283fd5b6150278e60e08f01358f01614e3f565b81945080935050506101008d013590509295989b509295989b509295989b565b60008060408385031215615059578182fd5b823561506481615f15565b946020939093013593505050565b600060208284031215615083578081fd5b8151613e4481615f2a565b600080604083850312156150a0578182fd5b82516150ab81615f2a565b602084810151919350906001600160401b038111156150c8578283fd5b8401601f810186136150d8578283fd5b80516150e6614d6982615d1a565b80828252848201915084840189868560051b8701011115615105578687fd5b8694505b83851015615127578051835260019490940193918501918501615109565b5080955050505050509250929050565b600060208284031215615148578081fd5b5035919050565b600060208284031215615160578081fd5b5051919050565b6000806000806000806000806000806101408b8d031215615186578384fd5b61518f8b614e27565b995060208b01356001600160401b03808211156151aa578586fd5b6151b68e838f01614e7e565b9a5060408d01359150808211156151cb578586fd5b6151d78e838f01614e7e565b99506151e560608e01614e27565b985060808d0135975060a08d0135915080821115615201578586fd5b61520d8e838f01614e7e565b965060c08d0135955060e08d0135915080821115615229578485fd5b6152358e838f01614e7e565b94506101008d013591508082111561524b578384fd5b6152578e838f01614dbf565b93506101208d013591508082111561526d578283fd5b5061527a8d828e01614dbf565b9150509295989b9194979a5092959850565b6000806000604084860312156152a0578081fd5b83356001600160401b03808211156152b6578283fd5b6152c287838801614e3f565b909550935060208601359150808211156152da578283fd5b506152e786828701614dbf565b9150509250925092565b60008060008060008060008060006101208a8c03121561530f578283fd5b89356001600160401b0380821115615325578485fd5b6153318d838e01614e7e565b9a5060208c0135915080821115615346578485fd5b6153528d838e01614d49565b995060408c0135915080821115615367578485fd5b6153738d838e01614e7e565b985060608c0135915080821115615388578485fd5b6153948d838e01614e7e565b975060808c01359150808211156153a9578485fd5b6153b58d838e01614e7e565b965060a08c01359150808211156153ca578485fd5b6153d68d838e01614e7e565b955060c08c01359150808211156153eb578485fd5b6153f78d838e01614d49565b945060e08c013591508082111561540c578384fd5b6154188d838e01614e7e565b93506101008c013591508082111561542e578283fd5b5061543b8c828d01614dbf565b9150509295985092959850929598565b6000806040838503121561545d578182fd5b82359150602083013561546f81615f15565b809150509250929050565b6000806000806000806000806000806101408b8d031215615499578384fd5b8a35995060208b01356154ab81615f15565b985060408b01356154bb81615f15565b975060608b01356154cb81615f15565b965060808b01356154db81615f15565b955060a08b0135945060c08b0135935060e08b013592506101008b013591506101208b013561550981615f15565b809150509295989b9194979a5092959850565b60008060008060008060a08789031215615534578384fd5b8635955060208701356001600160401b0380821115615551578586fd5b61555d8a838b01614e7e565b965061556b60408a01614ee8565b95506060890135915080821115615580578384fd5b5061558d89828a01614e3f565b979a9699509497949695608090950135949350505050565b600080604083850312156155b7578182fd5b50508035926020909101359150565b6001600160a01b03169052565b6000815180845260208085019450808401835b8381101561560c5781516001600160e01b031916875295820195908201906001016155e6565b509495945050505050565b6000826060810183835b600381101561565057838303875261563a8383516156b3565b6020978801979093509190910190600101615621565b509095945050505050565b6000815180845260208085019450808401835b8381101561560c5781518752958201959082019060010161566e565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526156cb816020860160208601615e69565b601f01601f19169290920160200192915050565b600681106156fd57634e487b7160e01b600052602160045260246000fd5b9052565b600063ffffffff60e01b80871683528551615723816004860160208a01615e69565b85519084019061573a816004840160208a01615e69565b919094169301600481019390935250506008019392505050565b60008251615766818460208701615e69565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60018060a01b038616815284602082015283604082015260a0606082015260006157ef60a08301856156b3565b90508260808301529695505050505050565b61580b818e6155c6565b6101806020820152600061582361018083018e6156b3565b8281036040840152615835818e6155d3565b90508281036060840152615849818d615617565b90508a60808401528960a084015261586460c084018a6155c6565b8760e08401528661010084015282810361012084015261588481876155d3565b905082810361014084015261589981866156b3565b90508281036101608401526158ae818561565b565b9f9e505050505050505050505050505050565b6001600160a01b038616815260a0602082018190526000906158e5908301876156b3565b604083019590955250606081019290925260809091015292915050565b6001600160a01b03929092168252602082015260400190565b602081526000612c1360208301848661568a565b60408152600061594360408301858761568a565b9050826020830152949350505050565b602081526000613e4460208301846156b3565b60808152600061597960808301886156b3565b61598660208401886156df565b6001600160a01b038616604084015282810360608401526159a881858761568a565b98975050505050505050565b60006101a08083526159c88184018c6156b3565b91505060206159d98184018b6156df565b6001600160a01b0389811660408501526060840189905260808401889052861660a084015260c083018560005b6003811015615a2357815183529183019190830190600101615a06565b50505061012083018460005b6004811015615a4c57815183529183019190830190600101615a2f565b505050509998505050505050505050565b85815284602082015260a060408201526000615a7c60a08301866156b3565b8281036060840152615a8e81866156b3565b9150508260808301529695505050505050565b6020808252601b908201527a109a5d18dbda5b92195b1c195c8e881d9bdd5d081a5cc81b9d5b1b602a1b604082015260600190565b6020808252601b908201527a213ab9372937baba32b92637b3b4b19d103737ba103637b1b5b2b960291b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252601d908201527f4275726e526f757465724c6f6769633a20696e76616c69642070617468000000604082015260600190565b9283526020830191909152604082015260600190565b918252602082015260400190565b888152602081018890526001600160a01b038716604082015261010060608201819052600090615be3838201896156b3565b91505085608083015284151560a0830152615c0160c08301856156df565b8260e08301529998505050505050505050565b878152602080820188905260c0604083018190528201869052600090879060e08401835b89811015615c66578335615c4b81615f15565b6001600160a01b031682529282019290820190600101615c38565b506001600160a01b039790971660608501525050506080810192909252151560a090910152949350505050565b878152602081018790526001600160e01b0319861660408201526001600160a01b038516606082015260e060808201819052600090615cd4908301866156b3565b60a08301949094525060c0015295945050505050565b604051601f8201601f191681016001600160401b0381118282101715615d1257615d12615eff565b604052919050565b60006001600160401b03821115615d3357615d33615eff565b5060051b60200190565b60008219821115615d5057615d50615ee9565b500190565b60006001600160401b03828116848216808303821115615d7757615d77615ee9565b01949350505050565b600060ff821660ff84168060ff03821115615d9d57615d9d615ee9565b019392505050565b60006001600160601b03828116848216808303821115615d7757615d77615ee9565b600082615de257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615615e0157615e01615ee9565b500290565b600060ff821660ff84168160ff0481118215151615615e2757615e27615ee9565b029392505050565b600082821015615e4157615e41615ee9565b500390565b600060ff821660ff841680821015615e6057615e60615ee9565b90039392505050565b60005b83811015615e84578181015183820152602001615e6c565b83811115615e93576000848401525b50505050565b600181811c90821680615ead57607f821691505b60208210811415614c5f57634e487b7160e01b600052602260045260246000fd5b6000600019821415615ee257615ee2615ee9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e8a57600080fd5b8015158114611e8a57600080fdfea2646970667358221220e60e24101ebd7401bbfc1ccb84b1433bbc8ceb5fd37ff60bbc306457134f216664736f6c63430008040033