848 txs
4.1k calls
constructor
constructor(address ttgRegistrar_, address mToken_)
functions
activeOwedMOf
viewfunction activeOwedMOf(address minter_) view returns (uint240)
collateralExpiryTimestampOf
viewfunction collateralExpiryTimestampOf(address minter_) view returns (uint40)
collateralOf
viewfunction collateralOf(address minter_) view returns (uint240)
collateralPenaltyDeadlineOf
viewfunction collateralPenaltyDeadlineOf(address minter_) view returns (uint40)
collateralUpdateTimestampOf
viewfunction collateralUpdateTimestampOf(address minter_) view returns (uint40)
currentIndex
viewfunction currentIndex() view returns (uint128)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields_, string name_, string version_, uint256 chainId_, address verifyingContract_, bytes32 salt_, uint256[] extensions_)
excessOwedM
viewfunction excessOwedM() view returns (uint240 excessOwedM_)
frozenUntilOf
viewfunction frozenUntilOf(address minter_) view returns (uint40)
getLastSignatureTimestamp
viewfunction getLastSignatureTimestamp(address minter_, address validator_) view returns (uint256)
getUpdateCollateralDigest
viewfunction getUpdateCollateralDigest(address minter_, uint256 collateral_, uint256[] retrievalIds_, bytes32 metadataHash_, uint256 timestamp_) view returns (bytes32)
inactiveOwedMOf
viewfunction inactiveOwedMOf(address minter_) view returns (uint240)
isActiveMinter
viewfunction isActiveMinter(address minter_) view returns (bool)
isDeactivatedMinter
viewfunction isDeactivatedMinter(address minter_) view returns (bool)
isFrozenMinter
viewfunction isFrozenMinter(address minter_) view returns (bool)
isMinterApproved
viewfunction isMinterApproved(address minter_) view returns (bool)
isValidatorApproved
viewfunction isValidatorApproved(address validator_) view returns (bool)
latestIndex
viewfunction latestIndex() view returns (uint128)
latestProposedRetrievalTimestampOf
viewfunction latestProposedRetrievalTimestampOf(address minter_) view returns (uint40)
latestUpdateTimestamp
viewfunction latestUpdateTimestamp() view returns (uint40)
MAX_MINT_RATIO
viewfunction MAX_MINT_RATIO() view returns (uint32)
maxAllowedActiveOwedMOf
viewfunction maxAllowedActiveOwedMOf(address minter_) view returns (uint256)
MIN_UPDATE_COLLATERAL_INTERVAL
viewfunction MIN_UPDATE_COLLATERAL_INTERVAL() view returns (uint32)
mintDelay
viewfunction mintDelay() view returns (uint32)
minterFreezeTime
viewfunction minterFreezeTime() view returns (uint32)
minterRate
viewfunction minterRate() view returns (uint32)
mintProposalOf
viewfunction mintProposalOf(address minter_) view returns (uint48 mintId_, uint40 createdAt_, address destination_, uint240 amount_)
mintRatio
viewfunction mintRatio() view returns (uint32)
mintTTL
viewfunction mintTTL() view returns (uint32)
mToken
viewfunction mToken() view returns (address)
ONE
viewfunction ONE() view returns (uint16)
penalizedUntilOf
viewfunction penalizedUntilOf(address minter_) view returns (uint40)
penaltyRate
viewfunction penaltyRate() view returns (uint32)
pendingCollateralRetrievalOf
viewfunction pendingCollateralRetrievalOf(address minter_, uint256 retrievalId_) view returns (uint240)
principalOfActiveOwedMOf
viewfunction principalOfActiveOwedMOf(address minter_) view returns (uint112)
principalOfTotalActiveOwedM
viewfunction principalOfTotalActiveOwedM() view returns (uint112)
rateModel
viewfunction rateModel() view returns (address)
totalActiveOwedM
viewfunction totalActiveOwedM() view returns (uint240)
totalInactiveOwedM
viewfunction totalInactiveOwedM() view returns (uint240)
totalOwedM
viewfunction totalOwedM() view returns (uint240)
totalPendingCollateralRetrievalOf
viewfunction totalPendingCollateralRetrievalOf(address minter_) view returns (uint240)
ttgRegistrar
viewfunction ttgRegistrar() view returns (address)
ttgVault
viewfunction ttgVault() view returns (address)
UPDATE_COLLATERAL_TYPEHASH
viewfunction UPDATE_COLLATERAL_TYPEHASH() view returns (bytes32)
updateCollateralInterval
viewfunction updateCollateralInterval() view returns (uint32)
updateCollateralValidatorThreshold
viewfunction updateCollateralValidatorThreshold() view returns (uint256)
activateMinter
nonpayablefunction activateMinter(address minter_)
burnM
nonpayablefunction burnM(address minter_, uint256 maxAmount_) returns (uint112 principalAmount_, uint240 amount_)
burnM
nonpayablefunction burnM(address minter_, uint256 maxPrincipalAmount_, uint256 maxAmount_) returns (uint112 principalAmount_, uint240 amount_)
cancelMint
nonpayablefunction cancelMint(address minter_, uint256 mintId_)
deactivateMinter
nonpayablefunction deactivateMinter(address minter_) returns (uint240 inactiveOwedM_)
freezeMinter
nonpayablefunction freezeMinter(address minter_) returns (uint40 frozenUntil_)
mintM
nonpayablefunction mintM(uint256 mintId_) returns (uint112 principalAmount_, uint240 amount_)
proposeMint
nonpayablefunction proposeMint(uint256 amount_, address destination_) returns (uint48 mintId_)
proposeRetrieval
nonpayablefunction proposeRetrieval(uint256 collateral_) returns (uint48 retrievalId_)
updateCollateral
nonpayablefunction updateCollateral(uint256 collateral_, uint256[] retrievalIds_, bytes32 metadataHash_, address[] validators_, uint256[] timestamps_, bytes[] signatures_) returns (uint40 minTimestamp_)
updateIndex
nonpayablefunction updateIndex() returns (uint128 index_)
events
BurnExecuted
event BurnExecuted(address indexed minter, uint112 principalAmount, uint240 amount, address indexed payer)
BurnExecuted
event BurnExecuted(address indexed minter, uint240 amount, address indexed payer)
CollateralUpdated
event CollateralUpdated(address indexed minter, uint240 collateral, uint240 totalResolvedCollateralRetrieval, bytes32 indexed metadataHash, uint40 timestamp)
EIP712DomainChanged
event EIP712DomainChanged()
IndexUpdated
event IndexUpdated(uint128 indexed index, uint32 indexed rate)
MintCanceled
event MintCanceled(uint48 indexed mintId, address indexed minter, address indexed canceller)
MinterActivated
event MinterActivated(address indexed minter, address indexed caller)
MinterDeactivated
event MinterDeactivated(address indexed minter, uint240 inactiveOwedM, address indexed caller)
MinterFrozen
event MinterFrozen(address indexed minter, uint40 frozenUntil)
MintExecuted
event MintExecuted(uint48 indexed mintId, address indexed minter, uint112 principalAmount, uint240 amount)
MintProposed
event MintProposed(uint48 indexed mintId, address indexed minter, uint240 amount, address indexed destination)
MissedIntervalsPenaltyImposed
event MissedIntervalsPenaltyImposed(address indexed minter, uint40 missedIntervals, uint240 penaltyAmount)
RetrievalCreated
event RetrievalCreated(uint48 indexed retrievalId, address indexed minter, uint240 amount)
RetrievalResolved
event RetrievalResolved(uint48 indexed retrievalId, address indexed minter)
UndercollateralizedPenaltyImposed
event UndercollateralizedPenaltyImposed(address indexed minter, uint240 excessOwedM, uint40 timeSpan, uint240 penaltyAmount)
errors
DeactivatedMinter
error DeactivatedMinter()
DivisionByZero
error DivisionByZero()
ExceedsMaxRepayAmount
error ExceedsMaxRepayAmount(uint240 amount, uint240 maxAmount)
ExpiredMintProposal
error ExpiredMintProposal(uint40 deadline)
FrozenMinter
error FrozenMinter()
FutureTimestamp
error FutureTimestamp()
InactiveMinter
error InactiveMinter()
InvalidMintProposal
error InvalidMintProposal()
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSignatureOrder
error InvalidSignatureOrder()
InvalidSignatureS
error InvalidSignatureS()
InvalidSignatureV
error InvalidSignatureV()
InvalidUInt112
error InvalidUInt112()
InvalidUInt240
error InvalidUInt240()
InvalidUInt48
error InvalidUInt48()
NotApprovedMinter
error NotApprovedMinter()
NotApprovedValidator
error NotApprovedValidator(address validator)
NotEnoughValidSignatures
error NotEnoughValidSignatures(uint256 validSignatures, uint256 requiredThreshold)
OutdatedValidatorTimestamp
error OutdatedValidatorTimestamp(address validator, uint256 timestamp, uint256 lastSignatureTimestamp)
OverflowsPrincipalOfTotalOwedM
error OverflowsPrincipalOfTotalOwedM()
PendingMintProposal
error PendingMintProposal(uint40 activeTimestamp)
RetrievalsExceedCollateral
error RetrievalsExceedCollateral(uint240 totalPendingRetrievals, uint240 collateral)
SignatureArrayLengthsMismatch
error SignatureArrayLengthsMismatch()
SignatureExpired
error SignatureExpired(uint256 deadline, uint256 timestamp)
SignerMismatch
error SignerMismatch()
StaleCollateralUpdate
error StaleCollateralUpdate(uint40 newTimestamp, uint40 earliestAllowedTimestamp)
StillApprovedMinter
error StillApprovedMinter()
Undercollateralized
error Undercollateralized(uint256 activeOwedM, uint256 maxAllowedOwedM)
ZeroBurnAmount
error ZeroBurnAmount()
ZeroMintAmount
error ZeroMintAmount()
ZeroMintDestination
error ZeroMintDestination()
ZeroMToken
error ZeroMToken()
ZeroRetrievalAmount
error ZeroRetrievalAmount()
ZeroTimestamp
error ZeroTimestamp()
ZeroTTGRegistrar
error ZeroTTGRegistrar()
ZeroTTGVault
error ZeroTTGVault()
creation bytecode
0x61012060405234801562000011575f80fd5b50604051620057f6380380620057f6833981016040819052620000349162000277565b60408051808201909152600d81526c4d696e7465724761746577617960981b60208201525f805464ffffffffff4216600160a01b027fffffffffffffff0000000000ffffffff000000000000000000000000000000009091161764e8d4a510001790556001620000a582826200034b565b5046608052620000b462000154565b60a052506001600160a01b03821660c0819052620000e55760405163b8eb034b60e01b815260040160405180910390fd5b5f620000f183620001f1565b6001600160a01b031660e0819052036200011e576040516331c1de8560e01b815260040160405180910390fd5b6001600160a01b0381166101008190526200014c5760405163b01d5e2b60e01b815260040160405180910390fd5b5050620004b4565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f1b600160405162000189919062000417565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f816001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000255919062000491565b92915050565b80516001600160a01b038116811462000272575f80fd5b919050565b5f806040838503121562000289575f80fd5b62000294836200025b565b9150620002a4602084016200025b565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620002d657607f821691505b602082108103620002f557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034657805f5260205f20601f840160051c81016020851015620003225750805b601f840160051c820191505b8181101562000343575f81556001016200032e565b50505b505050565b81516001600160401b03811115620003675762000367620002ad565b6200037f81620003788454620002c1565b84620002fb565b602080601f831160018114620003b5575f84156200039d5750858301515b5f19600386901b1c1916600185901b1785556200040f565b5f85815260208120601f198616915b82811015620003e557888601518255948401946001909101908401620003c4565b50858210156200040357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8083546200042681620002c1565b60018281168015620004415760018114620004575762000485565b60ff198416875282151583028701945062000485565b875f526020805f205f5b858110156200047c5781548a82015290840190820162000461565b50505082870194505b50929695505050505050565b5f60208284031215620004a2575f80fd5b620004ad826200025b565b9392505050565b60805160a05160c05160e05161010051615294620005625f395f81816108d601528181610f34015281816119c601528181611fbf01528181612405015261246901525f818161070101526123b701525f81816107d301528181610b9201528181611344015281816113c3015281816113fd0152818161166701528181611b0501528181611ba701528181612324015281816127f30152612a3c01525f61139b01525f61136b01526152945ff3fe608060405234801561000f575f80fd5b506004361061037d575f3560e01c8063a1088459116101d4578063c8a7d5bf11610109578063e62aa759116100a9578063f20eb87d11610079578063f20eb87d14610b48578063f5abed3214610b5b578063f7a31df614610b6e578063f962a44b14610b81575f80fd5b8063e62aa75914610a96578063e806250a14610ad3578063eda1599a14610b22578063f00c280c14610b35575f80fd5b8063d4084620116100e4578063d408462014610971578063d69527111461097a578063d6b7494f14610994578063e1ebf1ad1461099c575f80fd5b8063c8a7d5bf146108f8578063c8da88e11461093d578063cbf062f714610950575f80fd5b8063aab1d86f11610174578063b9f412b01161014f578063b9f412b01461085b578063c107634c14610863578063c2ee3a08146108b5578063c3b6f939146108d1575f80fd5b8063aab1d86f1461082d578063af9979c914610840578063b599105c14610853575f80fd5b8063a49c8461116101af578063a49c846114610773578063a59b9a35146107bb578063a6ce63cd146107ce578063a8c01961146107f5575f80fd5b8063a108845914610750578063a178094414610758578063a29b67ce1461076b575f80fd5b80634be1c1cd116102b557806374aaf5e91161025557806384b0196e1161022557806384b0196e146106d95780638fb7faf2146106f45780639675adb0146106fc57806399799bbd14610748575f80fd5b806374aaf5e9146106275780637572840e1461063a5780637ad636761461064d5780637efb685b1461069a575f80fd5b8063578f2aa011610290578063578f2aa0146105a7578063663485d7146105c25780636850a999146105cb57806371f8ffe5146105fd575f80fd5b80634be1c1cd146105595780635130406b1461056c57806353d96f2c1461057f575f80fd5b80633644e51511610320578063433ae061116102fb578063433ae061146104ee57806343dc2cad14610517578063452b9fd81461052a57806346f97d0b14610532575f80fd5b80633644e515146104ad5780633b547ae5146104c35780633f9bcc6c146104e6575f80fd5b806314bc32e81161035b57806314bc32e8146104105780631aefb1071461043a57806326987b601461047c57806334636e8e146104a5575f80fd5b80630ab18476146103815780630b88f09c146103a35780630ec06104146103b8575b5f80fd5b610389610b89565b60405163ffffffff90911681526020015b60405180910390f35b6103b66103b1366004614b16565b610bc0565b005b6103cb6103c6366004614b3e565b610ced565b604080516dffffffffffffffffffffffffffff90931683527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911660208301520161039a565b61042361041e366004614b6e565b610fb3565b60405165ffffffffffff909116815260200161039a565b61044d610448366004614b98565b611222565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815260200161039a565b6104846112af565b6040516fffffffffffffffffffffffffffffffff909116815260200161039a565b61038961133b565b6104b5611368565b60405190815260200161039a565b6104d66104d1366004614b98565b6113bd565b604051901515815260200161039a565b6103896113ee565b6105016104fc366004614bf2565b611426565b60405164ffffffffff909116815260200161039a565b6103b6610525366004614b98565b61154b565b61038961165e565b6104b57f22b57ca54bd15c6234b29e87aa1d76a0841b6e65e63d7acacef989de0bc3ff9e81565b61044d610567366004614b98565b61168b565b6104b561057a366004614cc2565b61170b565b5f546105019074010000000000000000000000000000000000000000900464ffffffffff1681565b5f54610484906fffffffffffffffffffffffffffffffff1681565b610389610e1081565b6105de6105d9366004614b98565b611725565b6040516dffffffffffffffffffffffffffff909116815260200161039a565b60025461044d907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b6104b5610635366004614b98565b61179f565b610501610648366004614b98565b611820565b61050161065b366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f908152600460205260409020600201546a0100000000000000000000900464ffffffffff1690565b6105016106a8366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090206002015464ffffffffff1690565b6106e161186b565b60405161039a9796959493929190614d94565b61044d6119a4565b6107237f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161039a565b61044d6119c2565b610723611aff565b610501610766366004614b98565b611b29565b610389611b9b565b610501610781366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090206002015465010000000000900464ffffffffff1690565b6103cb6107c9366004614e54565b611bd3565b6107237f000000000000000000000000000000000000000000000000000000000000000081565b6104d6610803366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205460ff1690565b61044d61083b366004614b98565b61202d565b61044d61084e366004614b98565b6122a1565b6104b561231e565b610484612348565b610501610871366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f908152600460205260409020600201546f01000000000000000000000000000000900464ffffffffff1690565b6108be61271081565b60405161ffff909116815260200161039a565b6107237f000000000000000000000000000000000000000000000000000000000000000081565b6104b5610906366004614e6b565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260086020908152604080832093909416825291909152205490565b61042361094b366004614e54565b6124f5565b5f54700100000000000000000000000000000000900463ffffffff16610389565b61038961fde881565b6003546105de906dffffffffffffffffffffffffffff1681565b6103896127ea565b610a2c6109aa366004614b98565b73ffffffffffffffffffffffffffffffffffffffff9081165f908152600560205260409020805460019091015465ffffffffffff82169364ffffffffff6601000000000000840416936b010000000000000000000000909304909216917dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911690565b6040805165ffffffffffff909516855264ffffffffff909316602085015273ffffffffffffffffffffffffffffffffffffffff909116918301919091527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16606082015260800161039a565b6104d6610aa4366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f90815260046020526040902054610100900460ff1690565b6104d6610ae1366004614b98565b73ffffffffffffffffffffffffffffffffffffffff165f908152600460205260409020600201546a0100000000000000000000900464ffffffffff16421090565b61044d610b30366004614b16565b612817565b6103cb610b43366004614b16565b6128bc565b610501610b56366004614b98565b6128f4565b61044d610b69366004614b98565b6129b8565b6104d6610b7c366004614b98565b612a36565b61044d612a61565b5f610bbb610bb67f0000000000000000000000000000000000000000000000000000000000000000612a94565b612abf565b905090565b610bc933612ace565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090205465ffffffffffff168181141580610c0b575065ffffffffffff8116155b15610c42576040517fd148789900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83165f8181526005602052604080822080547fff0000000000000000000000000000000000000000000000000000000000000016815560010180547fffff0000000000000000000000000000000000000000000000000000000000001690555133929165ffffffffffff8516917f84fab121b74a9cdfebabf1215a1abbe5fe44ba6c1920780c593aa5102a4062369190a4505050565b5f80831580610cfa575082155b15610d31576040517f97b9d4c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f908152600460205260409020805460ff1680158015610d6f57508154610100900460ff16155b15610da6576040517f7bcd1d8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015610e5d57610db587612b28565b610dd087610dc288612cb7565b610dcb88612d04565b612d5d565b604080516dffffffffffffffffffffffffffff841681527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83166020820152929650909450339173ffffffffffffffffffffffffffffffffffffffff8a16917f48f6e7b6e5f16208a0eab9aa837aca65cc7ec94c304ed11ed98c2efc418ba50e910160405180910390a3610ee0565b610e6f87610e6a87612d04565b612ee5565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152909350339073ffffffffffffffffffffffffffffffffffffffff8916907f1391bf1af04eb2e8c6bd62f9c85f621584bc4ed7d2a6def75a0a0835756415429060200160405180910390a35b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639dc29fac906044015f604051808303815f87803b158015610f8a575f80fd5b505af1158015610f9c573d5f803e3d5ffd5b50505050610fa8612348565b505050935093915050565b5f33610fbe81612f8c565b610fc733612fea565b835f03611000576040517f215b990c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831661104d576040517f785187dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61105785612d04565b90506110633382613060565b600380547fffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffff81166e0100000000000000000000000000009182900465ffffffffffff908116600190810180831694850293909317909455604080516080810182528481524264ffffffffff908116602080840191825273ffffffffffffffffffffffffffffffffffffffff8d81168587018181527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d811660608901818152335f818152600589528c90209a518b54995195519d167fffffffffffffffffffffffffffffffffffffffffff00000000000000000000009099169890981766010000000000009490991693909302979097177fff0000000000000000000000000000000000000000ffffffffffffffffffffff166b0100000000000000000000009a9094169990990292909217865590519490990180547fffff00000000000000000000000000000000000000000000000000000000000016949096169390931790945591519182529297509092917fc9b63ed98dd6e3f2536b8c9cd1668dd153c8a9207579556cb74ce9168b9c21d8910160405180910390a4505092915050565b5f61122c82611820565b64ffffffffff16421061124057505f919050565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600460205260409020600181015481547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182169162010000909104168082106112a757505f949350505050565b039392505050565b5f8054610bbb90611322906fffffffffffffffffffffffffffffffff81169061131d906112f590700100000000000000000000000000000000900463ffffffff16613104565b5f5474010000000000000000000000000000000000000000900464ffffffffff16420361311b565b61313d565b71ffffffffffffffffffffffffffffffffffff16613171565b5f610bbb610bb67f000000000000000000000000000000000000000000000000000000000000000061318c565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461139857610bbb6131b7565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f6113e87f000000000000000000000000000000000000000000000000000000000000000083613252565b92915050565b5f610bbb61fde8611421610bb67f000000000000000000000000000000000000000000000000000000000000000061327e565b6132a9565b5f3361143181612f8c565b86831415806114405750828514155b15611477576040517fa68dc7d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61148a338d8d8d8d8d8d8d8d8d8d6132ca565b915061149533612b28565b61149f33836134a1565b5f6114a98d612d04565b90505f6114b7338e8e6136bd565b604080517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85811682528316602082015264ffffffffff87168183015290519192508c9133917f8c7a373ea6d1cedfcb77f0e5520921cc5d5a1a16b960c0c13c0f96b8dc24caa8919081900360600190a3611531338386613868565b611539612348565b505050509a9950505050505050505050565b61155481612a36565b61158a576040517f70b34fc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604090208054610100900460ff16156115ef576040517f30b2dfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155604051339073ffffffffffffffffffffffffffffffffffffffff8416907f2531adeb71f8681e6f4644f88cb102c71370151986071c92d43a7e82d217462a905f90a35050565b5f610bbb610bb67f00000000000000000000000000000000000000000000000000000000000000006139aa565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205460ff166116bd575f6113e8565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600660205260409020546113e8907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166139d5565b5f61171a8787878787876139e7565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205460ff16611757575f6113e8565b5073ffffffffffffffffffffffffffffffffffffffff165f908152600660205260409020547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205460ff166117d1575f6113e8565b6127106117dc6113ee565b63ffffffff166117eb84611222565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16028161181957611819614e93565b0492915050565b5f611829611b9b565b73ffffffffffffffffffffffffffffffffffffffff9092165f9081526004602052604090206002015464ffffffffff1663ffffffff9290921691909101919050565b5f606080828080836001463084806040519080825280602002602001820160405280156118a2578160200160208202803683370190505b507f0f0000000000000000000000000000000000000000000000000000000000000094939291908480546118d590614ec0565b80601f016020809104026020016040519081016040528092919081815260200182805461190190614ec0565b801561194c5780601f106119235761010080835404028352916020019161194c565b820191905f5260205f20905b81548152906001019060200180831161192f57829003601f168201915b505050505094506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525093929190965096509650965096509650965090919293949596565b6003545f90610bbb906dffffffffffffffffffffffffffff166139d5565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a519190614f11565b6002546003549192505f917dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911690611aa0906dffffffffffffffffffffffffffff16611a9b6112af565b613ab8565b611aaa9190614f55565b9050817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115611afa5703919050565b505090565b5f610bbb7f0000000000000000000000000000000000000000000000000000000000000000613ac3565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260046020526040812081611b56611b9b565b60028301549091505f90611b7e9064ffffffffff808216916501000000000090041684613af4565b9150611b92905063ffffffff831682614f93565b95945050505050565b5f610bbb611bcb610bb67f0000000000000000000000000000000000000000000000000000000000000000613b7d565b610e10613ba8565b5f8033611bdf81612f8c565b611be833612fea565b335f908152600560205260409020805460018201547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935065ffffffffffff81169064ffffffffff6601000000000000820416906b010000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16878314611c99576040517fd148789900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ca261133b565b63ffffffff16830190508064ffffffffff16421015611cfb576040517fdddc549900000000000000000000000000000000000000000000000000000000815264ffffffffff821660048201526024015b60405180910390fd5b5f611d04610b89565b63ffffffff16820190508064ffffffffff16421115611d58576040517fa170e12000000000000000000000000000000000000000000000000000000000815264ffffffffff82166004820152602401611cf2565b5050611d643387613060565b335f90815260056020526040902080547fff0000000000000000000000000000000000000000000000000000000000000016815560010180547fffff000000000000000000000000000000000000000000000000000000000000169055611dca86613bc2565b600354604080516dffffffffffffffffffffffffffff80851682527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b166020830152939a509290911691339165ffffffffffff8716917fc7f1a91b0a382c263a18fea7b2908a6fcd90ebf2a9fde4bdf483b8ecceff1311910160405180910390a36002546dffffffffffffffffffffffffffff828116818b160191611e8d907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613bc2565b6dffffffffffffffffffffffffffff16820110611ed6576040517f1123990900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff928316179055335f908152600660205260409081902080547fffff0000000000000000000000000000000000000000000000000000000000008116938c167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918216018116939093179055517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291891660248201527f000000000000000000000000000000000000000000000000000000000000000091909116906340c10f19906044015f604051808303815f87803b158015612003575f80fd5b505af1158015612015573d5f803e3d5ffd5b50505050612021612348565b50505050505050915091565b5f8161203881612f8c565b61204183612a36565b15612078576040517fe2a4b46500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61208183612b28565b5f61208b84611725565b9050612096816139d5565b600380547fffffffffffffffffffffffffffffffffffff000000000000000000000000000081166dffffffffffffffffffffffffffff918216859003909116179055600280547fffff00000000000000000000000000000000000000000000000000000000000081167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91821684018216179091556040519082168152909350339073ffffffffffffffffffffffffffffffffffffffff8616907f441d4e9d05bbbeb9019e911d76bdd0bf9389b0755175567d4e59607be5348d9b9060200160405180910390a373ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320838155600180820180547fffff0000000000000000000000000000000000000000000000000000000000009081169091556002830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556005855283862080547fff0000000000000000000000000000000000000000000000000000000000000016815590910180548216905581547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017909155600690925290912080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86169216919091179055612299612348565b505050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604081205460ff166123175773ffffffffffffffffffffffffffffffffffffffff82165f908152600660205260409020547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166113e8565b5f92915050565b5f610bbb7f0000000000000000000000000000000000000000000000000000000000000000613bd4565b5f806123526119c2565b90507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81161561245d576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660248301527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015f604051808303815f87803b158015612446575f80fd5b505af1158015612458573d5f803e3d5ffd5b505050505b612465613bff565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9f412b06040518163ffffffff1660e01b81526004016020604051808303815f875af11580156124d1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afa9190614fb1565b5f3361250081612f8c565b825f03612539576040517faa58a19400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff8116740100000000000000000000000000000000000000009182900465ffffffffffff90811660010190811690920217909155335f9081526004602052604081208054929450916201000090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906125d586612d04565b60018401549091505f9061260a9083907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16614f55565b9050807dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1610156126b0576040517f10bb3f430000000000000000000000000000000000000000000000000000000081527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316600483015284166024820152604401611cf2565b60028401805464ffffffffff42166f01000000000000000000000000000000027fffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffff9091161790556001840180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8084167fffff00000000000000000000000000000000000000000000000000000000000092831617909255335f81815260076020908152604080832065ffffffffffff8d16845290915281208054948716949093169390931790915561278191613060565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168152339065ffffffffffff8816907f83f709bc37ea6de507e30b18311aa7a86c08833fa447f2c76ccc463c8936c4999060200160405180910390a35050505050919050565b5f610bbb610bb67f0000000000000000000000000000000000000000000000000000000000000000613d4f565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812054610100900460ff166128b35773ffffffffffffffffffffffffffffffffffffffff83165f9081526007602052604081209061287684613d7a565b65ffffffffffff16815260208101919091526040015f20547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166128b5565b5f5b9392505050565b5f806128e9846128d36128ce86612d04565b613dbb565b6dffffffffffffffffffffffffffff1685610ced565b909590945092505050565b5f6128fe33612ace565b61290661165e565b73ffffffffffffffffffffffffffffffffffffffff83165f8181526004602090815260409182902060020180547fffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffff166a010000000000000000000063ffffffff96909616420164ffffffffff811696870291909117909155915193845290935090917f1ac7b35bca40be2823e4880f1b2e9ef02fa4c7bd62aed73c2ea2959232a1f9f5910160405180910390a2919050565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260046020526040812054610100900460ff166123175773ffffffffffffffffffffffffffffffffffffffff82165f908152600460205260409020600101547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166113e8565b5f6113e87f000000000000000000000000000000000000000000000000000000000000000083613dcd565b6002545f907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612a8e6119a4565b01905090565b5f6113e8827f6d696e745f74746c000000000000000000000000000000000000000000000000613df9565b5f6113e88263ffffffff613e88565b612ad7816113bd565b612b25576040517ff731555300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401611cf2565b50565b5f612b3282611725565b9050806dffffffffffffffffffffffffffff165f03612b4f575050565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812060028101549091908190612ba29064ffffffffff8082169165010000000000900416612b9d611b9b565b613af4565b915091508164ffffffffff165f03612bbb575050505050565b808360020160056101000a81548164ffffffffff021916908364ffffffffff1602179055505f612c0d868464ffffffffff16876dffffffffffffffffffffffffffff16612c089190614fe0565b613e96565b9050806dffffffffffffffffffffffffffff165f03612c2e57505050505050565b8573ffffffffffffffffffffffffffffffffffffffff167f4fb8bb7b0278c9f68d34ce501b521ecd2e3c1bc48fe37eda47db36da6defc7ef84612c70846139d5565b6040805164ffffffffff90931683527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911660208301520160405180910390a2505050505050565b5f6dffffffffffffffffffffffffffff821115612d00576040517fca21dbd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115612d00576040517f2a49c10d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80612d71612d6b86611725565b85613ff6565b9150612d7c826139d5565b9050827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115612e22576040517f37666f1d0000000000000000000000000000000000000000000000000000000081527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316600483015284166024820152604401611cf2565b73ffffffffffffffffffffffffffffffffffffffff949094165f90815260066020526040902080547fffff00000000000000000000000000000000000000000000000000000000000081166dffffffffffffffffffffffffffff8481167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384160390921617909155600380547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000811690831684900390921691909117905593915050565b5f612ef8612ef2846122a1565b83614024565b73ffffffffffffffffffffffffffffffffffffffff9093165f90815260066020526040902080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80821686900381167fffff0000000000000000000000000000000000000000000000000000000000009283161790925560028054808416879003909316929091169190911790555090919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526004602052604090205460ff16612b25576040517f7bcd1d8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f908152600460205260409020600201546a0100000000000000000000900464ffffffffff16421015612b25576040517f1526e62e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61306a8361179f565b90505f827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166130978561168b565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16019050818111156130fe576040517f5033ec120000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401611cf2565b50505050565b5f61271063ffffffff831664e8d4a5100002611819565b5f6128b56301e1338067ffffffffffffffff851663ffffffff85160204614072565b5f64e8d4a510006fffffffffffffffffffffffffffffffff841665ffffffffffff84160264e8d4a50fff015b049392505050565b5f6113e8826fffffffffffffffffffffffffffffffff613e88565b5f6113e8827f6d696e745f64656c617900000000000000000000000000000000000000000000613df9565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f1b60016040516131ea919061501e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f6128b5837f76616c696461746f727300000000000000000000000000000000000000000000846140eb565b5f6113e8827f6d696e745f726174696f00000000000000000000000000000000000000000000613df9565b5f8163ffffffff168363ffffffff16106132c357816128b5565b5090919050565b425f805b83811015613440575f8111801561336057508888600183038181106132f5576132f56150f3565b905060200201602081019061330a9190614b98565b73ffffffffffffffffffffffffffffffffffffffff16898983818110613332576133326150f3565b90506020020160208101906133479190614b98565b73ffffffffffffffffffffffffffffffffffffffff1611155b15613397576040517f139f3c9200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134088e8e8e8e8e8e8e888181106133b1576133b16150f3565b90506020020160208101906133c69190614b98565b8d8d898181106133d8576133d86150f3565b905060200201358c8c8a8181106133f1576133f16150f3565b90506020028101906134039190615120565b61418b565b156134385761342f83888884818110613423576134236150f3565b9050602002013561434d565b92508160010191505b6001016132ce565b505f61344a61231e565b905080821015613490576040517f74e8306f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401611cf2565b50509b9a5050505050505050505050565b5f6134ab83611725565b9050806dffffffffffffffffffffffffffff165f036134c957505050565b5f6134d38461179f565b90507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81106135005750505050565b5f61350a82613dbb565b9050826dffffffffffffffffffffffffffff16816dffffffffffffffffffffffffffff161061353a575050505050565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260046020526040812060028101549091906135839064ffffffffff8082169165010000000000900416614369565b90508064ffffffffff168664ffffffffff16116135a35750505050505050565b8086038386035f6135f98a6135b6611b9b565b63ffffffff168564ffffffffff1685026dffffffffffffffffffffffffffff16816135e3576135e3614e93565b046dffffffffffffffffffffffffffff16613e96565b9050806dffffffffffffffffffffffffffff165f0361361e5750505050505050505050565b8973ffffffffffffffffffffffffffffffffffffffff167fadbe0a005ef4d2903a69fd3053b1c8dfc083430632f549a92a1d3bc648104ae361365f846139d5565b85613669856139d5565b604080517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff948516815264ffffffffff93909316602084015292168183015290519081900360600190a250505050505050505050565b5f805b828110156137e9575f6136ea8585848181106136de576136de6150f3565b90506020020135613d7a565b73ffffffffffffffffffffffffffffffffffffffff87165f90815260076020908152604080832065ffffffffffff851684529091528120549192507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116908190036137565750506137e1565b73ffffffffffffffffffffffffffffffffffffffff87165f81815260076020908152604080832065ffffffffffff8716808552925280832080547fffff000000000000000000000000000000000000000000000000000000000000169055519684019690917f7318b8ec2c2570ee6068ac690bbda62f9d13d38d52e36e23e0885101a5ffab0791a350505b6001016136c0565b5073ffffffffffffffffffffffffffffffffffffffff9093165f90815260046020526040902060010180547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216869003167fffff0000000000000000000000000000000000000000000000000000000000009091161790555090919050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260046020526040812060028101549091906138dd906138bf9064ffffffffff808216916f01000000000000000000000000000000900416614369565b6138d66138ca611b9b565b63ffffffff164261434d565b4203614369565b90508064ffffffffff168364ffffffffff1611613937576040517f17ea884500000000000000000000000000000000000000000000000000000000815264ffffffffff808516600483015282166024820152604401611cf2565b5080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909316620100000261ffff9093169290921782556002909101805464ffffffffff9092167fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090921691909117905550565b5f6113e8827f6d696e7465725f667265657a655f74696d650000000000000000000000000000613df9565b5f6113e8826139e26112af565b614385565b5f61171a7f22b57ca54bd15c6234b29e87aa1d76a0841b6e65e63d7acacef989de0bc3ff9e5f1b88888888604051602001613a23929190615181565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083019590955273ffffffffffffffffffffffffffffffffffffffff909316928101929092526060820152608081019190915260a0810185905260c0810184905260e00160405160208183030381529060405280519060200120614390565b5f6128b583836143f1565b5f6113e8613af1837f6d696e7465725f726174655f6d6f64656c000000000000000000000000000000613df9565b90565b5f805f613b018686614369565b90508564ffffffffff165f03613b1b575f92509050613b75565b5f613b2682426151c1565b90508463ffffffff168164ffffffffff161015613b4857505f92509050613b75565b8463ffffffff168164ffffffffff1681613b6457613b64614e93565b0493505063ffffffff841683020190505b935093915050565b5f6113e8827f7570646174655f636f6c6c61746572616c5f696e74657276616c000000000000613df9565b5f8163ffffffff168363ffffffff16116132c357816128b5565b5f6113e882613bcf6112af565b614422565b5f6113e8827f7570646174655f636f6c6c61746572616c5f7468726573686f6c640000000000613df9565b5f80613c0961442d565b5f5490915064ffffffffff740100000000000000000000000000000000000000009091041642148015613c5957505f5463ffffffff82811670010000000000000000000000000000000090920416145b15613c775750505f546fffffffffffffffffffffffffffffffff1690565b613c7f6112af565b5f80546fffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811770010000000000000000000000000000000063ffffffff8616908102919091177fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000004264ffffffffff16021783556040519395509290917f8f9a1730052b867fdeb484b52fbc51e9bb62830781805ac95c382bbf8ea717a291a35090565b5f6113e8827f70656e616c74795f726174650000000000000000000000000000000000000000613df9565b5f65ffffffffffff821115612d00576040517f069c6d4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6113e882613dc86112af565b61452d565b5f6128b5837f6d696e7465727300000000000000000000000000000000000000000000000000846140eb565b6040517f8eaa6ac0000000000000000000000000000000000000000000000000000000008152600481018290525f9073ffffffffffffffffffffffffffffffffffffffff841690638eaa6ac090602401602060405180830381865afa158015613e64573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b59190614f11565b5f8183106132c357816128b5565b5f8172ffffffffffffffffffffffffffffffffffffff165f03613eba57505f6113e8565b5f613ec36127ea565b90508063ffffffff165f03613edb575f9150506113e8565b60035461271063ffffffff831672ffffffffffffffffffffffffffffffffffffff86160204906dffffffffffffffffffffffffffff908116820190811115613f3a5750506003546dffffffffffffffffffffffffffff90811681038116905b600380547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff92831617905573ffffffffffffffffffffffffffffffffffffffff959095165f90815260066020526040902080547fffff00000000000000000000000000000000000000000000000000000000000081169683167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918216011695909517909455509192915050565b5f816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16106132c357816128b5565b5f817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16106132c357816128b5565b5f68ffffffffffffffffff821680026123288102642e90edd000820464174876e800830402016c010f6b2be4706a13fc200000000182633b9aca008304669536c708910000018568ffffffffffffffffff1602905080820381830164e8d4a5100002816140e1576140e1614e93565b0495945050505050565b6040517fd7d1c1c00000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301525f919085169063d7d1c1c090604401602060405180830381865afa15801561415f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061418391906151df565b949350505050565b5f835f036141c5576040517fda16d76700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4264ffffffffff16841115614206576040517f0ff02cef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808b165f90815260086020908152604080832093891683529290522054808511614297576040517f2e7a0bcb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024810186905260448101829052606401611cf2565b6142a0866113bd565b6142ad575f915050614340565b6142fa866142bf8d8d8d8d8d8c6139e7565b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061453892505050565b614307575f915050614340565b505073ffffffffffffffffffffffffffffffffffffffff808a165f90815260086020908152604080832093881683529290522083905560015b9998505050505050505050565b5f8164ffffffffff168364ffffffffff16106132c357816128b5565b5f8164ffffffffff168364ffffffffff16116132c357816128b5565b5f6128b58383614555565b5f614399611368565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f64e8d4a510006dffffffffffffffffffffffffffff84166fffffffffffffffffffffffffffffffff841602613169565b5f6128b5838361458d565b5f805f614438611aff565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2c4e722e00000000000000000000000000000000000000000000000000000000179052905173ffffffffffffffffffffffffffffffffffffffff92909216916144b491906151fe565b5f60405180830381855afa9150503d805f81146144ec576040519150601f19603f3d011682016040523d82523d5f602084013e6144f1565b606091505b509150915081801561450557506020815110155b61450f575f614526565b61452681806020019051810190610bb69190614f11565b9250505090565b5f6128b5838361464e565b5f6145448484846146e5565b806141835750614183848484614734565b5f64e8d4a510006dffffffffffffffffffffffffffff84166fffffffffffffffffffffffffffffffff84160264e8d4a50fff01613169565b5f816fffffffffffffffffffffffffffffffff165f036145d9576040517f23d359a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128b56fffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861664e8d4a51000028201018161464857614648614e93565b04612cb7565b5f816fffffffffffffffffffffffffffffffff165f0361469a576040517f23d359a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128b56fffffffffffffffffffffffffffffffff83167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851664e8d4a51000028161464857614648614e93565b5f815160400361470e57602082015160408301516147058686848461487d565b925050506128b5565b5f61471a8585856148a6565b600581111561472b5761472b615219565b14949350505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401614761929190615246565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e00000000000000000000000000000000000000000000000000000000179052516147e291906151fe565b5f60405180830381855afa9150503d805f811461481a576040519150601f19603f3d011682016040523d82523d5f602084013e61481f565b606091505b509150915081801561483357506020815110155b8015614873575080517f1626ba7e00000000000000000000000000000000000000000000000000000000906148719083016020908101908401614f11565b145b9695505050505050565b5f8061488b868686866148e0565b600581111561489c5761489c615219565b1495945050505050565b5f805f6148b3858561491b565b90925090505f8260058111156148cb576148cb615219565b146148d65781614873565b614873868261495f565b5f805f6148ee86868661499a565b90925090505f82600581111561490657614906615219565b14614911578161171a565b61171a878261495f565b5f8082516041146149315750600290505f614958565b6020830151604084015160608501515f1a9190614950878484846149e1565b945094505050505b9250929050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b35760056128b5565b5f80601b60ff84901c017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84166149d3878388846149e1565b935093505050935093915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614a165750600390505f614ae5565b8460ff16601b14158015614a2e57508460ff16601c14155b15614a3e5750600490505f614ae5565b604080515f81526020810180835288905260ff871691810191909152606081018590526080810184905260019060a0016020604051602081039080840390855afa158015614a8e573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615614adc575f81614ae0565b60015f5b915091505b94509492505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614b11575f80fd5b919050565b5f8060408385031215614b27575f80fd5b614b3083614aee565b946020939093013593505050565b5f805f60608486031215614b50575f80fd5b614b5984614aee565b95602085013595506040909401359392505050565b5f8060408385031215614b7f575f80fd5b82359150614b8f60208401614aee565b90509250929050565b5f60208284031215614ba8575f80fd5b6128b582614aee565b5f8083601f840112614bc1575f80fd5b50813567ffffffffffffffff811115614bd8575f80fd5b6020830191508360208260051b8501011115614958575f80fd5b5f805f805f805f805f8060c08b8d031215614c0b575f80fd5b8a35995060208b013567ffffffffffffffff80821115614c29575f80fd5b614c358e838f01614bb1565b909b50995060408d0135985060608d0135915080821115614c54575f80fd5b614c608e838f01614bb1565b909850965060808d0135915080821115614c78575f80fd5b614c848e838f01614bb1565b909650945060a08d0135915080821115614c9c575f80fd5b50614ca98d828e01614bb1565b915080935050809150509295989b9194979a5092959850565b5f805f805f8060a08789031215614cd7575f80fd5b614ce087614aee565b955060208701359450604087013567ffffffffffffffff811115614d02575f80fd5b614d0e89828a01614bb1565b979a9699509760608101359660809091013595509350505050565b5f5b83811015614d43578181015183820152602001614d2b565b50505f910152565b5f8151808452614d62816020860160208601614d29565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152614dd060e084018a614d4b565b8381036040850152614de2818a614d4b565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015614e4257835183529284019291840191600101614e26565b50909c9b505050505050505050505050565b5f60208284031215614e64575f80fd5b5035919050565b5f8060408385031215614e7c575f80fd5b614e8583614aee565b9150614b8f60208401614aee565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181811c90821680614ed457607f821691505b602082108103614f0b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215614f21575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818116838216019080821115614f8c57614f8c614f28565b5092915050565b64ffffffffff818116838216019080821115614f8c57614f8c614f28565b5f60208284031215614fc1575f80fd5b81516fffffffffffffffffffffffffffffffff811681146128b5575f80fd5b72ffffffffffffffffffffffffffffffffffffff82811682821681810283169291811582850482141761501557615015614f28565b50505092915050565b5f8083545f60018260011c9150600183168061503b57607f831692505b60208084108203615073577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b81801561508757600181146150ba576150e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528415158502890196506150e5565b5f8a8152602090205f5b868110156150dd5781548b8201529085019083016150c4565b505084890196505b509498975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615153575f80fd5b83018035915067ffffffffffffffff82111561516d575f80fd5b602001915036819003821315614958575f80fd5b5f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156151ae575f80fd5b8260051b80858437919091019392505050565b64ffffffffff828116828216039080821115614f8c57614f8c614f28565b5f602082840312156151ef575f80fd5b815180151581146128b5575f80fd5b5f825161520f818460208701614d29565b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b828152604060208201525f6141836040830184614d4b56fea2646970667358221220decb3a3a9db6ebea55049121aa2d482d98ca58a9ca23cfccb51d08010c78d75664736f6c63430008170033000000000000000000000000119fbeedd4f4f4298fb59b720d5654442b81ae2c000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b