0 txs
2.4k calls
constructor
constructor()
functions
activeWalletPubKeyHash
viewfunction activeWalletPubKeyHash() view returns (bytes20)
contractReferences
viewfunction contractReferences() view returns (address bank, address relay, address ecdsaWalletRegistry, address reimbursementPool)
depositParameters
viewfunction depositParameters() view returns (uint64 depositDustThreshold, uint64 depositTreasuryFeeDivisor, uint64 depositTxMaxFee, uint32 depositRevealAheadPeriod)
deposits
viewfunction deposits(uint256 depositKey) view returns (tuple)
fraudChallenges
viewfunction fraudChallenges(uint256 challengeKey) view returns (tuple)
fraudParameters
viewfunction fraudParameters() view returns (uint96 fraudChallengeDepositAmount, uint32 fraudChallengeDefeatTimeout, uint96 fraudSlashingAmount, uint32 fraudNotifierRewardMultiplier)
getRedemptionWatchtower
viewfunction getRedemptionWatchtower() view returns (address)
governance
viewfunction governance() view returns (address)
isVaultTrusted
viewfunction isVaultTrusted(address vault) view returns (bool)
liveWalletsCount
viewfunction liveWalletsCount() view returns (uint32)
movedFundsSweepRequests
viewfunction movedFundsSweepRequests(uint256 requestKey) view returns (tuple)
movingFundsParameters
viewfunction movingFundsParameters() view returns (uint64 movingFundsTxMaxTotalFee, uint64 movingFundsDustThreshold, uint32 movingFundsTimeoutResetDelay, uint32 movingFundsTimeout, uint96 movingFundsTimeoutSlashingAmount, uint32 movingFundsTimeoutNotifierRewardMultiplier, uint16 movingFundsCommitmentGasOffset, uint64 movedFundsSweepTxMaxTotalFee, uint32 movedFundsSweepTimeout, uint96 movedFundsSweepTimeoutSlashingAmount, uint32 movedFundsSweepTimeoutNotifierRewardMultiplier)
pendingRedemptions
viewfunction pendingRedemptions(uint256 redemptionKey) view returns (tuple)
redemptionParameters
viewfunction redemptionParameters() view returns (uint64 redemptionDustThreshold, uint64 redemptionTreasuryFeeDivisor, uint64 redemptionTxMaxFee, uint64 redemptionTxMaxTotalFee, uint32 redemptionTimeout, uint96 redemptionTimeoutSlashingAmount, uint32 redemptionTimeoutNotifierRewardMultiplier)
spentMainUTXOs
viewfunction spentMainUTXOs(uint256 utxoKey) view returns (bool)
timedOutRedemptions
viewfunction timedOutRedemptions(uint256 redemptionKey) view returns (tuple)
treasury
viewfunction treasury() view returns (address)
txProofDifficultyFactor
viewfunction txProofDifficultyFactor() view returns (uint256)
walletParameters
viewfunction walletParameters() view returns (uint32 walletCreationPeriod, uint64 walletCreationMinBtcBalance, uint64 walletCreationMaxBtcBalance, uint64 walletClosureMinBtcBalance, uint32 walletMaxAge, uint64 walletMaxBtcTransfer, uint32 walletClosingPeriod)
wallets
viewfunction wallets(bytes20 walletPubKeyHash) view returns (tuple)
__ecdsaWalletCreatedCallback
nonpayablefunction __ecdsaWalletCreatedCallback(bytes32 ecdsaWalletID, bytes32 publicKeyX, bytes32 publicKeyY)
__ecdsaWalletHeartbeatFailedCallback
nonpayablefunction __ecdsaWalletHeartbeatFailedCallback(bytes32, bytes32 publicKeyX, bytes32 publicKeyY)
defeatFraudChallenge
nonpayablefunction defeatFraudChallenge(bytes walletPublicKey, bytes preimage, bool witness)
defeatFraudChallengeWithHeartbeat
nonpayablefunction defeatFraudChallengeWithHeartbeat(bytes walletPublicKey, bytes heartbeatMessage)
initialize
nonpayablefunction initialize(address _bank, address _relay, address _treasury, address _ecdsaWalletRegistry, address _reimbursementPool, uint96 _txProofDifficultyFactor)
notifyFraudChallengeDefeatTimeout
nonpayablefunction notifyFraudChallengeDefeatTimeout(bytes walletPublicKey, uint32[] walletMembersIDs, bytes preimageSha256)
notifyMovedFundsSweepTimeout
nonpayablefunction notifyMovedFundsSweepTimeout(bytes32 movingFundsTxHash, uint32 movingFundsTxOutputIndex, uint32[] walletMembersIDs)
notifyMovingFundsBelowDust
nonpayablefunction notifyMovingFundsBelowDust(bytes20 walletPubKeyHash, tuple mainUtxo)
notifyMovingFundsTimeout
nonpayablefunction notifyMovingFundsTimeout(bytes20 walletPubKeyHash, uint32[] walletMembersIDs)
notifyRedemptionTimeout
nonpayablefunction notifyRedemptionTimeout(bytes20 walletPubKeyHash, uint32[] walletMembersIDs, bytes redeemerOutputScript)
notifyRedemptionVeto
nonpayablefunction notifyRedemptionVeto(bytes20 walletPubKeyHash, bytes redeemerOutputScript)
notifyWalletCloseable
nonpayablefunction notifyWalletCloseable(bytes20 walletPubKeyHash, tuple walletMainUtxo)
notifyWalletClosingPeriodElapsed
nonpayablefunction notifyWalletClosingPeriodElapsed(bytes20 walletPubKeyHash)
receiveBalanceApproval
nonpayablefunction receiveBalanceApproval(address balanceOwner, uint256 amount, bytes redemptionData)
requestNewWallet
nonpayablefunction requestNewWallet(tuple activeWalletMainUtxo)
requestRedemption
nonpayablefunction requestRedemption(bytes20 walletPubKeyHash, tuple mainUtxo, bytes redeemerOutputScript, uint64 amount)
resetMovingFundsTimeout
nonpayablefunction resetMovingFundsTimeout(bytes20 walletPubKeyHash)
revealDeposit
nonpayablefunction revealDeposit(tuple fundingTx, tuple reveal)
revealDepositWithExtraData
nonpayablefunction revealDepositWithExtraData(tuple fundingTx, tuple reveal, bytes32 extraData)
setRedemptionWatchtower
nonpayablefunction setRedemptionWatchtower(address redemptionWatchtower)
setSpvMaintainerStatus
nonpayablefunction setSpvMaintainerStatus(address spvMaintainer, bool isTrusted)
setVaultStatus
nonpayablefunction setVaultStatus(address vault, bool isTrusted)
submitDepositSweepProof
nonpayablefunction submitDepositSweepProof(tuple sweepTx, tuple sweepProof, tuple mainUtxo, address vault)
submitFraudChallenge
payablefunction submitFraudChallenge(bytes walletPublicKey, bytes preimageSha256, tuple signature) payable
submitMovedFundsSweepProof
nonpayablefunction submitMovedFundsSweepProof(tuple sweepTx, tuple sweepProof, tuple mainUtxo)
submitMovingFundsCommitment
nonpayablefunction submitMovingFundsCommitment(bytes20 walletPubKeyHash, tuple walletMainUtxo, uint32[] walletMembersIDs, uint256 walletMemberIndex, bytes20[] targetWallets)
submitMovingFundsProof
nonpayablefunction submitMovingFundsProof(tuple movingFundsTx, tuple movingFundsProof, tuple mainUtxo, bytes20 walletPubKeyHash)
submitRedemptionProof
nonpayablefunction submitRedemptionProof(tuple redemptionTx, tuple redemptionProof, tuple mainUtxo, bytes20 walletPubKeyHash)
transferGovernance
nonpayablefunction transferGovernance(address newGovernance)
updateDepositParameters
nonpayablefunction updateDepositParameters(uint64 depositDustThreshold, uint64 depositTreasuryFeeDivisor, uint64 depositTxMaxFee, uint32 depositRevealAheadPeriod)
updateFraudParameters
nonpayablefunction updateFraudParameters(uint96 fraudChallengeDepositAmount, uint32 fraudChallengeDefeatTimeout, uint96 fraudSlashingAmount, uint32 fraudNotifierRewardMultiplier)
updateMovingFundsParameters
nonpayablefunction updateMovingFundsParameters(uint64 movingFundsTxMaxTotalFee, uint64 movingFundsDustThreshold, uint32 movingFundsTimeoutResetDelay, uint32 movingFundsTimeout, uint96 movingFundsTimeoutSlashingAmount, uint32 movingFundsTimeoutNotifierRewardMultiplier, uint16 movingFundsCommitmentGasOffset, uint64 movedFundsSweepTxMaxTotalFee, uint32 movedFundsSweepTimeout, uint96 movedFundsSweepTimeoutSlashingAmount, uint32 movedFundsSweepTimeoutNotifierRewardMultiplier)
updateRedemptionParameters
nonpayablefunction updateRedemptionParameters(uint64 redemptionDustThreshold, uint64 redemptionTreasuryFeeDivisor, uint64 redemptionTxMaxFee, uint64 redemptionTxMaxTotalFee, uint32 redemptionTimeout, uint96 redemptionTimeoutSlashingAmount, uint32 redemptionTimeoutNotifierRewardMultiplier)
updateTreasury
nonpayablefunction updateTreasury(address treasury)
updateWalletParameters
nonpayablefunction updateWalletParameters(uint32 walletCreationPeriod, uint64 walletCreationMinBtcBalance, uint64 walletCreationMaxBtcBalance, uint64 walletClosureMinBtcBalance, uint32 walletMaxAge, uint64 walletMaxBtcTransfer, uint32 walletClosingPeriod)
events
DepositParametersUpdated
event DepositParametersUpdated(uint64 depositDustThreshold, uint64 depositTreasuryFeeDivisor, uint64 depositTxMaxFee, uint32 depositRevealAheadPeriod)
DepositRevealed
event DepositRevealed(bytes32 fundingTxHash, uint32 fundingOutputIndex, address indexed depositor, uint64 amount, bytes8 blindingFactor, bytes20 indexed walletPubKeyHash, bytes20 refundPubKeyHash, bytes4 refundLocktime, address vault)
DepositsSwept
event DepositsSwept(bytes20 walletPubKeyHash, bytes32 sweepTxHash)
FraudChallengeDefeated
event FraudChallengeDefeated(bytes20 indexed walletPubKeyHash, bytes32 sighash)
FraudChallengeDefeatTimedOut
event FraudChallengeDefeatTimedOut(bytes20 indexed walletPubKeyHash, bytes32 sighash)
FraudChallengeSubmitted
event FraudChallengeSubmitted(bytes20 indexed walletPubKeyHash, bytes32 sighash, uint8 v, bytes32 r, bytes32 s)
FraudParametersUpdated
event FraudParametersUpdated(uint96 fraudChallengeDepositAmount, uint32 fraudChallengeDefeatTimeout, uint96 fraudSlashingAmount, uint32 fraudNotifierRewardMultiplier)
GovernanceTransferred
event GovernanceTransferred(address oldGovernance, address newGovernance)
Initialized
event Initialized(uint8 version)
MovedFundsSweepTimedOut
event MovedFundsSweepTimedOut(bytes20 indexed walletPubKeyHash, bytes32 movingFundsTxHash, uint32 movingFundsTxOutputIndex)
MovedFundsSwept
event MovedFundsSwept(bytes20 indexed walletPubKeyHash, bytes32 sweepTxHash)
MovingFundsBelowDustReported
event MovingFundsBelowDustReported(bytes20 indexed walletPubKeyHash)
MovingFundsCommitmentSubmitted
event MovingFundsCommitmentSubmitted(bytes20 indexed walletPubKeyHash, bytes20[] targetWallets, address submitter)
MovingFundsCompleted
event MovingFundsCompleted(bytes20 indexed walletPubKeyHash, bytes32 movingFundsTxHash)
MovingFundsParametersUpdated
event MovingFundsParametersUpdated(uint64 movingFundsTxMaxTotalFee, uint64 movingFundsDustThreshold, uint32 movingFundsTimeoutResetDelay, uint32 movingFundsTimeout, uint96 movingFundsTimeoutSlashingAmount, uint32 movingFundsTimeoutNotifierRewardMultiplier, uint16 movingFundsCommitmentGasOffset, uint64 movedFundsSweepTxMaxTotalFee, uint32 movedFundsSweepTimeout, uint96 movedFundsSweepTimeoutSlashingAmount, uint32 movedFundsSweepTimeoutNotifierRewardMultiplier)
MovingFundsTimedOut
event MovingFundsTimedOut(bytes20 indexed walletPubKeyHash)
MovingFundsTimeoutReset
event MovingFundsTimeoutReset(bytes20 indexed walletPubKeyHash)
NewWalletRegistered
event NewWalletRegistered(bytes32 indexed ecdsaWalletID, bytes20 indexed walletPubKeyHash)
NewWalletRequested
event NewWalletRequested()
RedemptionParametersUpdated
event RedemptionParametersUpdated(uint64 redemptionDustThreshold, uint64 redemptionTreasuryFeeDivisor, uint64 redemptionTxMaxFee, uint64 redemptionTxMaxTotalFee, uint32 redemptionTimeout, uint96 redemptionTimeoutSlashingAmount, uint32 redemptionTimeoutNotifierRewardMultiplier)
RedemptionRequested
event RedemptionRequested(bytes20 indexed walletPubKeyHash, bytes redeemerOutputScript, address indexed redeemer, uint64 requestedAmount, uint64 treasuryFee, uint64 txMaxFee)
RedemptionsCompleted
event RedemptionsCompleted(bytes20 indexed walletPubKeyHash, bytes32 redemptionTxHash)
RedemptionTimedOut
event RedemptionTimedOut(bytes20 indexed walletPubKeyHash, bytes redeemerOutputScript)
RedemptionWatchtowerSet
event RedemptionWatchtowerSet(address redemptionWatchtower)
SpvMaintainerStatusUpdated
event SpvMaintainerStatusUpdated(address indexed spvMaintainer, bool isTrusted)
TreasuryUpdated
event TreasuryUpdated(address treasury)
VaultStatusUpdated
event VaultStatusUpdated(address indexed vault, bool isTrusted)
WalletClosed
event WalletClosed(bytes32 indexed ecdsaWalletID, bytes20 indexed walletPubKeyHash)
WalletClosing
event WalletClosing(bytes32 indexed ecdsaWalletID, bytes20 indexed walletPubKeyHash)
WalletMovingFunds
event WalletMovingFunds(bytes32 indexed ecdsaWalletID, bytes20 indexed walletPubKeyHash)
WalletParametersUpdated
event WalletParametersUpdated(uint32 walletCreationPeriod, uint64 walletCreationMinBtcBalance, uint64 walletCreationMaxBtcBalance, uint64 walletClosureMinBtcBalance, uint32 walletMaxAge, uint64 walletMaxBtcTransfer, uint32 walletClosingPeriod)
WalletTerminated
event WalletTerminated(bytes32 indexed ecdsaWalletID, bytes20 indexed walletPubKeyHash)
errors
No errors.
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b603254610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff9081161015620000e2576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61577680620000f46000396000f3fe6080604052600436106103605760003560e01c80638ac89ce1116101c6578063c42b64d0116100f7578063e44bdd3111610095578063e65e19d51161006f578063e65e19d514611039578063ee1dd3ea14611066578063f18cf1b114611086578063fca4ba4c146110b357600080fd5b8063e44bdd3114610fc0578063e509397d14610fe0578063e53c0b551461100057600080fd5b8063d38bfff4116100d1578063d38bfff414610f2f578063d6eccdf014610f4f578063dc49117b14610f6f578063ded1d24a14610f8f57600080fd5b8063c42b64d014610e96578063c8b5d2db14610eef578063d246ce1614610f0f57600080fd5b8063b02c43d011610164578063bd1501311161013e578063bd15013114610d70578063be05abe314610d90578063be26ebad14610e56578063c3b5ffc914610e7657600080fd5b8063b02c43d014610bb2578063b2146cd614610d10578063b5da217114610d5057600080fd5b8063a145e2d5116101a0578063a145e2d514610b05578063a8fa0f4214610b25578063a9de2f3a14610b45578063abaeed8f14610b9257600080fd5b80638ac89ce114610aa557806392238f3214610ac55780639821c38b14610ae557600080fd5b80635aa6e675116102a05780636e70ce411161023e57806379fc4eb31161021857806379fc4eb314610a255780637f51bb1f14610a4557806386f0143914610a65578063883d6a1114610a8557600080fd5b80636e70ce411461090157806375b922d11461098757806377145f2114610a0557600080fd5b806360d712fc1161027a57806360d712fc1461080157806361ccf97a1461082157806361d027b3146108d0578063685ce1b1146108ee57600080fd5b80635aa6e6751461078b5780635f2b2d0d146107c35780635f3281ca146107e357600080fd5b80632bb818c21161030d57806338326507116102e7578063383265071461070b5780633dce98121461072b578063475d05701461074b57806350aea15a1461076b57600080fd5b80632bb818c2146105de57806331a4889a1461060c57806333e957cb1461062c57600080fd5b80630b6ba19d1161033e5780630b6ba19d146104cf57806311026ef81461058c57806324028c11146105ac57600080fd5b806303d952f7146103655780630674f2661461048d57806307f7d223146104af575b600080fd5b34801561037157600080fd5b5061042261038036600461415b565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506000908152604a6020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516104849190600060a0820190506001600160a01b03835116825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561049957600080fd5b506104ad6104a83660046141bc565b6110d3565b005b3480156104bb57600080fd5b506104ad6104ca366004614261565b611162565b3480156104db57600080fd5b506104226104ea36600461415b565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506000908152604b6020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561059857600080fd5b506104ad6105a7366004614295565b6111eb565b3480156105b857600080fd5b50604454600160a01b900463ffffffff1660405163ffffffff9091168152602001610484565b3480156105ea57600080fd5b50603454600160a01b90046001600160601b0316604051908152602001610484565b34801561061857600080fd5b506104ad61062736600461432b565b611277565b34801561063857600080fd5b506106c761064736600461415b565b604080516080810182526000808252602082018190529181018290526060810191909152506000908152604c6020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b604051610484919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561071757600080fd5b506104ad6107263660046143d6565b611309565b34801561073757600080fd5b506104ad61074636600461442a565b61137c565b34801561075757600080fd5b506104ad61076636600461446b565b6113db565b34801561077757600080fd5b506104ad6107863660046144ba565b61147d565b34801561079757600080fd5b506000546107ab906001600160a01b031681565b6040516001600160a01b039091168152602001610484565b3480156107cf57600080fd5b506104ad6107de366004614517565b6114d6565b3480156107ef57600080fd5b50604f546001600160a01b03166107ab565b34801561080d57600080fd5b506104ad61081c366004614517565b611590565b34801561082d57600080fd5b5061088460425460435460445460455463ffffffff600160a01b85048116956001600160401b03600160c01b9687900481169686821696600160401b8104831696600160801b909104851695919004909116921690565b6040805163ffffffff98891681526001600160401b039788166020820152958716908601529285166060850152908516608084015290921660a0820152911660c082015260e001610484565b3480156108dc57600080fd5b506037546001600160a01b03166107ab565b6104ad6108fc3660046145e5565b611642565b34801561090d57600080fd5b50603f54604154604080516001600160401b038085168252600160401b850481166020830152600160801b808604821693830193909352600160c01b909404909316606084015263ffffffff80831660808501526001600160601b0364010000000084041660a085015291041660c082015260e001610484565b34801561099357600080fd5b506109ce6041546042546001600160601b03600160a01b90920482169263ffffffff8083169364010000000084041692600160801b90041690565b604080516001600160601b03958616815263ffffffff94851660208201529490921691840191909152166060820152608001610484565b348015610a1157600080fd5b506104ad610a20366004614654565b61169b565b348015610a3157600080fd5b506104ad610a403660046146d4565b6116f6565b348015610a5157600080fd5b506104ad610a60366004614767565b611751565b348015610a7157600080fd5b506104ad610a803660046147af565b6117b9565b348015610a9157600080fd5b506104ad610aa0366004614807565b611810565b348015610ab157600080fd5b506104ad610ac036600461489f565b61187b565b348015610ad157600080fd5b506104ad610ae0366004614919565b611933565b348015610af157600080fd5b506104ad610b0036600461495e565b61198a565b348015610b1157600080fd5b506104ad610b203660046149d2565b611a40565b348015610b3157600080fd5b506104ad610b4036600461442a565b611ac6565b348015610b5157600080fd5b50603354603454603554603654604080516001600160a01b039586168152938516602085015291841691830191909152919091166060820152608001610484565b348015610b9e57600080fd5b506104ad610bad3660046149ee565b611b2c565b348015610bbe57600080fd5b50610c91610bcd36600461415b565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915250600090815260466020908152604091829020825160e08101845281546001600160a01b0380821683526001600160401b03600160a01b80840482169685019690965263ffffffff600160e01b9384900481169785019790975260018501549182166060850152948104909416608083015290920490921660a082015260029091015460c082015290565b6040516104849190600060e0820190506001600160a01b0380845116835260208401516001600160401b0380821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505060c083015160c083015292915050565b348015610d1c57600080fd5b50610d40610d2b36600461415b565b6000908152604d602052604090205460ff1690565b6040519015158152602001610484565b348015610d5c57600080fd5b506104ad610d6b366004614aa0565b611c5a565b348015610d7c57600080fd5b506104ad610d8b366004614b0a565b611cc5565b348015610d9c57600080fd5b50603b54603c54603e54604080516001600160401b038086168252600160401b80870482166020840152600160801b80880463ffffffff90811695850195909552600160a01b909704841660608401526001600160601b0380871660808501526c01000000000000000000000000808804861660a08601529790960461ffff1660c084015290841660e083015283048216610100820152938204909216610120840152600160c01b90041661014082015261016001610484565b348015610e6257600080fd5b506104ad610e71366004614767565b611d7d565b348015610e8257600080fd5b506104ad610e91366004614b91565b611de2565b348015610ea257600080fd5b50603954604080516001600160401b038084168252600160401b840481166020830152600160801b84041691810191909152600160c01b90910463ffffffff166060820152608001610484565b348015610efb57600080fd5b506104ad610f0a366004614c66565b611e5e565b348015610f1b57600080fd5b506104ad610f2a366004614c81565b611e69565b348015610f3b57600080fd5b506104ad610f4a366004614767565b6123c6565b348015610f5b57600080fd5b506104ad610f6a366004614cff565b6124a5565b348015610f7b57600080fd5b506104ad610f8a366004614d69565b612502565b348015610f9b57600080fd5b5060445460601b6040516bffffffffffffffffffffffff199091168152602001610484565b348015610fcc57600080fd5b506104ad610fdb366004614261565b61256a565b348015610fec57600080fd5b506104ad610ffb36600461489f565b6125bf565b34801561100c57600080fd5b50610d4061101b366004614767565b6001600160a01b031660009081526047602052604090205460ff1690565b34801561104557600080fd5b50611059611054366004614c66565b612675565b6040516104849190614dce565b34801561107257600080fd5b506104ad611081366004614c66565b61279d565b34801561109257600080fd5b506110a66110a136600461415b565b612803565b6040516104849190614e72565b3480156110bf57600080fd5b506104ad6110ce366004614ecf565b6128c0565b6040517f94fcaf8d0000000000000000000000000000000000000000000000000000000081527351bbef1c7cc3a1d3bc5e64ce6c3ba6e66fba3559906394fcaf8d9061112c906033908890889088908890600401614f3d565b60006040518083038186803b15801561114457600080fd5b505af4158015611158573d6000803e3d6000fd5b5050505050505050565b6040517f260b6cde000000000000000000000000000000000000000000000000000000008152733e0407765fac663d391ae738f3aa0c98eab67a909063260b6cde906111b79060339086908690600401614faf565b60006040518083038186803b1580156111cf57600080fd5b505af41580156111e3573d6000803e3d6000fd5b505050505050565b6040517fdd84d7e4000000000000000000000000000000000000000000000000000000008152738ef1beda734e696cc055269b46bb5a0ec7ac9f5e9063dd84d7e49061124290603390879087908790600401614fe0565b60006040518083038186803b15801561125a57600080fd5b505af415801561126e573d6000803e3d6000fd5b50505050505050565b6040517fa76558b3000000000000000000000000000000000000000000000000000000008152738ef1beda734e696cc055269b46bb5a0ec7ac9f5e9063a76558b3906112d29060339089908990899089908990600401615058565b60006040518083038186803b1580156112ea57600080fd5b505af41580156112fe573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146113685760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b611376603385858585612915565b50505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260336004820152602481018390526044810182905273c989d3e486aae6355f65281b4d0bde08c8e32fbc9063c87de7f490606401611242565b6033546001600160a01b031633146114355760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652062616e6b00000000000000000000604482015260640161135f565b738ef1beda734e696cc055269b46bb5a0ec7ac9f5e63d253980860338661145b87612b86565b86866040518663ffffffff1660e01b815260040161112c9594939291906150a2565b6040517f899bef9d000000000000000000000000000000000000000000000000000000008152733e0407765fac663d391ae738f3aa0c98eab67a909063899bef9d9061112c9060339088908890889088906004016150e5565b6000546001600160a01b031633146115305760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b6001600160a01b038216600081815260486020908152604091829020805460ff191685151590811790915591519182527f8779ecd5a875d699b846953c9af5ef54f4a354fe4568c460d43c14c31911917091015b60405180910390a25050565b6000546001600160a01b031633146115ea5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b6001600160a01b038216600081815260476020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f9101611584565b6040517feb8fdd5d0000000000000000000000000000000000000000000000000000000081527351bbef1c7cc3a1d3bc5e64ce6c3ba6e66fba35599063eb8fdd5d9061112c906033908890889088908890600401615157565b6040517f624526fe0000000000000000000000000000000000000000000000000000000081527351bbef1c7cc3a1d3bc5e64ce6c3ba6e66fba35599063624526fe906112d290603390899089908990899089906004016151be565b6040517f80ffe94a0000000000000000000000000000000000000000000000000000000081527351bbef1c7cc3a1d3bc5e64ce6c3ba6e66fba3559906380ffe94a906112d29060339089908990899089908990600401615201565b6000546001600160a01b031633146117ab5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b6117b6603382612c09565b50565b6040517fe4f3925d00000000000000000000000000000000000000000000000000000000815273f526f0e238a3fd62fcf5f35b2cc7d6e7a9d090119063e4f3925d90611242906033908790879087906004016153dd565b6000546001600160a01b0316331461186a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b61126e603388888888888888612cb7565b3360009081526048602052604090205460ff166118da5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f7420535056206d61696e7461696e657200000000604482015260640161135f565b6040517fa164de6e000000000000000000000000000000000000000000000000000000008152738ef1beda734e696cc055269b46bb5a0ec7ac9f5e9063a164de6e9061112c906033908890889088908890600401615490565b6040517f07f96c42000000000000000000000000000000000000000000000000000000008152733e0407765fac663d391ae738f3aa0c98eab67a90906307f96c4290611242906033908790879087906004016154e5565b3360009081526048602052604090205460ff166119e95760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f7420535056206d61696e7461696e657200000000604482015260640161135f565b6040517fb79a9725000000000000000000000000000000000000000000000000000000008152733e0407765fac663d391ae738f3aa0c98eab67a909063b79a9725906112429060339087908790879060040161550f565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273c989d3e486aae6355f65281b4d0bde08c8e32fbc9063d079fbb190611a93906033908590600401615553565b60006040518083038186803b158015611aab57600080fd5b505af4158015611abf573d6000803e3d6000fd5b5050505050565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526033600482015260248101849052604481018390526064810182905273c989d3e486aae6355f65281b4d0bde08c8e32fbc90634afbe4c990608401611242565b60005a6040517fc8f77943000000000000000000000000000000000000000000000000000000008152909150733e0407765fac663d391ae738f3aa0c98eab67a909063c8f7794390611b91906033908c908c908c908c908c908c908c90600401615567565b60006040518083038186803b158015611ba957600080fd5b505af4158015611bbd573d6000803e3d6000fd5b5050603654603c546001600160a01b039091169250637ad226dc9150600160801b900461ffff165a611bef9085615608565b611bf99190615621565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b03163314611cb45760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b61126e603388888888888888612fb8565b3360009081526048602052604090205460ff16611d245760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f7420535056206d61696e7461696e657200000000604482015260640161135f565b6040517fd22cd45b00000000000000000000000000000000000000000000000000000000815273392635646bc22fc13c86859d1f02b27974ac9b959063d22cd45b9061112c906033908890889088908890600401615634565b6000546001600160a01b03163314611dd75760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b6117b66033826134ab565b6000546001600160a01b03163314611e3c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b611e5160338c8c8c8c8c8c8c8c8c8c8c6135f8565b5050505050505050505050565b6117b6603382613d07565b603254610100900460ff1615808015611e895750603254600160ff909116105b80611ea35750303b158015611ea3575060325460ff166001145b611f155760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161135f565b6032805460ff191660011790558015611f38576032805461ff0019166101001790555b6001600160a01b038716611f8e5760405162461bcd60e51b815260206004820152601b60248201527f42616e6b20616464726573732063616e6e6f74206265207a65726f0000000000604482015260640161135f565b603380546001600160a01b0319166001600160a01b03898116919091179091558616611ffc5760405162461bcd60e51b815260206004820152601c60248201527f52656c617920616464726573732063616e6e6f74206265207a65726f00000000604482015260640161135f565b603480546001600160a01b0319166001600160a01b038881169190911790915584166120905760405162461bcd60e51b815260206004820152602c60248201527f45434453412057616c6c6574205265676973747279206164647265737320636160448201527f6e6e6f74206265207a65726f0000000000000000000000000000000000000000606482015260840161135f565b603580546001600160a01b0319166001600160a01b038681169190911790915583166121245760405162461bcd60e51b815260206004820152602960248201527f5265696d62757273656d656e7420506f6f6c20616464726573732063616e6e6f60448201527f74206265207a65726f0000000000000000000000000000000000000000000000606482015260840161135f565b603680546001600160a01b0319166001600160a01b038581169190911790915585166121925760405162461bcd60e51b815260206004820152601f60248201527f547265617375727920616464726573732063616e6e6f74206265207a65726f00604482015260640161135f565b603780546001600160a01b03199081166001600160a01b038881169190911790925560348054909216600160a01b6001600160601b0386160217909155603980546001600160e01b03199081167a13c68000000000000186a000000000000007d000000000000f4240179091557a0f424000000000000186a000000000000007d000000000000f4240603f55603b80547fffffffffffffffff0000000000000000000000000000000000000000000000001676093a800007e9000000000000030d4000000000000186a0179055603c80547fffffffffffffffffffffffffffff00000000000000000000000000000000000016713a9800000064000000056bc75e2d63100000179055603e80549091167864000000056bc75e2d6310000000093a8000000000000186a01790557b4563918244f4000000000064000000056bc75e2d63100000000697806041557b05f5e10000093a8000000064000000056bc75e2d6310000000093a806042556043805490911672eff1000000000002faf08000000002540be4001790556044805477ffffffffffffffffffffffffffffffffffffffffffffffff167b3b9aca00000000000000000000000000000000000000000000000000179055604580546234bc0063ffffffff1990911617905561237833613e43565b801561126e576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b6000546001600160a01b031633146124205760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b6001600160a01b03811661249c5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161135f565b6117b681613e43565b6040517ff5ada442000000000000000000000000000000000000000000000000000000008152738ef1beda734e696cc055269b46bb5a0ec7ac9f5e9063f5ada442906112d2906033908990899033908a908a908a90600401615688565b6000546001600160a01b0316331461255c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e636500000000604482015260640161135f565b611376603385858585613e9d565b6040517f3af3b15400000000000000000000000000000000000000000000000000000000815273c989d3e486aae6355f65281b4d0bde08c8e32fbc90633af3b154906111b79060339086908690600401614faf565b3360009081526048602052604090205460ff1661261e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f7420535056206d61696e7461696e657200000000604482015260640161135f565b6040517e92bac9000000000000000000000000000000000000000000000000000000008152733e0407765fac663d391ae738f3aa0c98eab67a90906292bac99061112c906033908890889088908890600401615490565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526bffffffffffffffffffffffff1982166000908152604e60209081526040918290208251610120810184528154815260018201549281019290925260028101546001600160401b0381169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b90910416600581111561277757612777614da4565b600581111561278857612788614da4565b81526020016003820154815250509050919050565b6040517f9b69e71d000000000000000000000000000000000000000000000000000000008152603360048201526bffffffffffffffffffffffff1982166024820152733e0407765fac663d391ae738f3aa0c98eab67a9090639b69e71d90604401611a93565b61282b6040805160808101825260008082526020820181905291810182905290606082015290565b60008281526049602090815260409182902082516080810184528154606081811b6bffffffffffffffffffffffff19168352600160a01b82046001600160401b031694830194909452600160e01b900463ffffffff16938101939093526001810154909183019060ff1660038111156128a6576128a6614da4565b60038111156128b7576128b7614da4565b90525092915050565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273f526f0e238a3fd62fcf5f35b2cc7d6e7a9d090119063aea7fd0b906111b790603390869086906004016156f2565b6000846001600160401b0316116129945760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f00000000000000000000000000000000606482015260840161135f565b816001600160401b0316846001600160401b031611612a1b5760405162461bcd60e51b815260206004820152603e60248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e206465706f736974205458206d6178206665650000606482015260840161135f565b6000826001600160401b031611612a9a5760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f0000000000000000000000606482015260840161135f565b6006850180546001600160401b038681166fffffffffffffffffffffffffffffffff199092168217600160401b878316908102919091177fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff16600160801b9287169283027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1617600160c01b63ffffffff87169081029190911790945560408051938452602084019190915282015260608101919091527f20b0edfa765e9ea8de6866efa2435850051a5dc3737d1aec22b0fdff8a3cbddf906080015b60405180910390a15050505050565b60006001600160401b03821115612c055760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201527f3420626974730000000000000000000000000000000000000000000000000000606482015260840161135f565b5090565b6001600160a01b038116612c5f5760405162461bcd60e51b815260206004820181905260248201527f54726561737572792061646472657373206d757374206e6f7420626520307830604482015260640161135f565b6004820180546001600160a01b0319166001600160a01b0383169081179091556040519081527f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1906020015b60405180910390a15050565b856001600160401b0316856001600160401b031611612d645760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a40161135f565b6000826001600160401b031611612de35760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f0000000000000000000000606482015260840161135f565b60008163ffffffff1611612e5f5760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f0000000000000000000000000000000000606482015260840161135f565b600f880180546001600160401b03808916600160c01b90810277ffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff808e16600160a01b0282166001600160a01b03909616959095179190911790945560108c018054888516600160801b0263ffffffff60801b198b8616600160401b026fffffffffffffffffffffffffffffffff199093168d871617929092179190911617905560118c018054928716909102919093161790915560128901805491831663ffffffff199092169190911790556040517fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac90612fa690899089908990899089908990899063ffffffff97881681526001600160401b03968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b60088801546001600160401b03600160401b90910481169088161161306b5760405162461bcd60e51b815260206004820152604a60248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e206d6f76696e672066756e6473206475737460648201527f207468726573686f6c6400000000000000000000000000000000000000000000608482015260a40161135f565b846001600160401b0316876001600160401b0316116131195760405162461bcd60e51b8152602060048201526044602482018190527f526564656d7074696f6e2064757374207468726573686f6c64206d7573742062908201527f652067726561746572207468616e20726564656d7074696f6e205458206d617860648201527f2066656500000000000000000000000000000000000000000000000000000000608482015260a40161135f565b6000856001600160401b0316116131985760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f0000000000000000606482015260840161135f565b846001600160401b0316846001600160401b0316101561326c5760405162461bcd60e51b815260206004820152607460248201527f526564656d7074696f6e207472616e73616374696f6e206d617820746f74616c60448201527f20666565206d7573742062652067726561746572207468616e206f722065717560648201527f616c20746f2074686520726564656d7074696f6e207472616e73616374696f6e60848201527f207065722d72657175657374206d61782066656500000000000000000000000060a482015260c40161135f565b60008363ffffffff16116132e85760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f0000000000000000000000000000000000000000606482015260840161135f565b60648163ffffffff16111561338b5760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a40161135f565b600c880180546001600160401b038981166fffffffffffffffffffffffffffffffff199283168117600160401b8b8416908102919091176fffffffffffffffffffffffffffffffff16600160801b8b851681810277ffffffffffffffffffffffffffffffffffffffffffffffff1692909217600160c01b958c1695860217909655600e8e01805463ffffffff8b81169190971681176401000000006001600160601b038c169081029190911763ffffffff60801b1916978a1698890297909717909155604080519485526020850193909352918301526060820192909252608081019190915260a081019190915260c08101919091527f2c682acb687f36d9e4d486fc0c681b0e802911b0fb56f3e0d54f373e7f89a7c49060e001612fa6565b601c8201546001600160a01b03161561352c5760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207761746368746f77657220616c726561647920736560448201527f7400000000000000000000000000000000000000000000000000000000000000606482015260840161135f565b6001600160a01b0381166135a85760405162461bcd60e51b815260206004820152602d60248201527f526564656d7074696f6e207761746368746f7765722061646472657373206d7560448201527f7374206e6f742062652030783000000000000000000000000000000000000000606482015260840161135f565b601c820180546001600160a01b0319166001600160a01b0383169081179091556040519081527f13f696992cabdd1b00afcc752ff98fe39e3fe341c16ed5f55e55c64875de0b9990602001612cab565b60008b6001600160401b031611613679576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f606482015260840161135f565b60008a6001600160401b03161180156136a25750600c8c01546001600160401b03908116908b16105b61373a5760405162461bcd60e51b815260206004820152605e60248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f20616e64206c6f7765722060648201527f7468616e20726564656d7074696f6e2064757374207468726573686f6c640000608482015260a40161135f565b60008963ffffffff16116137b65760405162461bcd60e51b815260206004820152603a60248201527f4d6f76696e672066756e64732074696d656f75742072657365742064656c617960448201527f206d7573742062652067726561746572207468616e207a65726f000000000000606482015260840161135f565b8863ffffffff168863ffffffff16116138375760405162461bcd60e51b815260206004820152603960248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e206974732072657365742064656c617900000000000000606482015260840161135f565b60648663ffffffff1611156138da5760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a40161135f565b6000846001600160401b03161161397f5760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a40161135f565b60008363ffffffff16116139fb5760405162461bcd60e51b815260206004820152603360248201527f4d6f7665642066756e64732073776565702074696d656f7574206d757374206260448201527f652067726561746572207468616e207a65726f00000000000000000000000000606482015260840161135f565b60648163ffffffff161115613a9e5760405162461bcd60e51b815260206004820152605260248201527f4d6f7665642066756e64732073776565702074696d656f7574206e6f7469666960448201527f657220726577617264206d756c7469706c696572206d75737420626520696e2060648201527f7468652072616e6765205b302c203130305d0000000000000000000000000000608482015260a40161135f565b8a8c60080160006101000a8154816001600160401b0302191690836001600160401b03160217905550898c60080160086101000a8154816001600160401b0302191690836001600160401b03160217905550888c60080160106101000a81548163ffffffff021916908363ffffffff160217905550878c60080160146101000a81548163ffffffff021916908363ffffffff160217905550868c60090160006101000a8154816001600160601b0302191690836001600160601b03160217905550858c600901600c6101000a81548163ffffffff021916908363ffffffff160217905550848c60090160106101000a81548161ffff021916908361ffff160217905550838c600b0160006101000a8154816001600160401b0302191690836001600160401b03160217905550828c600b0160086101000a81548163ffffffff021916908363ffffffff160217905550818c600b01600c6101000a8154816001600160601b0302191690836001600160601b03160217905550808c600b0160186101000a81548163ffffffff021916908363ffffffff1602179055507fdd096c0b696aec16e055260a26ba0980984d19c11cd2ae6f6dbd0b67e0c3bf0d8b8b8b8b8b8b8b8b8b8b8b604051613cf19b9a999897969594939291906001600160401b039b8c168152998b1660208b015263ffffffff98891660408b015296881660608a01526001600160601b0395861660808a015293871660a089015261ffff9290921660c088015290961660e086015294831661010085015293909316610120830152919091166101408201526101600190565b60405180910390a1505050505050505050505050565b6bffffffffffffffffffffffff1981166000908152601b83016020526040902060036002820154600160c01b900460ff166005811115613d4957613d49614da4565b14613d965760405162461bcd60e51b815260206004820152601f60248201527f57616c6c6574206d75737420626520696e20436c6f73696e6720737461746500604482015260640161135f565b60128301546002820154613dba9163ffffffff90811691600160801b90041661571c565b63ffffffff164211613e345760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f6574000000000000000000000000000000000000000000000000000000000000606482015260840161135f565b613e3e838361404e565b505050565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce809101612cab565b60008363ffffffff1611613f195760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f0000000000000000606482015260840161135f565b60648163ffffffff161115613f965760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d0000606482015260840161135f565b600e850180546001600160a01b0316600160a01b6001600160601b0387811691820292909217909255600f8701805463ffffffff8781166fffffffffffffffffffffffffffffffff1990921682176401000000009488169485021763ffffffff60801b1916600160801b9187169182021790925560408051948552602085019190915283019190915260608201527fc6d044ae75b875a43eb23bedc79d2b694b00ed95b5b8bf2a657328af9dda090d90608001612b77565b6bffffffffffffffffffffffff1981166000818152601b840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb9279161412d9160040190815260200190565b600060405180830381600087803b15801561414757600080fd5b505af115801561126e573d6000803e3d6000fd5b60006020828403121561416d57600080fd5b5035919050565b60008083601f84011261418657600080fd5b5081356001600160401b0381111561419d57600080fd5b6020830191508360208285010111156141b557600080fd5b9250929050565b600080600080604085870312156141d257600080fd5b84356001600160401b03808211156141e957600080fd5b6141f588838901614174565b9096509450602087013591508082111561420e57600080fd5b5061421b87828801614174565b95989497509550505050565b80356bffffffffffffffffffffffff198116811461424457600080fd5b919050565b60006060828403121561425b57600080fd5b50919050565b6000806080838503121561427457600080fd5b61427d83614227565b915061428c8460208501614249565b90509250929050565b6000806000604084860312156142aa57600080fd5b6142b384614227565b925060208401356001600160401b038111156142ce57600080fd5b6142da86828701614174565b9497909650939450505050565b60008083601f8401126142f957600080fd5b5081356001600160401b0381111561431057600080fd5b6020830191508360208260051b85010111156141b557600080fd5b60008060008060006060868803121561434357600080fd5b61434c86614227565b945060208601356001600160401b038082111561436857600080fd5b61437489838a016142e7565b9096509450604088013591508082111561438d57600080fd5b5061439a88828901614174565b969995985093965092949392505050565b80356001600160401b038116811461424457600080fd5b803563ffffffff8116811461424457600080fd5b600080600080608085870312156143ec57600080fd5b6143f5856143ab565b9350614403602086016143ab565b9250614411604086016143ab565b915061441f606086016143c2565b905092959194509250565b60008060006060848603121561443f57600080fd5b505081359360208301359350604090920135919050565b6001600160a01b03811681146117b657600080fd5b6000806000806060858703121561448157600080fd5b843561448c81614456565b93506020850135925060408501356001600160401b038111156144ae57600080fd5b61421b87828801614174565b600080600080606085870312156144d057600080fd5b843593506144e0602086016143c2565b925060408501356001600160401b038111156144fb57600080fd5b61421b878288016142e7565b8035801515811461424457600080fd5b6000806040838503121561452a57600080fd5b823561453581614456565b915061428c60208401614507565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261456a57600080fd5b81356001600160401b038082111561458457614584614543565b604051601f8301601f19908116603f011681019082821181831017156145ac576145ac614543565b816040528381528660208588010111156145c557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060a085870312156145fb57600080fd5b84356001600160401b038082111561461257600080fd5b61461e88838901614174565b9096509450602087013591508082111561463757600080fd5b5061464487828801614559565b92505061441f8660408701614249565b60008060008060006060868803121561466c57600080fd5b85356001600160401b038082111561468357600080fd5b61468f89838a01614174565b909750955060208801359150808211156146a857600080fd5b506146b588828901614174565b90945092506146c8905060408701614507565b90509295509295909350565b6000806000806000606086880312156146ec57600080fd5b85356001600160401b038082111561470357600080fd5b61470f89838a01614174565b9097509550602088013591508082111561472857600080fd5b61473489838a016142e7565b9095509350604088013591508082111561474d57600080fd5b5061475a88828901614559565b9150509295509295909350565b60006020828403121561477957600080fd5b813561478481614456565b9392505050565b60006080828403121561425b57600080fd5b600060c0828403121561425b57600080fd5b600080600061010084860312156147c557600080fd5b83356001600160401b038111156147db57600080fd5b6147e78682870161478b565b9350506147f7856020860161479d565b915060e084013590509250925092565b600080600080600080600060e0888a03121561482257600080fd5b61482b886143c2565b9650614839602089016143ab565b9550614847604089016143ab565b9450614855606089016143ab565b9350614863608089016143c2565b925061487160a089016143ab565b915061487f60c089016143c2565b905092959891949750929550565b600060a0828403121561425b57600080fd5b60008060008060c085870312156148b557600080fd5b84356001600160401b03808211156148cc57600080fd5b6148d88883890161478b565b955060208701359150808211156148ee57600080fd5b506148fb8782880161488d565b93505061490b8660408701614249565b915061441f60a08601614227565b60008060006040848603121561492e57600080fd5b61493784614227565b925060208401356001600160401b0381111561495257600080fd5b6142da868287016142e7565b600080600060a0848603121561497357600080fd5b83356001600160401b038082111561498a57600080fd5b6149968783880161478b565b945060208601359150808211156149ac57600080fd5b506149b98682870161488d565b9250506149c98560408601614249565b90509250925092565b6000606082840312156149e457600080fd5b6147848383614249565b600080600080600080600060e0888a031215614a0957600080fd5b614a1288614227565b9650614a218960208a01614249565b955060808801356001600160401b0380821115614a3d57600080fd5b614a498b838c016142e7565b909750955060a08a0135945060c08a0135915080821115614a6957600080fd5b50614a768a828b016142e7565b989b979a50959850939692959293505050565b80356001600160601b038116811461424457600080fd5b600080600080600080600060e0888a031215614abb57600080fd5b614ac4886143ab565b9650614ad2602089016143ab565b9550614ae0604089016143ab565b9450614aee606089016143ab565b9350614afc608089016143c2565b925061487160a08901614a89565b60008060008060c08587031215614b2057600080fd5b84356001600160401b0380821115614b3757600080fd5b614b438883890161478b565b95506020870135915080821115614b5957600080fd5b50614b668782880161488d565b935050614b768660408701614249565b915060a0850135614b8681614456565b939692955090935050565b60008060008060008060008060008060006101608c8e031215614bb357600080fd5b614bbc8c6143ab565b9a50614bca60208d016143ab565b9950614bd860408d016143c2565b9850614be660608d016143c2565b9750614bf460808d01614a89565b9650614c0260a08d016143c2565b955060c08c013561ffff81168114614c1957600080fd5b9450614c2760e08d016143ab565b9350614c366101008d016143c2565b9250614c456101208d01614a89565b9150614c546101408d016143c2565b90509295989b509295989b9093969950565b600060208284031215614c7857600080fd5b61478482614227565b60008060008060008060c08789031215614c9a57600080fd5b8635614ca581614456565b95506020870135614cb581614456565b94506040870135614cc581614456565b93506060870135614cd581614456565b92506080870135614ce581614456565b9150614cf360a08801614a89565b90509295509295509295565b600080600080600060c08688031215614d1757600080fd5b614d2086614227565b9450614d2f8760208801614249565b935060808601356001600160401b03811115614d4a57600080fd5b614d5688828901614174565b90945092506146c8905060a087016143ab565b60008060008060808587031215614d7f57600080fd5b614d8885614a89565b9350614d96602086016143c2565b925061441160408601614a89565b634e487b7160e01b600052602160045260246000fd5b60068110614dca57614dca614da4565b9052565b60006101208201905082518252602083015160208301526001600160401b03604084015116604083015263ffffffff60608401511660608301526080830151614e1f608084018263ffffffff169052565b5060a0830151614e3760a084018263ffffffff169052565b5060c0830151614e4f60c084018263ffffffff169052565b5060e0830151614e6260e0840182614dba565b5061010092830151919092015290565b81516bffffffffffffffffffffffff191681526020808301516001600160401b03169082015260408083015163ffffffff16908201526060820151608082019060048110614ec257614ec2614da4565b8060608401525092915050565b60008060e08385031215614ee257600080fd5b82356001600160401b03811115614ef857600080fd5b614f048582860161478b565b92505061428c846020850161479d565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b858152606060208201526000614f57606083018688614f14565b8281036040840152614f6a818587614f14565b98975050505050505050565b8035825263ffffffff614f8b602083016143c2565b1660208301526001600160401b03614fa5604083016143ab565b1660408301525050565b8381526bffffffffffffffffffffffff198316602082015260a08101614fd86040830184614f76565b949350505050565b8481526001600160601b03198416602082015260606040820152600061500a606083018486614f14565b9695505050505050565b8183526000602080850194508260005b8581101561504d5763ffffffff61503a836143c2565b1687529582019590820190600101615024565b509495945050505050565b8681526001600160601b031986166020820152608060408201526000615082608083018688615014565b8281036060840152615095818587614f14565b9998505050505050505050565b8581526001600160a01b03851660208201526001600160401b03841660408201526080606082015260006150da608083018486614f14565b979650505050505050565b85815284602082015263ffffffff841660408201526080606082015260006150da608083018486615014565b6000815180845260005b818110156151375760208185018101518683018201520161511b565b506000602082860101526020601f19601f83011685010191505092915050565b85815260c06020820152600061517160c083018688614f14565b82810360408401526151838186615111565b9150508235606083015260208301356080830152604083013560ff81168082146151ac57600080fd5b8060a085015250509695505050505050565b8681526080602082015260006151d8608083018789614f14565b82810360408401526151eb818688614f14565b9150508215156060830152979650505050505050565b86815260806020820152600061521b608083018789614f14565b828103604084015261522e818688615014565b905082810360608401526150958185615111565b80356001600160e01b03198116811461424457600080fd5b6000808335601e1984360301811261527157600080fd5b83016020810192503590506001600160401b0381111561529057600080fd5b8036038213156141b557600080fd5b60006001600160e01b0319806152b484615242565b1684526152c4602084018461525a565b608060208701526152d9608087018284614f14565b9150506152e9604085018561525a565b86830360408801526152fc838284614f14565b925050508161530d60608601615242565b166060860152809250505092915050565b63ffffffff61532c826143c2565b16825260208101357fffffffffffffffff000000000000000000000000000000000000000000000000811680821461536357600080fd5b60208401525061537560408201614227565b6bffffffffffffffffffffffff1981811660408501528061539860608501614227565b16606085015250506001600160e01b03196153b560808301615242565b16608083015260a08101356153c981614456565b6001600160a01b03811660a0840152505050565b60006101208683528060208401526153f78184018761529f565b915050615407604083018561531e565b8261010083015295945050505050565b6000615423828361525a565b60a0855261543560a086018284614f14565b9150506020830135602085015261544f604084018461525a565b8583036040870152615462838284614f14565b925050506060830135606085015261547d608084018461525a565b858303608087015261500a838284614f14565b85815260e0602082015260006154a960e083018761529f565b82810360408401526154bb8187615417565b9150506154cb6060830185614f76565b6001600160601b0319831660c08301529695505050505050565b8481526001600160601b03198416602082015260606040820152600061500a606083018486615014565b84815260c06020820152600061552860c083018661529f565b828103604084015261553a8186615417565b91505061554a6060830184614f76565b95945050505050565b828152608081016147846020830184614f76565b60006101008a835260206001600160601b0319808c168286015261558e604086018c614f76565b8260a08601526155a18386018a8c615014565b60c0860189905285810360e0870152868152879350820160005b878110156155e057826155cd86614227565b16825293830193908301906001016155bb565b509d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561561b5761561b6155f2565b92915050565b8082018082111561561b5761561b6155f2565b85815260e06020820152600061564d60e083018761529f565b828103604084015261565f8187615417565b91505061566f6060830185614f76565b6001600160a01b03831660c08301529695505050505050565b8781526bffffffffffffffffffffffff198716602082015260006101006156b26040840189614f76565b6001600160a01b03871660a08401528060c08401526156d48184018688614f14565b9150506001600160401b03831660e083015298975050505050505050565b600061010085835280602084015261570c8184018661529f565b915050614fd8604083018461531e565b63ffffffff818116838216019080821115615739576157396155f2565b509291505056fea2646970667358221220ca4c3e738e9aff2bd404ef5b14e6decff001f6a49eda8aff7a860d621ddc273964736f6c63430008110033