0 txs
0 calls
constructor
No constructor.
functions
burners
viewfunction burners(address) view returns (bool)
burnRouter
viewfunction burnRouter() view returns (address)
collateralDecimal
viewfunction collateralDecimal(address) view returns (uint256)
collateralRatio
viewfunction collateralRatio() view returns (uint256)
exchangeConnector
viewfunction exchangeConnector() view returns (address)
getLockerCapacity
viewfunction getLockerCapacity(address _lockerTargetAddress) view returns (uint256 theLockerCapacity)
getLockerHealthFactor
viewfunction getLockerHealthFactor(address _lockerTargetAddress) view returns (uint256)
getLockerTargetAddress
viewfunction getLockerTargetAddress(bytes) view returns (address)
HEALTH_FACTOR
viewfunction HEALTH_FACTOR() view returns (uint256)
INACTIVATION_DELAY
viewfunction INACTIVATION_DELAY() view returns (uint256)
isLocker
viewfunction isLocker(bytes _lockerLockingScript) view returns (bool)
isLockerActive
viewfunction isLockerActive(address _lockerTargetAddress) view returns (bool)
libConstants
viewfunction libConstants() view returns (uint256 OneHundredPercent, uint256 HealthFactor, uint256 UpperHealthFactor, uint256 MaxLockerFee, uint256 NativeTokenDecimal, address NativeToken)
libParams
viewfunction libParams() view returns (address TeleportSystemToken, address teleBTC, address burnRouter, address exchangeConnector, address priceOracle, uint256 minRequiredTSTLockedAmount, uint256 minRequiredTNTLockedAmount, uint256 lockerPercentageFee, uint256 collateralRatio, uint256 liquidationRatio, uint256 priceWithDiscountRatio, uint256 inactivationDelay)
liquidationRatio
viewfunction liquidationRatio() view returns (uint256)
lockerCollateralToken
viewfunction lockerCollateralToken(address) view returns (address)
lockerInactivationTimestamp
viewfunction lockerInactivationTimestamp(address) view returns (uint256)
lockerLeavingAcceptance
viewfunction lockerLeavingAcceptance(address) view returns (bool)
lockerPercentageFee
viewfunction lockerPercentageFee() view returns (uint256)
lockerReliabilityFactor
viewfunction lockerReliabilityFactor(address) view returns (uint256)
lockersMapping
viewfunction lockersMapping(address) view returns (bytes lockerLockingScript, uint8 lockerScriptType, bytes lockerRescueScript, uint256 TSTLockedAmount, uint256 collateralTokenLockedAmount, uint256 netMinted, uint256 slashingTeleBTCAmount, uint256 reservedCollateralTokenForSlash, bool isLocker, bool isCandidate, bool isScriptHash)
MAX_LOCKER_FEE
viewfunction MAX_LOCKER_FEE() view returns (uint256)
minRequiredTNTLockedAmount
viewfunction minRequiredTNTLockedAmount() view returns (uint256)
minRequiredTSTLockedAmount
viewfunction minRequiredTSTLockedAmount() view returns (uint256)
minters
viewfunction minters(address) view returns (bool)
NATIVE_TOKEN_DECIMAL
viewfunction NATIVE_TOKEN_DECIMAL() view returns (uint256)
NATIVE_TOKEN
viewfunction NATIVE_TOKEN() view returns (address)
ONE_HUNDRED_PERCENT
viewfunction ONE_HUNDRED_PERCENT() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
priceOfOneUnitOfCollateralInBTC
viewfunction priceOfOneUnitOfCollateralInBTC(address _collateralToken, uint256 _collateralDecimal) view returns (uint256)
priceOracle
viewfunction priceOracle() view returns (address)
priceWithDiscountRatio
viewfunction priceWithDiscountRatio() view returns (uint256)
rewardDistributor
viewfunction rewardDistributor() view returns (address)
teleBTC
viewfunction teleBTC() view returns (address)
TeleportSystemToken
viewfunction TeleportSystemToken() view returns (address)
totalNumberOfCandidates
viewfunction totalNumberOfCandidates() view returns (uint256)
totalNumberOfLockers
viewfunction totalNumberOfLockers() view returns (uint256)
UPPER_HEALTH_FACTOR
viewfunction UPPER_HEALTH_FACTOR() view returns (uint256)
addBurner
nonpayablefunction addBurner(address _account)
addCollateral
payablefunction addCollateral(address _lockerTargetAddress, uint256 _addingCollateralTokenAmount) payable returns (bool)
addCollateralToken
nonpayablefunction addCollateralToken(address _token, uint256 _decimal)
addLocker
nonpayablefunction addLocker(address _lockerTargetAddress, uint256 _lockerReliabilityFactor) returns (bool)
addMinter
nonpayablefunction addMinter(address _account)
burn
nonpayablefunction burn(bytes _lockerLockingScript, uint256 _amount) returns (uint256)
buySlashedCollateralOfLocker
nonpayablefunction buySlashedCollateralOfLocker(address _lockerTargetAddress, uint256 _collateralAmount) returns (bool)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address _token, uint256 _amount)
initialize
nonpayablefunction initialize(address _teleBTC, address _priceOracle, address _burnRouter, uint256 _minRequiredTSTLockedAmount, uint256 _collateralRatio, uint256 _liquidationRatio, uint256 _lockerPercentageFee, uint256 _priceWithDiscountRatio)
liquidateLocker
nonpayablefunction liquidateLocker(address _lockerTargetAddress, uint256 _collateralAmount) returns (bool)
mint
nonpayablefunction mint(bytes _lockerLockingScript, address _receiver, uint256 _amount) returns (uint256)
pauseLocker
nonpayablefunction pauseLocker()
removeBurner
nonpayablefunction removeBurner(address _account)
removeCollateral
payablefunction removeCollateral(uint256 _removingCollateralTokenAmount) payable returns (bool)
removeMinter
nonpayablefunction removeMinter(address _account)
renounceOwnership
nonpayablefunction renounceOwnership()
requestActivation
nonpayablefunction requestActivation() returns (bool)
requestInactivation
nonpayablefunction requestInactivation() returns (bool)
requestToBecomeLocker
payablefunction requestToBecomeLocker(bytes _candidateLockingScript, address _collateralToken, uint256 _lockedTSTAmount, uint256 _lockedCollateralTokenAmount, uint8 _lockerScriptType, bytes _lockerRescueScript) payable returns (bool)
revokeRequest
nonpayablefunction revokeRequest() returns (bool)
selfRemoveLocker
nonpayablefunction selfRemoveLocker() returns (bool)
setBurnRouter
nonpayablefunction setBurnRouter(address _burnRouter)
setCollateralRatio
nonpayablefunction setCollateralRatio(uint256 _collateralRatio)
setLiquidationRatio
nonpayablefunction setLiquidationRatio(uint256 _liquidationRatio)
setLockerCollateralToken
nonpayablefunction setLockerCollateralToken(address lockerTargetAddress, address collateralToken)
setLockerPercentageFee
nonpayablefunction setLockerPercentageFee(uint256 _lockerPercentageFee)
setLockerReliabilityFactor
nonpayablefunction setLockerReliabilityFactor(address lockerTargetAddress, uint256 reliabilityFactor)
setMinRequiredTSTLockedAmount
nonpayablefunction setMinRequiredTSTLockedAmount(uint256 _minRequiredTSTLockedAmount)
setPriceOracle
nonpayablefunction setPriceOracle(address _priceOracle)
setPriceWithDiscountRatio
nonpayablefunction setPriceWithDiscountRatio(uint256 _priceWithDiscountRatio)
setTeleBTC
nonpayablefunction setTeleBTC(address _teleBTC)
setTST
nonpayablefunction setTST(address _TST)
slashIdleLocker
nonpayablefunction slashIdleLocker(address _lockerTargetAddress, uint256 _rewardAmount, address _slasher, uint256 _amount, address _recipient) returns (bool)
slashThiefLocker
nonpayablefunction slashThiefLocker(address _lockerTargetAddress, uint256 _rewardAmount, address _slasher, uint256 _amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPauseLocker
nonpayablefunction unPauseLocker()
events
ActivateLocker
event ActivateLocker(address indexed lockerTargetAddress, bytes lockerLockingScript, uint256 TSTLockedAmount, address collateralToken, uint256 collateralTokenLockedAmount, uint256 netMinted)
BurnByLocker
event BurnByLocker(address indexed lockerTargetAddress, uint256 burntAmount, uint256 lockerFee, uint256 burningTime)
BurnerAdded
event BurnerAdded(address indexed account)
BurnerRemoved
event BurnerRemoved(address indexed account)
CollateralAdded
event CollateralAdded(address indexed lockerTargetAddress, address indexed collateralToken, uint256 addedCollateral, uint256 totalCollateral, uint256 addingTime)
CollateralRemoved
event CollateralRemoved(address indexed lockerTargetAddress, address indexed collateralToken, uint256 removedCollateral, uint256 totalCollateral, uint256 removingTime)
Initialized
event Initialized(uint8 version)
LockerAdded
event LockerAdded(address indexed lockerTargetAddress, bytes lockerLockingScript, uint256 TSTLockedAmount, address indexed collateralToken, uint256 collateralTokenLockedAmount, uint256 reliabilityFactor, uint256 addingTime)
LockerLiquidated
event LockerLiquidated(address indexed lockerTargetAddress, address indexed liquidatorAddress, address collateralToken, uint256 collateralAmount, uint256 teleBTCAmount, uint256 liquidateTime)
LockerRemoved
event LockerRemoved(address indexed lockerTargetAddress, bytes lockerLockingScript, uint256 TSTUnlockedAmount, address indexed collateralToken, uint256 collateralTokenUnlockedAmount)
LockerSlashed
event LockerSlashed(address indexed lockerTargetAddress, address collateralToken, uint256 rewardAmount, address indexed rewardRecipient, uint256 amount, address indexed recipient, uint256 slashedCollateralAmount, uint256 slashTime, bool isForCCBurn)
LockerSlashedCollateralSold
event LockerSlashedCollateralSold(address indexed lockerTargetAddress, address indexed buyerAddress, address indexed collateralToken, uint256 slashingAmount, uint256 teleBTCAmount, uint256 slashingTime)
MintByLocker
event MintByLocker(address indexed lockerTargetAddress, address indexed receiver, uint256 mintedAmount, uint256 lockerFee, uint256 mintingTime)
MinterAdded
event MinterAdded(address indexed account)
MinterRemoved
event MinterRemoved(address indexed account)
NewBurnRouter
event NewBurnRouter(address oldBurnRouter, address newBurnRouter)
NewCollateralRatio
event NewCollateralRatio(uint256 oldCollateralRatio, uint256 newCollateralRatio)
NewCollateralToken
event NewCollateralToken(address token, uint256 decimal)
NewLiquidationRatio
event NewLiquidationRatio(uint256 oldLiquidationRatio, uint256 newLiquidationRatio)
NewLockerPercentageFee
event NewLockerPercentageFee(uint256 oldLockerPercentageFee, uint256 newLockerPercentageFee)
NewMinRequiredTNTLockedAmount
event NewMinRequiredTNTLockedAmount(uint256 oldMinRequiredTNTLockedAmount, uint256 newMinRequiredTNTLockedAmount)
NewMinRequiredTSTLockedAmount
event NewMinRequiredTSTLockedAmount(uint256 oldMinRequiredTSTLockedAmount, uint256 newMinRequiredTSTLockedAmount)
NewPriceOracle
event NewPriceOracle(address oldPriceOracle, address newPriceOracle)
NewPriceWithDiscountRatio
event NewPriceWithDiscountRatio(uint256 oldPriceWithDiscountRatio, uint256 newPriceWithDiscountRatio)
NewReliabilityFactor
event NewReliabilityFactor(address lockerTargetAddress, uint256 oldReliabilityFactor, uint256 newReliabilityFactor)
NewTeleBTC
event NewTeleBTC(address oldTeleBTC, address newTeleBTC)
NewTST
event NewTST(address oldTST, address newTST)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RequestAddLocker
event RequestAddLocker(address indexed lockerTargetAddress, bytes lockerLockingScript, uint256 TSTLockedAmount, address indexed collateralToken, uint256 collateralTokenLockedAmount)
RequestInactivateLocker
event RequestInactivateLocker(address indexed lockerTargetAddress, uint256 indexed inactivationTimestamp, bytes lockerLockingScript, uint256 TSTLockedAmount, address collateralToken, uint256 collateralTokenLockedAmount, uint256 netMinted)
RevokeAddLockerRequest
event RevokeAddLockerRequest(address indexed lockerTargetAddress, bytes lockerLockingScript, uint256 TSTLockedAmount, address indexed collateralToken, uint256 collateralTokenLockedAmount)
Unpaused
event Unpaused(address account)
errors
AlreadyHasRole
error AlreadyHasRole()
BurnFailed
error BurnFailed()
InsufficientFunds
error InsufficientFunds()
InvalidValue
error InvalidValue()
LockerActive
error LockerActive()
LockerNotActive
error LockerNotActive()
NotBurner
error NotBurner()
NotLocker
error NotLocker()
NotMinter
error NotMinter()
NotRequested
error NotRequested()
TransferFailed
error TransferFailed()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x608060405234801561001057600080fd5b50615faa80620000216000396000f3fe60806040526004361061034c5760003560e01c8063028468581461035157806303d41e0e1461037357806306e2415d146103b85780630c42cbc9146103d85780631697565b146103fb5780631775765f1461041b5780631dc4b09c146104315780631fcfe19c146104515780632630c12f146104715780632f5b04ac1461049e5780633092afd5146104b557806331f7d964146104d55780633237c158146104ea5780633794dc9b146104fd57806338463cff1461052a5780633fb99c201461054a57806343b9370714610580578063530e784f146105a057806354509b97146105c057806359bb9189146105d65780635c975abb146105eb5780635f73871e146106035780636060663e146106235780636136c21f14610643578063613e2e1e146106705780636369f8df1461068557806363908020146106985780636600203d146106ae5780636a030fc3146106ce5780636c32b2ec146106ee5780636d32395c1461070e5780636d75b9ee14610724578063709e147a14610737578063715018a6146107575780637597922d1461076c578063768ebb12146105c05780637da5f0da146107995780637f0f1817146107c957806383a9954f146107e957806388aa0a52146108095780638d3d78cd1461081f5780638da5cb5b1461083f5780638fe85fe714610854578063946ce8cd1461087457806395ccea671461089457806396ec39e8146108b4578063983b2d56146108d4578063a7cc34b5146108f4578063acc2166a1461090a578063af1ea7951461092a578063aff2faa314610961578063b291ec1314610981578063b430225814610997578063b4eae1cb146109ac578063b52cd3ec146109c2578063b734de26146109e2578063bc805d1d14610a02578063bd60e79414610a18578063c0924b8014610add578063c4d10b6a14610afd578063cdcbc87914610b3e578063d14948f814610ba8578063d5a38a9114610bc8578063dd0081c7146105c0578063df8fa43014610be8578063e85501d814610c08578063e955de4514610c1d578063ed110a9c14610c32578063f2fde38b14610c48578063f3e27c4f14610c68578063f44637ba14610c88578063f46eccc414610ca8578063f73e3a9514610cd8578063fe89f32a14610cf8578063ffc9f70414610d18575b600080fd5b34801561035d57600080fd5b5061037161036c366004614f40565b610d2d565b005b34801561037f57600080fd5b506103a361038e366004614f40565b60126020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156103c457600080fd5b506103716103d3366004614f5a565b610d7e565b3480156103e457600080fd5b506103ed601281565b6040519081526020016103af565b34801561040757600080fd5b506103a3610416366004615068565b610db4565b34801561042757600080fd5b506103ed60095481565b34801561043d57600080fd5b5061037161044c366004614f40565b611074565b34801561045d57600080fd5b506103ed61046c36600461511d565b611137565b34801561047d57600080fd5b50600454610491906001600160a01b031681565b6040516103af9190615680565b3480156104aa57600080fd5b506103ed6205460081565b3480156104c157600080fd5b506103716104d0366004614f40565b611417565b3480156104e157600080fd5b50610491600181565b6103a36104f8366004615312565b6114a1565b34801561050957600080fd5b506103ed610518366004614f40565b60ee6020526000908152604090205481565b34801561053657600080fd5b506103ed610545366004615220565b6116cb565b34801561055657600080fd5b50610491610565366004614f40565b60ef602052600090815260409020546001600160a01b031681565b34801561058c57600080fd5b506103a361059b366004614ffc565b61192e565b3480156105ac57600080fd5b506103716105bb366004614f40565b611c65565b3480156105cc57600080fd5b506103ed61271081565b3480156105e257600080fd5b506103a3611d09565b3480156105f757600080fd5b5060bc5460ff166103a3565b34801561060f57600080fd5b5061037161061e366004614ffc565b611e3e565b34801561062f57600080fd5b5061037161063e366004615312565b611eda565b34801561064f57600080fd5b506103ed61065e366004614f40565b600e6020526000908152604090205481565b34801561067c57600080fd5b50610371611f49565b6103a3610693366004615176565b611f5b565b3480156106a457600080fd5b506103ed60075481565b3480156106ba57600080fd5b506103716106c9366004615312565b6123e0565b3480156106da57600080fd5b506103a36106e9366004614f40565b612450565b3480156106fa57600080fd5b50600254610491906001600160a01b031681565b34801561071a57600080fd5b506103ed60065481565b6103a3610732366004614ffc565b6124aa565b34801561074357600080fd5b506103a3610752366004614ffc565b61260e565b34801561076357600080fd5b506103716127cc565b34801561077857600080fd5b506103ed610787366004614f40565b60f06020526000908152604090205481565b3480156107a557600080fd5b506103a36107b4366004614f40565b600f6020526000908152604090205460ff1681565b3480156107d557600080fd5b506103716107e4366004614f40565b6127d4565b3480156107f557600080fd5b506103ed610804366004614f40565b612878565b34801561081557600080fd5b506103ed600b5481565b34801561082b57600080fd5b50600154610491906001600160a01b031681565b34801561084b57600080fd5b50610491612949565b34801561086057600080fd5b5061037161086f366004615312565b612958565b34801561088057600080fd5b5061037161088f366004615312565b6129c8565b3480156108a057600080fd5b506103716108af366004614ffc565b612a37565b3480156108c057600080fd5b506103a36108cf366004614ffc565b612a95565b3480156108e057600080fd5b506103716108ef366004614f40565b613063565b34801561090057600080fd5b506103ed60055481565b34801561091657600080fd5b5060f154610491906001600160a01b031681565b34801561093657600080fd5b5061094a610945366004614f40565b61311a565b6040516103af9b9a99989796959493929190615784565b34801561096d57600080fd5b506103a361097c3660046150de565b613292565b34801561098d57600080fd5b506103ed600a5481565b3480156109a357600080fd5b506103a36132e0565b3480156109b857600080fd5b506103ed60085481565b3480156109ce57600080fd5b50600054610491906001600160a01b031681565b3480156109ee57600080fd5b506103a36109fd366004615025565b6133a6565b348015610a0e57600080fd5b506103ed6130d481565b348015610a2457600080fd5b50601954601a54601b54601c54601d54601e54601f54602054602154602254602354602454610a6d9b6001600160a01b039081169b81169a81169981169816969594939291908c565b604080516001600160a01b039d8e1681529b8d1660208d0152998c16998b0199909952968a1660608a015298909416608088015260a087019290925260c086015260e0850152610100840152610120830193909352610140820192909252610160810191909152610180016103af565b348015610ae957600080fd5b50600354610491906001600160a01b031681565b348015610b0957600080fd5b50610491610b18366004615269565b80516020818301810180516010825292820191909301209152546001600160a01b031681565b348015610b4a57600080fd5b50601354601454601554601654601754601854610b729594939291906001600160a01b031686565b60408051968752602087019590955293850192909252606084015260808301526001600160a01b031660a082015260c0016103af565b348015610bb457600080fd5b506103ed610bc3366004614ffc565b61363d565b348015610bd457600080fd5b506103ed610be3366004614f40565b6136cc565b348015610bf457600080fd5b50610371610c03366004614f8c565b61374e565b348015610c1457600080fd5b506103a36138ed565b348015610c2957600080fd5b50610371613d26565b348015610c3e57600080fd5b506103ed600c5481565b348015610c5457600080fd5b50610371610c63366004614f40565b613d36565b348015610c7457600080fd5b50610371610c83366004614ffc565b613daf565b348015610c9457600080fd5b50610371610ca3366004614f40565b613e39565b348015610cb457600080fd5b506103a3610cc3366004614f40565b60116020526000908152604090205460ff1681565b348015610ce457600080fd5b50610371610cf3366004614f40565b613ef0565b348015610d0457600080fd5b50610371610d13366004615312565b613f6b565b348015610d2457600080fd5b506103a3613fb8565b610d3561456e565b6001600160a01b038116600081815260126020526040808220805460ff19169055517f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e9190a250565b610d8661456e565b6001600160a01b03918216600090815260ef6020526040902080546001600160a01b03191691909216179055565b6000610dbe6145cd565b610dc6614627565b6001600160a01b038087166000908152600d6020908152604080832060ef83528184205490941680845260ee909252808320549051631bcc6d6960e31b815292938493731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9363de636b4893610e3993926019908e908d90600401615a0c565b604080518083038186803b158015610e5057600080fd5b505af4158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190615342565b6001600160a01b038a8116600090815260ef60205260409020549294509092501660011415610ed357610ec484610ebf8385615ea4565b61466d565b610ece868261466d565b611003565b6001600160a01b03808916600090815260ef60205260409020541663a9059cbb85610efe8486615ea4565b6040518363ffffffff1660e01b8152600401610f1b9291906156d2565b602060405180830381600087803b158015610f3557600080fd5b505af1158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6d91906150be565b506001600160a01b03808916600090815260ef60205260409081902054905163a9059cbb60e01b815291169063a9059cbb90610faf90899085906004016156d2565b602060405180830381600087803b158015610fc957600080fd5b505af1158015610fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100191906150be565b505b6001600160a01b03888116600081815260ef602052604090819020549051838816938a81169392600080516020615f558339815191529261105392919091169087908c908a904290600190615710565b60405180910390a460019250505061106b6001608a55565b95945050505050565b806001600160a01b03811661109c5760405163d92e233d60e01b815260040160405180910390fd5b6110a461456e565b6002546040517f51ea9f7356591c4833bcb294538a4db90cfa61b532eac2411e70ebfdff9f1bf1916110e3916001600160a01b03909116908590615694565b60405180910390a1600254611100906001600160a01b0316610d2d565b600280546001600160a01b0384166001600160a01b03199182168117909255601b80549091168217905561113390613e39565b5050565b6000826001600160a01b0381166111615760405163d92e233d60e01b815260040160405180910390fd5b6111696145cd565b611171614627565b3360009081526011602052604090205460ff166111a157604051633e34a41b60e21b815260040160405180910390fd5b6000601087876040516111b59291906155e5565b908152604051908190036020019020546001600160a01b031690506111d981612450565b6111f6576040516380bcdf5160e01b815260040160405180910390fd5b6001600160a01b038082166000818152600d6020908152604080832060ef83528184205490951680845260ee83528184205494845260f090925291829020549151631ec627b360e01b8152731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e94631ec627b3946112769491936013936019938a93918e90600401615b66565b60006040518083038186803b15801561128e57600080fd5b505af41580156112a2573d6000803e3d6000fd5b50506001546040516340c10f1960e01b81526001600160a01b0390911692506340c10f1991506112d890309088906004016156d2565b602060405180830381600087803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132a91906150be565b5060015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061135d90889088906004016156d2565b602060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af91906150be565b50846001600160a01b0316816001600160a01b03167f8ad706b338c5d2a20b0d038b5cfdaf2b2f943f43048723bde0dccdf129598a11866000426040516113f893929190615d4c565b60405180910390a38392505061140e6001608a55565b50949350505050565b61141f61456e565b6001600160a01b03811660009081526011602052604090205460ff1661145857604051633e34a41b60e21b815260040160405180910390fd5b6001600160a01b038116600081815260116020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b600081806114c257604051637c946ed760e01b815260040160405180910390fd5b6114ca6145cd565b336000818152600d60209081526040808320815160c08082018452601354825260145482860152601554828501526016546060808401919091526017546080808501919091526018546001600160a01b0390811660a08087019190915287516101808101895260195483168152601a548316818b0152601b548316818a0152601c54831694810194909452601d54821692840192909252601e5491830191909152601f5492820192909252855460e082015260215461010082015260225461012082015260235461014082015260245461016082015296865260f085528386205460ef86528487205490911680875260ee90955292909420546115d495919493919291908961478f565b6115dd33612450565b156115fb57604051631fefc40d60e01b815260040160405180910390fd5b33600090815260ef60205260409020546001600160a01b03166001141561162b57611626338461466d565b611651565b33600081815260ef6020526040902054611651916001600160a01b039091169085614900565b33600081815260ef6020908152604080832054600d909252918290206004015491516001600160a01b0390911692917ff38dac2f851b07d9c651f6721a0ab772c2dcdb3b7af3f8a38b013a5a6551837b916116af9188914290615d4c565b60405180910390a3600191506116c56001608a55565b50919050565b60006116d56145cd565b6116dd614627565b3360009081526012602052604090205460ff1661170d5760405163f019b1af60e01b815260040160405180910390fd5b6000601085856040516117219291906155e5565b908152604051908190036020019020546001546001600160a01b039182169250166323b872dd61174e3390565b30866040518463ffffffff1660e01b815260040161176e939291906156ae565b602060405180830381600087803b15801561178857600080fd5b505af115801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906150be565b6117dd576040516312171d8360e31b815260040160405180910390fd5b6001600160a01b0381166000908152600d60205260409020600501548381101561181a5760405163356680b760e01b815260040160405180910390fd5b6118248482615ea4565b6001600160a01b038381166000908152600d602052604090819020600501929092556001549151630852cd8d60e31b8152600481018790529116906342966c6890602401602060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ba91906150be565b6118d757604051631bc5aabf60e21b815260040160405180910390fd5b816001600160a01b03167f66fb54322c407b04a077a306e72cdd780f0f374ba5dac9f6901a56a6255bc34a8560004260405161191593929190615d4c565b60405180910390a250506001608a5550805b9392505050565b6000818061194f57604051637c946ed760e01b815260040160405180910390fd5b6119576145cd565b61195f614627565b6001600160a01b0384166000908152600d602052604080822090516201412760e01b8152731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9162014127916119ad91908890600401615c62565b60206040518083038186803b1580156119c557600080fd5b505af41580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd919061532a565b6001546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd90611a32903390309086906004016156ae565b602060405180830381600087803b158015611a4c57600080fd5b505af1158015611a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8491906150be565b611aa1576040516312171d8360e31b815260040160405180910390fd5b600154604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401602060405180830381600087803b158015611ae757600080fd5b505af1158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f91906150be565b506001600160a01b03858116600090815260ef60205260409020541660011415611b5257611b4d338561466d565b611be5565b6001600160a01b03858116600090815260ef60205260409020541663a9059cbb33866040518363ffffffff1660e01b8152600401611b919291906156d2565b602060405180830381600087803b158015611bab57600080fd5b505af1158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be391906150be565b505b6001600160a01b03858116600090815260ef602052604090205416336001600160a01b0316866001600160a01b03167f65f9ab20b9a3f1f824f2a5c4d1c1a8bcebf301234b63767c9cc70b01f81668c8878542604051611c4793929190615d4c565b60405180910390a46001925050611c5e6001608a55565b5092915050565b806001600160a01b038116611c8d5760405163d92e233d60e01b815260040160405180910390fd5b611c9561456e565b6004546040517fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e2291611cd4916001600160a01b03909116908590615694565b60405180910390a150600480546001600160a01b039092166001600160a01b03199283168117909155601d8054909216179055565b6000611d136145cd565b336000908152600d602052604090206008015460ff16611d4657604051631c12f2e960e01b815260040160405180910390fd5b336000908152600e602052604090205415611da55760405162461bcd60e51b815260206004820152601a602482015279131bd8dad95c9cce88185b1c9958591e481c995c5d595cdd195960321b60448201526064015b60405180910390fd5b611db26205460042615d62565b336000818152600e60209081526040808320859055600d808352818420600381015460ef85529483902054919093526004830154600584015492517f8182b13ac61f04ab77079b11ee12f4baaf75bf72023d25249903ed23a89e975595611e26959490936001600160a01b03169291615828565b60405180910390a3506001611e3b6001608a55565b90565b8080611e5d57604051637c946ed760e01b815260040160405180910390fd5b611e6561456e565b6001600160a01b038316600081815260f060209081526040918290205482519384529083015281018390527f361ade43c0f49aaa908c4b2681c1a214e911aef3dc524fa182e2905abe1c1ffa9060600160405180910390a1506001600160a01b03909116600090815260f06020526040902055565b611ee261456e565b6009548111611f0457604051632a9ffab760e21b815260040160405180910390fd5b7f1e29d1b5c8926360f3ac632d884775772b07f31fec4077d433e58ce823f9134760085482604051611f37929190615c62565b60405180910390a16008819055602155565b611f5161456e565b611f59614956565b565b6000866001600160a01b038116611f855760405163d92e233d60e01b815260040160405180910390fd5b611f8d6145cd565b731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e6317b4e32b600d60405180610140016040528060136040518060c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152505081526020016019604051806101800160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016003820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b82015481525050815260200160108f8f60405161217e9291906155e5565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b031681526020018c6001600160a01b0316815260200160ee60008e6001600160a01b03166001600160a01b031681526020019081526020016000205481526020018b81526020018a81526020018e8e8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200189600581111561225057634e487b7160e01b600052602160045260246000fd5b815260200188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040516001600160e01b031960e085901b1681526122af92919060040161589f565b60006040518083038186803b1580156122c757600080fd5b505af41580156122db573d6000803e3d6000fd5b505050508760ef60006122eb3390565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b03191692821692909217909155881660011461233a5761233a6001600160a01b0389163330896149a2565b6019546001600160a01b03161561236357612363336019546001600160a01b031690308a6149a2565b600b54612371906001615d62565b600b556001600160a01b038816336001600160a01b03167f3f0bf63ee63c9aa7634598066ac9872e91c9e1713d764ae0ef781a9413d73af48c8c8b8b6040516123bd9493929190615745565b60405180910390a3600191506123d36001608a55565b5098975050505050505050565b6123e861456e565b61271081111561240b57604051632a9ffab760e21b815260040160405180910390fd5b7f44c6802691f6adea249930369a511db979a5e9a3603bdb37ceee1036da80e9806007548260405161243e929190615c62565b60405180910390a16007819055602055565b6001600160a01b0381166000908152600e602052604081205461247557506001919050565b6001600160a01b0382166000908152600e602052604090205442101561249d57506001919050565b506000919050565b919050565b60006124b46145cd565b6001600160a01b038084166000908152600d6020908152604080832060ef90925291829020549151637e82487360e01b8152731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e93637e8248739361251793601393909289921690600401615ccd565b60006040518083038186803b15801561252f57600080fd5b505af4158015612543573d6000803e3d6000fd5b505050506001600160a01b03838116600090815260ef60205260409020541660011461259057612590336001600160a01b03808616600090815260ef6020526040902054169030856149a2565b33600090815260ef60209081526040808320546001600160a01b03878116808652600d909452938290206004015491519316927fb7b1cd4dbd3f7787dcc190657396c1db6ad94a5df8e5d669a8f907d031175205916125f3918791904290615d4c565b60405180910390a35060016126086001608a55565b92915050565b6000826001600160a01b0381166126385760405163d92e233d60e01b815260040160405180910390fd5b828061265757604051637c946ed760e01b815260040160405180910390fd5b61265f6145cd565b61266761456e565b6001600160a01b0385166000908152600d6020526040902060080154610100900460ff166126a7576040516294861760e21b815260040160405180910390fd5b6001600160a01b0385166000908152600d60205260409020600801805461ffff19166001908117909155600b546126de9190615ea4565b600b55600c546126ef906001615d62565b600c556001600160a01b0385166000908152600d6020526040908190209051869160109161271d9190615611565b908152604080516020928190038301812080546001600160a01b0319166001600160a01b03958616179055888416600081815260f085528381208a905560ef855283812054600d9095529290922060038101546004820154949095169492937fbd529f70cdff05eff7a5a8aad1d0b2926c1f644df27da30cb7de1f546909d16a936127ae939091908b904290615868565b60405180910390a3600192506127c46001608a55565b505092915050565b611f5961456e565b806001600160a01b0381166127fc5760405163d92e233d60e01b815260040160405180910390fd5b61280461456e565b6001546040517f36a4c08a38b736dcecb6c328dba61238529620e83ccb23db2cc43cd34ec2609691612843916001600160a01b03909116908590615694565b60405180910390a150600180546001600160a01b039092166001600160a01b03199283168117909155601a8054909216179055565b6001600160a01b038082166000818152600d6020908152604080832060ef83528184205490951680845260ee83528184205494845260f0909252808320549051630e233ebf60e21b81529294731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9463388cfafc946128f99492936013936019939092909190600401615bc3565b60206040518083038186803b15801561291157600080fd5b505af4158015612925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612608919061532a565b6058546001600160a01b031690565b61296061456e565b61271081111561298357604051632a9ffab760e21b815260040160405180910390fd5b7f5e4dd01049cdfe5a081b404bff8e27de919fd9c8ae2145007e0921ec227f207a600a54826040516129b6929190615c62565b60405180910390a1600a819055602355565b6129d061456e565b80600854116129f257604051632a9ffab760e21b815260040160405180910390fd5b7f883242c2a857ca527a432dfca231b1e49233fde2a96802809a0f3866e9f19e1360095482604051612a25929190615c62565b60405180910390a16009819055602255565b612a3f61456e565b612a476145cd565b6001600160a01b03821660011415612a6f57612a6a612a64612949565b8261466d565b612a8b565b612a8b612a7a612949565b6001600160a01b0384169083614900565b6111336001608a55565b60008180612ab657604051637c946ed760e01b815260040160405180910390fd5b612abe6145cd565b612ac6614627565b612ace61456e565b6001600160a01b038085166000818152600d6020908152604080832060ef83528184205490951680845260ee83528184205494845260f0909252808320549051635d6cad1f60e11b81529294731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9463bad95a3e94612b50949293601393601993909290918d91600401615c0e565b60206040518083038186803b158015612b6857600080fd5b505af4158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba0919061532a565b90506000600d6000876001600160a01b03166001600160a01b0316815260200190815260200160002060405180610160016040529081600082018054612be590615ef3565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1190615ef3565b8015612c5e5780601f10612c3357610100808354040283529160200191612c5e565b820191906000526020600020905b815481529060010190602001808311612c4157829003601f168201915b5050509183525050600182015460209091019060ff166005811115612c9357634e487b7160e01b600052602160045260246000fd5b6005811115612cb257634e487b7160e01b600052602160045260246000fd5b8152602001600282018054612cc690615ef3565b80601f0160208091040260200160405190810160405280929190818152602001828054612cf290615ef3565b8015612d3f5780601f10612d1457610100808354040283529160200191612d3f565b820191906000526020600020905b815481529060010190602001808311612d2257829003601f168201915b505050918352505060038201546020808301919091526004808401546040808501919091526005850154606085015260068501546080850152600785015460a085015260089094015460ff808216151560c08601526101008083048216151560e0870152620100009092041615159301929092526001600160a01b038a166000908152600d909152919091200154909150612ddb908690615ea4565b6001600160a01b038088166000908152600d6020526040902060040191909155600154612e0b91163330856149a2565b60015460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612e419291169086906004016156d2565b602060405180830381600087803b158015612e5b57600080fd5b505af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9391906150be565b50600254604080830151602084015184519251633fea436760e01b81526001600160a01b0390941693633fea436793612ed89388939092909190600090600401615d01565b602060405180830381600087803b158015612ef257600080fd5b505af1158015612f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2a919061532a565b506001600160a01b03868116600090815260ef60205260409020541660011415612f5d57612f58338661466d565b612ff0565b6001600160a01b03868116600090815260ef60205260409020541663a9059cbb33876040518363ffffffff1660e01b8152600401612f9c9291906156d2565b602060405180830381600087803b158015612fb657600080fd5b505af1158015612fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fee91906150be565b505b6001600160a01b03868116600081815260ef60209081526040918290205482519416845283018890528281018590524260608401525133927f19ac06de95d67912d84cd839d617200570c30562b34ba4f6a3a19fbd14a8f9a9919081900360800190a3600193505050611c5e6001608a55565b806001600160a01b03811661308b5760405163d92e233d60e01b815260040160405180910390fd5b61309361456e565b6001600160a01b03821660009081526011602052604090205460ff16156130cd576040516314571ee960e31b815260040160405180910390fd5b6001600160a01b038216600081815260116020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a25050565b600d6020526000908152604090208054819061313590615ef3565b80601f016020809104026020016040519081016040528092919081815260200182805461316190615ef3565b80156131ae5780601f10613183576101008083540402835291602001916131ae565b820191906000526020600020905b81548152906001019060200180831161319157829003601f168201915b5050506001840154600285018054949560ff9092169491935091506131d290615ef3565b80601f01602080910402602001604051908101604052809291908181526020018280546131fe90615ef3565b801561324b5780601f106132205761010080835404028352916020019161324b565b820191906000526020600020905b81548152906001019060200180831161322e57829003601f168201915b5050506003840154600485015460058601546006870154600788015460089098015496979396929550909350919060ff80821691610100810482169162010000909104168b565b6000600d6000601085856040516132aa9291906155e5565b9081526040805160209281900383019020546001600160a01b0316835290820192909252016000206008015460ff169392505050565b60006132ea6145cd565b336000908152600d602052604090206008015460ff1661331d57604051631c12f2e960e01b815260040160405180910390fd5b336000818152600e60209081526040808320839055600d808352818420600381015460ef85529483902054919093526004830154600584015492517f99776ecfc004a01cfaf5810ae30a9cb86ca4a5831f0a617dd3c4b461f906fc8695613391959490936001600160a01b03169291615828565b60405180910390a2506001611e3b6001608a55565b60006133b06145cd565b6133b8614627565b600060ef6000876001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050600080731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e631eac9f46600d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002060f060008c6001600160a01b03166001600160a01b0316815260200190815260200160002054601360198860ee60008b6001600160a01b03166001600160a01b03168152602001908152602001600020548e8d6040518963ffffffff1660e01b81526004016134ad989796959493929190615c70565b604080518083038186803b1580156134c457600080fd5b505af41580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190615342565b6001600160a01b038a8116600090815260ef602052604090205492945090925016600114156135345761352f868361466d565b6135c9565b6001600160a01b03808916600090815260ef60205260409081902054905163a9059cbb60e01b815291169063a9059cbb9061357590899086906004016156d2565b602060405180830381600087803b15801561358f57600080fd5b505af11580156135a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c791906150be565b505b6001600160a01b03888116600081815260ef602052604090205430928981169291600080516020615f558339815191529116868a6136078289615d62565b42600060405161361c96959493929190615710565b60405180910390a4600193505050506136356001608a55565b949350505050565b60405163e8de982560e01b8152600090731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9063e8de98259061367c90869086906019906004016156eb565b60206040518083038186803b15801561369457600080fd5b505af41580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611927919061532a565b6001600160a01b038082166000818152600d6020908152604080832060ef83528184205490951680845260ee83528184205494845260f090925280832054905163f7fdd5bf60e01b81529294731a002f7c2dcaa3179ec35f9ef6d2c4e5863be32e9463f7fdd5bf946128f99492936013936019938b9391929091600401615a4d565b602554610100900460ff161580801561376e5750602554600160ff909116105b806137885750303b158015613788575060255460ff166001145b6137eb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611d9c565b6025805460ff19166001179055801561380e576025805461ff0019166101001790555b6138166149c9565b61381e6149f8565b613826614a27565b61382f896127d4565b61383887611074565b61384188611c65565b61384a86613f6b565b61385385611eda565b61385c846129c8565b613865836123e0565b61386e82612958565b612710601381905560148190556130d46015556016556012601755601880546001600160a01b031916600117905580156138e2576025805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60006138f76145cd565b336000908152600d6020526040902060080154610100900460ff1661392e576040516294861760e21b815260040160405180910390fd5b336000908152600d60205260408082208151610160810190925280548290829061395790615ef3565b80601f016020809104026020016040519081016040528092919081815260200182805461398390615ef3565b80156139d05780601f106139a5576101008083540402835291602001916139d0565b820191906000526020600020905b8154815290600101906020018083116139b357829003601f168201915b5050509183525050600182015460209091019060ff166005811115613a0557634e487b7160e01b600052602160045260246000fd5b6005811115613a2457634e487b7160e01b600052602160045260246000fd5b8152602001600282018054613a3890615ef3565b80601f0160208091040260200160405190810160405280929190818152602001828054613a6490615ef3565b8015613ab15780601f10613a8657610100808354040283529160200191613ab1565b820191906000526020600020905b815481529060010190602001808311613a9457829003601f168201915b505050918352505060038201546020820152600482015460408201526005820154606082015260068201546080820152600782015460a082015260089091015460ff808216151560c08401526101008083048216151560e0850152620100009092041615159101529050600d6000336001600160a01b031681526020810191909152604001600090812090613b468282614e95565b60018201805460ff19169055613b60600283016000614e95565b506000600382018190556004820181905560058201819055600682018190556007820155600801805462ffffff19169055600b54613ba090600190615ea4565b600b556019546001600160a01b031615613bd157613bd1335b60608301516000546001600160a01b03169190614900565b33600090815260ef60205260409020546001600160a01b031660011415613c0557613c0033826080015161466d565b613c9a565b33600081815260ef602052604090819020546080840151915163a9059cbb60e01b81526001600160a01b039091169263a9059cbb92613c46926004016156d2565b602060405180830381600087803b158015613c6057600080fd5b505af1158015613c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9891906150be565b505b33600081815260ef6020526040908190205483516060850151608086015193516001600160a01b0390931694937f034f85a3d66ac9cab89b6466deabcf2efeaf8e0f57b917ea5aeae7cf9cf2169593613cf593929190615803565b60405180910390a3505033600090815260ef6020526040902080546001600160a01b03191690556001608a81905590565b613d2e61456e565b611f59614a56565b613d3e61456e565b6001600160a01b038116613da35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611d9c565b613dac81614a93565b50565b816001600160a01b038116613dd75760405163d92e233d60e01b815260040160405180910390fd5b613ddf61456e565b6001600160a01b038316600090815260ee602052604090819020839055517f229dd40a1182603dfbbdb7e80317ef3ab986422307a417d04ad62daabbad38d790613e2c90859085906156d2565b60405180910390a1505050565b806001600160a01b038116613e615760405163d92e233d60e01b815260040160405180910390fd5b613e6961456e565b6001600160a01b03821660009081526012602052604090205460ff1615613ea3576040516314571ee960e31b815260040160405180910390fd5b6001600160a01b038216600081815260126020526040808220805460ff19166001179055517f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b945609190a25050565b613ef861456e565b6000546040517f3e4520ab29fdd336aca22cca0657921e53eb42307038c1895b6b5e60eec3796f91613f37916001600160a01b03909116908490615694565b60405180910390a1600080546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b613f7361456e565b7f54d41b4e6bd425df3262062a56eab005e730ff6660f1c81895a70dcea8baf27160055482604051613fa6929190615c62565b60405180910390a16005819055601e55565b6000613fc26145cd565b336000908152600d602052604080822081516101608101909252805482908290613feb90615ef3565b80601f016020809104026020016040519081016040528092919081815260200182805461401790615ef3565b80156140645780601f1061403957610100808354040283529160200191614064565b820191906000526020600020905b81548152906001019060200180831161404757829003601f168201915b5050509183525050600182015460209091019060ff16600581111561409957634e487b7160e01b600052602160045260246000fd5b60058111156140b857634e487b7160e01b600052602160045260246000fd5b81526020016002820180546140cc90615ef3565b80601f01602080910402602001604051908101604052809291908181526020018280546140f890615ef3565b80156141455780601f1061411a57610100808354040283529160200191614145565b820191906000526020600020905b81548152906001019060200180831161412857829003601f168201915b505050918352505060038201546020820152600482015460408201526005820154606082015260068201546080820152600782015460a082015260089091015460ff808216151560c08401526101008083048216151560e085015262010000909204161515918101919091528101519091506141d457604051631c12f2e960e01b815260040160405180910390fd5b6141dd33612450565b156141fb57604051631fefc40d60e01b815260040160405180910390fd5b60015460a08201516040516323b872dd60e01b81526001600160a01b03909216916323b872dd9161423291339130916004016156ae565b602060405180830381600087803b15801561424c57600080fd5b505af1158015614260573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428491906150be565b5060015460a0820151604051630852cd8d60e31b81526001600160a01b03909216916342966c68916142bc9160040190815260200190565b602060405180830381600087803b1580156142d657600080fd5b505af11580156142ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430e91906150be565b5060c08101511561433257604051632a9ffab760e21b815260040160405180910390fd5b336000908152600d602052604090819020905160109161435191615611565b90815260405190819003602001902080546001600160a01b0319169055600d60006143793390565b6001600160a01b03168152602081019190915260400160009081209061439f8282614e95565b60018201805460ff191690556143b9600283016000614e95565b506000600382018190556004820181905560058201819055600682018190556007820155600801805462ffffff19169055600c546143f990600190615ea4565b600c556019546001600160a01b0316156144165761441633613bb9565b33600090815260ef60205260409020546001600160a01b0316600114156144545761444f338260e001518360800151610ebf9190615d62565b6144fc565b33600081815260ef602052604090205460e083015160808401516001600160a01b039092169263a9059cbb92909161448b91615d62565b6040518363ffffffff1660e01b81526004016144a89291906156d2565b602060405180830381600087803b1580156144c257600080fd5b505af11580156144d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144fa91906150be565b505b33600081815260ef6020526040908190205483516060850151608086015193516001600160a01b0390931694937f89e0136053e5fb3b6e55cac61cebd11e85b3cbc19a56d52fa34e152a94286f279361455793929190615803565b60405180910390a36001915050611e3b6001608a55565b33614577612949565b6001600160a01b031614611f595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611d9c565b6002608a5414156146205760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611d9c565b6002608a55565b60bc5460ff1615611f595760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611d9c565b804710156146bd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611d9c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461470a576040519150601f19603f3d011682016040523d82523d6000602084013e61470f565b606091505b50509050806147835760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401611d9c565b505050565b6001608a55565b600887015460ff166147d85760405162461bcd60e51b81526020600482015260126024820152712637b1b5b2b9399d103737903637b1b5b2b960711b6044820152606401611d9c565b60006147e5848488614ae5565b90506000886005015484600a6147fb9190615ddd565b8789610100015161480c9190615e85565b6148169190615e85565b895160048c0154819061482a908790615e85565b6148349190615e85565b61483e9190615e85565b6148489190615d7a565b6148529190615ea4565b905060008261486286600a615ddd565b61486c9084615e85565b6148769190615d7a565b9050808411156148dc5760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b6572733a206d6f7265207468616e206d61782072656d6f7661626c6560448201526a0818dbdb1b185d195c985b60aa1b6064820152608401611d9c565b838a600401546148ec9190615ea4565b8a6004018190555050505050505050505050565b6147838363a9059cbb60e01b848460405160240161491f9291906156d2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614be5565b61495e614cb7565b60bc805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516149989190615680565b60405180910390a1565b6149c3846323b872dd60e01b85858560405160240161491f939291906156ae565b50505050565b602554610100900460ff166149f05760405162461bcd60e51b8152600401611d9c906159c1565b611f59614d00565b602554610100900460ff16614a1f5760405162461bcd60e51b8152600401611d9c906159c1565b611f59614d30565b602554610100900460ff16614a4e5760405162461bcd60e51b8152600401611d9c906159c1565b611f59614d57565b614a5e614627565b60bc805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861498b3390565b605880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082614b2f5760405162461bcd60e51b8152602060048201526018602482015277131bd8dad95c9cce881b9bdd081dda1a5d195b1a5cdd195960421b6044820152606401611d9c565b60808201516001600160a01b03166316fac92a614b4d85600a615ddd565b60208501516040516001600160e01b031960e085901b168152600481019290925260248201879052600860448301526001600160a01b03808916606484015216608482015260a40160206040518083038186803b158015614bad57600080fd5b505afa158015614bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613635919061532a565b6000614c3a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614d8a9092919063ffffffff16565b8051909150156147835780806020019051810190614c5891906150be565b6147835760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611d9c565b60bc5460ff16611f595760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611d9c565b602554610100900460ff16614d275760405162461bcd60e51b8152600401611d9c906159c1565b611f5933614a93565b602554610100900460ff166147885760405162461bcd60e51b8152600401611d9c906159c1565b602554610100900460ff16614d7e5760405162461bcd60e51b8152600401611d9c906159c1565b60bc805460ff19169055565b6060613635848460008585843b614de35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611d9c565b600080866001600160a01b03168587604051614dff91906155f5565b60006040518083038185875af1925050503d8060008114614e3c576040519150601f19603f3d011682016040523d82523d6000602084013e614e41565b606091505b5091509150614e51828286614e5c565b979650505050505050565b60608315614e6b575081611927565b825115614e7b5782518084602001fd5b8160405162461bcd60e51b8152600401611d9c91906159ae565b508054614ea190615ef3565b6000825580601f10614eb1575050565b601f016020900490600052602060002090810190613dac91905b80821115614edf5760008155600101614ecb565b5090565b80356001600160a01b03811681146124a557600080fd5b60008083601f840112614f0b578081fd5b5081356001600160401b03811115614f21578182fd5b602083019150836020828501011115614f3957600080fd5b9250929050565b600060208284031215614f51578081fd5b61192782614ee3565b60008060408385031215614f6c578081fd5b614f7583614ee3565b9150614f8360208401614ee3565b90509250929050565b600080600080600080600080610100898b031215614fa8578384fd5b614fb189614ee3565b9750614fbf60208a01614ee3565b9650614fcd60408a01614ee3565b979a96995096976060810135975060808101359660a0820135965060c0820135955060e0909101359350915050565b6000806040838503121561500e578182fd5b61501783614ee3565b946020939093013593505050565b6000806000806080858703121561503a578384fd5b61504385614ee3565b93506020850135925061505860408601614ee3565b9396929550929360600135925050565b600080600080600060a0868803121561507f578081fd5b61508886614ee3565b94506020860135935061509d60408701614ee3565b9250606086013591506150b260808701614ee3565b90509295509295909350565b6000602082840312156150cf578081fd5b81518015158114611927578182fd5b600080602083850312156150f0578182fd5b82356001600160401b03811115615105578283fd5b61511185828601614efa565b90969095509350505050565b60008060008060608587031215615132578384fd5b84356001600160401b03811115615147578485fd5b61515387828801614efa565b9095509350615166905060208601614ee3565b9396929550929360400135925050565b60008060008060008060008060c0898b031215615191578384fd5b88356001600160401b03808211156151a7578586fd5b6151b38c838d01614efa565b909a5098508891506151c760208c01614ee3565b975060408b0135965060608b0135955060808b01359150600682106151ea578485fd5b90935060a08a013590808211156151ff578384fd5b5061520c8b828c01614efa565b999c989b5096995094979396929594505050565b600080600060408486031215615234578081fd5b83356001600160401b03811115615249578182fd5b61525586828701614efa565b909790965060209590950135949350505050565b60006020828403121561527a578081fd5b81356001600160401b0380821115615290578283fd5b818401915084601f8301126152a3578283fd5b8135818111156152b5576152b5615f3e565b604051601f8201601f19908116603f011681019083821181831017156152dd576152dd615f3e565b816040528281528760208487010111156152f5578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215615323578081fd5b5035919050565b60006020828403121561533b578081fd5b5051919050565b60008060408385031215615354578182fd5b505080516020909101519092909150565b6001600160a01b03169052565b6000815180845261538a816020860160208601615ec7565b601f01601f19169290920160200192915050565b600081546153ab81615ef3565b8085526020600183811680156153c857600181146153dc5761540a565b60ff1985168884015260408801955061540a565b866000528260002060005b858110156154025781548a82018601529083019084016153e7565b890184019650505b505050505092915050565b6006811061543357634e487b7160e01b600052602160045260246000fd5b9052565b8054825260018101546020830152600281015460408301526003810154606083015260048101546080830152600501546001600160a01b031660a090910152565b615483828251615365565b60208101516154956020840182615365565b5060408101516154a86040840182615365565b5060608101516154bb6060840182615365565b5060808101516154ce6080840182615365565b5060a0818101519083015260c0808201519083015260e0808201519083015261010080820151908301526101208082015190830152610140808201519083015261016090810151910152565b61552d826155288354615ebb565b615365565b61553a6001820154615ebb565b6155476020840182615365565b506155556002820154615ebb565b6155626040840182615365565b506155706003820154615ebb565b61557d6060840182615365565b5061558b6004820154615ebb565b6155986080840182615365565b50600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b015461016090910152565b8183823760009101908152919050565b60008251615607818460208701615ec7565b9190910192915050565b600080835461561f81615ef3565b60018281168015615637576001811461564857615674565b60ff19841687528287019450615674565b8786526020808720875b8581101561566b5781548a820152908401908201615652565b50505082870194505b50929695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0384168152602081018390526101c08101613635604083018461551a565b6001600160a01b039690961686526020860194909452604085019290925260608401526080830152151560a082015260c00190565b6060815283606082015283856080830137600080608086840101526080601f19601f870116830101905083602083015282604083015295945050505050565b60006101608083526157988184018f615372565b90506157a7602084018e615415565b82810360408401526157b9818d615372565b606084019b909b525050608081019790975260a087019590955260c086019390935260e0850191909152151561010084015215156101208301521515610140909101529392505050565b6060815260006158166060830186615372565b60208301949094525060400152919050565b60a08152600061583b60a083018861539e565b6020830196909652506001600160a01b039390931660408401526060830191909152608090910152919050565b60a08152600061587b60a083018861539e565b90508560208301528460408301528360608301528260808301529695505050505050565b828152604060208201526158f2604082018351805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0908101516001600160a01b0316910152565b6000602083015161010061590881850183615478565b6040850151915061591d610280850183615365565b606085015191506159326102a0850183615365565b60808501516102c085015260a08501516102e085015260c085015161030085015260e0850151915061034080610320860152615972610380860184615372565b9186015191925061598585820183615415565b5050610120840151838203603f19016103608501526159a48282615372565b9695505050505050565b6020815260006119276020830184615372565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8681526001600160a01b0386166020820152604081018590526102208101615a37606083018661551a565b6101e08201939093526102000152949350505050565b6102e0808252610160908201526000615a6a61044083018a61539e565b60018a015460ff16615a80610300850182615415565b508281036102df1901610320840152615a9c8160028c0161539e565b905060038a015461034084015260048a015461036084015260058a015461038084015260068a01546103a084015260078a01546103c084015260088a0154615aec6103e0850160ff831615159052565b615b01610400850160ff8360081c1615159052565b615b16610420850160ff8360101c1615159052565b509050615b266020830189615437565b615b3360e083018861551a565b615b41610260830187615365565b615b4f610280830186615365565b6102a08201939093526102c0015295945050505050565b8881526103008101615b7b602083018a615437565b615b8860e083018961551a565b6001600160a01b03968716610260830152949095166102808601526102a08501929092526102c08401526102e0909201919091529392505050565b8681526102c08101615bd86020830188615437565b615be560e083018761551a565b6001600160a01b03949094166102608201526102808101929092526102a0909101529392505050565b8781526102e08101615c236020830189615437565b615c3060e083018861551a565b6001600160a01b03959095166102608201526102808101939093526102a08301919091526102c0909101529392505050565b918252602082015260400190565b888152602081018890526103008101615c8c6040830189615437565b615c9a61010083018861551a565b6001600160a01b03959095166102808201526102a08101939093526102c08301919091526102e090910152949350505050565b6101208101615cdc8287615437565b60c082019490945260e08101929092526001600160a01b031661010090910152919050565b85815260a060208201526000615d1a60a0830187615372565b615d276040840187615415565b8281036060840152615d398186615372565b9150508260808301529695505050505050565b9283526020830191909152604082015260600190565b60008219821115615d7557615d75615f28565b500190565b600082615d9557634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115615dd5578160001904821115615dbb57615dbb615f28565b80851615615dc857918102915b93841c9390800290615d9f565b509250929050565b60006119278383600082615df357506001612608565b81615e0057506000612608565b8160018114615e165760028114615e2057615e3c565b6001915050612608565b60ff841115615e3157615e31615f28565b50506001821b612608565b5060208310610133831016604e8410600b8410161715615e5f575081810a612608565b615e698383615d9a565b8060001904821115615e7d57615e7d615f28565b029392505050565b6000816000190483118215151615615e9f57615e9f615f28565b500290565b600082821015615eb657615eb6615f28565b500390565b6001600160a01b031690565b60005b83811015615ee2578181015183820152602001615eca565b838111156149c35750506000910152565b600181811c90821680615f0757607f821691505b602082108114156116c557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5e4485631c54370ddbcded30559851c5dd670a232b8a7502b9d0b47ba9090d47a2646970667358221220df7dea8ea4d657f02d92668a42978213e2bcf3d0db65816e8c9dd40d0f46958564736f6c63430008040033