0 txs
0 calls
constructor
constructor(address voteToken_, address emergencyGovernorDeployer_, address powerTokenDeployer_, address standardGovernorDeployer_, address bootstrapToken_, uint256 standardProposalFee_, uint16 emergencyProposalThresholdRatio_, uint16 zeroProposalThresholdRatio_, address[] allowedCashTokens_)
functions
BALLOT_TYPEHASH
viewfunction BALLOT_TYPEHASH() view returns (bytes32)
BALLOT_WITH_REASON_TYPEHASH
viewfunction BALLOT_WITH_REASON_TYPEHASH() view returns (bytes32)
BALLOTS_TYPEHASH
viewfunction BALLOTS_TYPEHASH() view returns (bytes32)
BALLOTS_WITH_REASON_TYPEHASH
viewfunction BALLOTS_WITH_REASON_TYPEHASH() view returns (bytes32)
CLOCK_MODE
purefunction CLOCK_MODE() pure returns (string)
clock
viewfunction clock() view returns (uint48)
COUNTING_MODE
purefunction COUNTING_MODE() pure returns (string)
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_)
emergencyGovernor
viewfunction emergencyGovernor() view returns (address)
emergencyGovernorDeployer
viewfunction emergencyGovernorDeployer() view returns (address)
getBallotDigest
viewfunction getBallotDigest(uint256 proposalId_, uint8 support_) view returns (bytes32)
getBallotsDigest
viewfunction getBallotsDigest(uint256[] proposalIds_, uint8[] supportList_) view returns (bytes32)
getBallotsWithReasonDigest
viewfunction getBallotsWithReasonDigest(uint256[] proposalIds_, uint8[] supportList_, string[] reasonList_) view returns (bytes32)
getBallotWithReasonDigest
viewfunction getBallotWithReasonDigest(uint256 proposalId_, uint8 support_, string reason_) view returns (bytes32)
getProposal
viewfunction getProposal(uint256 proposalId_) view returns (uint48 voteStart_, uint48 voteEnd_, uint8 state_, uint256 noVotes_, uint256 yesVotes_, address proposer_, uint256 quorum_, uint16 quorumNumerator_)
getVotes
viewfunction getVotes(address account_, uint256 timepoint_) view returns (uint256)
hashProposal
viewfunction hashProposal(address[], uint256[], bytes[] callDatas_, bytes32) view returns (uint256)
hashProposal
viewfunction hashProposal(bytes callData_) view returns (uint256)
hasVoted
viewfunction hasVoted(uint256 proposalId, address voter) view returns (bool hasVoted)
isAllowedCashToken
viewfunction isAllowedCashToken(address token_) view returns (bool)
name
viewfunction name() view returns (string)
ONE
viewfunction ONE() view returns (uint256)
powerTokenDeployer
viewfunction powerTokenDeployer() view returns (address)
proposalDeadline
viewfunction proposalDeadline(uint256 proposalId_) view returns (uint256)
proposalProposer
viewfunction proposalProposer(uint256 proposalId_) view returns (address)
proposalQuorum
viewfunction proposalQuorum(uint256 proposalId) view returns (uint256)
proposalSnapshot
viewfunction proposalSnapshot(uint256 proposalId_) view returns (uint256)
proposalThreshold
purefunction proposalThreshold() pure returns (uint256)
proposalVotes
viewfunction proposalVotes(uint256 proposalId_) view returns (uint256, uint256, uint256)
quorum
viewfunction quorum() view returns (uint256)
quorumDenominator
purefunction quorumDenominator() pure returns (uint256)
quorumNumerator
viewfunction quorumNumerator() view returns (uint256)
standardGovernor
viewfunction standardGovernor() view returns (address)
standardGovernorDeployer
viewfunction standardGovernorDeployer() view returns (address)
state
viewfunction state(uint256 proposalId_) view returns (uint8 state_)
thresholdRatio
viewfunction thresholdRatio() view returns (uint16)
token
viewfunction token() view returns (address)
voteToken
viewfunction voteToken() view returns (address)
votingDelay
viewfunction votingDelay() view returns (uint256)
votingPeriod
viewfunction votingPeriod() view returns (uint256)
castVote
nonpayablefunction castVote(uint256 proposalId_, uint8 support_) returns (uint256 weight_)
castVoteBySig
nonpayablefunction castVoteBySig(address voter_, uint256 proposalId_, uint8 support_, bytes signature_) returns (uint256 weight_)
castVoteBySig
nonpayablefunction castVoteBySig(uint256 proposalId_, uint8 support_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256 weight_)
castVotes
nonpayablefunction castVotes(uint256[] proposalIds_, uint8[] supportList_) returns (uint256 weight_)
castVotesBySig
nonpayablefunction castVotesBySig(address voter_, uint256[] proposalIds_, uint8[] supportList_, bytes signature_) returns (uint256 weight_)
castVotesBySig
nonpayablefunction castVotesBySig(uint256[] proposalIds_, uint8[] supportList_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256 weight_)
castVotesWithReason
nonpayablefunction castVotesWithReason(uint256[] proposalIds_, uint8[] supportList_, string[] reasonList_) returns (uint256 weight_)
castVotesWithReasonBySig
nonpayablefunction castVotesWithReasonBySig(address voter_, uint256[] proposalIds_, uint8[] supportList_, string[] reasonList_, bytes signature_) returns (uint256 weight_)
castVotesWithReasonBySig
nonpayablefunction castVotesWithReasonBySig(uint256[] proposalIds_, uint8[] supportList_, string[] reasonList_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256 weight_)
castVoteWithReason
nonpayablefunction castVoteWithReason(uint256 proposalId_, uint8 support_, string reason_) returns (uint256 weight_)
castVoteWithReasonBySig
nonpayablefunction castVoteWithReasonBySig(address voter_, uint256 proposalId_, uint8 support_, string reason_, bytes signature_) returns (uint256 weight_)
castVoteWithReasonBySig
nonpayablefunction castVoteWithReasonBySig(uint256 proposalId_, uint8 support_, string reason_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256 weight_)
execute
payablefunction execute(address[] targets_, uint256[] values_, bytes[] callDatas_, bytes32) payable returns (uint256 proposalId_)
propose
nonpayablefunction propose(address[] targets_, uint256[] values_, bytes[] callDatas_, string description_) returns (uint256 proposalId_)
resetToPowerHolders
nonpayablefunction resetToPowerHolders()
resetToZeroHolders
nonpayablefunction resetToZeroHolders()
setCashToken
nonpayablefunction setCashToken(address newCashToken_, uint256 newProposalFee_)
setEmergencyProposalThresholdRatio
nonpayablefunction setEmergencyProposalThresholdRatio(uint16 newThresholdRatio_)
setZeroProposalThresholdRatio
nonpayablefunction setZeroProposalThresholdRatio(uint16 newThresholdRatio_)
events
AllowedCashTokensSet
event AllowedCashTokensSet(address[] allowedCashTokens)
EIP712DomainChanged
event EIP712DomainChanged()
ProposalCreated
event ProposalCreated(uint256 proposalId, address proposer, address[] targets, uint256[] values, string[] signatures, bytes[] callDatas, uint256 voteStart, uint256 voteEnd, string description)
ProposalExecuted
event ProposalExecuted(uint256 proposalId)
QuorumNumeratorUpdated
event QuorumNumeratorUpdated(uint256 oldQuorumNumerator, uint256 newQuorumNumerator)
ResetExecuted
event ResetExecuted(address indexed bootstrapToken, address standardGovernor, address emergencyGovernor, address powerToken)
ThresholdRatioSet
event ThresholdRatioSet(uint16 thresholdRatio)
VoteCast
event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 weight, string reason)
errors
AlreadyVoted
error AlreadyVoted()
ArrayLengthMismatch
error ArrayLengthMismatch(uint256 length1, uint256 length2)
EmptyProposalIdsArray
error EmptyProposalIdsArray()
ExecutionFailed
error ExecutionFailed(bytes data)
InvalidCallData
error InvalidCallData()
InvalidCallDatasLength
error InvalidCallDatasLength()
InvalidCashToken
error InvalidCashToken()
InvalidCashTokenAddress
error InvalidCashTokenAddress()
InvalidEmergencyGovernorDeployerAddress
error InvalidEmergencyGovernorDeployerAddress()
InvalidPowerTokenDeployerAddress
error InvalidPowerTokenDeployerAddress()
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSignatureS
error InvalidSignatureS()
InvalidSignatureV
error InvalidSignatureV()
InvalidStandardGovernorDeployerAddress
error InvalidStandardGovernorDeployerAddress()
InvalidTarget
error InvalidTarget()
InvalidTargetsLength
error InvalidTargetsLength()
InvalidThresholdRatio
error InvalidThresholdRatio(uint256 thresholdRatio, uint256 minThresholdRatio, uint256 maxThresholdRatio)
InvalidValue
error InvalidValue()
InvalidValuesLength
error InvalidValuesLength()
InvalidVoteStart
error InvalidVoteStart()
InvalidVoteTokenAddress
error InvalidVoteTokenAddress()
NoAllowedCashTokens
error NoAllowedCashTokens()
NotSelf
error NotSelf()
ProposalCannotBeExecuted
error ProposalCannotBeExecuted()
ProposalDoesNotExist
error ProposalDoesNotExist()
ProposalExists
error ProposalExists()
ProposalInactive
error ProposalInactive(uint8 state)
SignatureExpired
error SignatureExpired(uint256 deadline, uint256 timestamp)
SignerMismatch
error SignerMismatch()
UnexpectedPowerTokenDeployed
error UnexpectedPowerTokenDeployed(address expected, address deployed)
UnexpectedStandardGovernorDeployed
error UnexpectedStandardGovernorDeployed(address expected, address deployed)
ZeroVotingPower
error ZeroVotingPower()
creation bytecode
0x61014060405234801562000011575f80fd5b506040516200577a3803806200577a83398101604081905262000034916200072b565b60408051808201909152600c81526b2d32b937a3b7bb32b93737b960a11b602082015289838282815f62000069828262000911565b5046608052620000786200026e565b60a052506001600160a01b03811660c0819052620000a9576040516316d3e4a360e01b815260040160405180910390fd5b50620000b79050816200030a565b5050506001600160a01b03881660e0819052620000e757604051635788a27960e11b815260040160405180910390fd5b6001600160a01b0387166101008190526200011557604051631412fc3f60e11b815260040160405180910390fd5b6001600160a01b03861661012081905262000143576040516333927a8160e21b815260040160405180910390fd5b80515f0362000165576040516311596cb960e01b815260040160405180910390fd5b5f5b8151811015620001ef575f828281518110620001875762000187620009dd565b602002602001015190505f6001600160a01b0316816001600160a01b031603620001c457604051634e71231360e11b815260040160405180910390fd5b6001600160a01b03165f908152600460205260409020805460ff191660019081179091550162000167565b507f786ba9170c247d41ad3b2f65513f754efd3172b40b4063d70c2cf5fdde4cb83981604051620002219190620009f1565b60405180910390a16200025c88888888855f81518110620002465762000246620009dd565b6020026020010151888a620003ea60201b60201c565b50505050505050505050505062000adc565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f1b5f604051620002a2919062000a3f565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6127108161ffff16118062000324575061010f61ffff8216105b156200035e5760405163073543c360e31b815261ffff8216600482015261010f602482015261271060448201526064015b60405180910390fd5b6003546040805161ffff928316815291831660208301527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a16003805461ffff191661ffff83169081179091556040519081527fcae6f683fe1ab8ec2737e8d7cc5b306931ad2c39aa1701b65b3e4d9492bffa649060200160405180910390a150565b5f805f80896001600160a01b031663777f14d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000451919062000ab9565b90505f896001600160a01b031663777f14d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000491573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b7919062000ab9565b6040516306bc04c760e21b81526001600160a01b038481166004830152808316602483015261ffff8a166044830152919250908d1690631af0131c906064016020604051808303815f875af115801562000513573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000539919062000ab9565b604051638489e17960e01b81526001600160a01b03848116600483015280831660248301528a811660448301526064820189905265048c273950006084830152919550908b1690638489e1799060a4016020604051808303815f875af1158015620005a6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005cc919062000ab9565b9450846001600160a01b0316816001600160a01b031614620006155760405163a20b5bb960e01b81526001600160a01b0380831660048301528616602482015260440162000355565b60405163d9181cd360e01b81526001600160a01b038a81166004830152868116602483015289811660448301528c169063d9181cd3906064016020604051808303815f875af11580156200066b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000691919062000ab9565b9250826001600160a01b0316826001600160a01b031614620006da57604051630f51530760e21b81526001600160a01b0380841660048301528416602482015260440162000355565b50509750975097945050505050565b80516001600160a01b038116811462000700575f80fd5b919050565b805161ffff8116811462000700575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f805f805f805f6101208a8c03121562000745575f80fd5b620007508a620006e9565b98506200076060208b01620006e9565b97506200077060408b01620006e9565b96506200078060608b01620006e9565b95506200079060808b01620006e9565b945060a08a01519350620007a760c08b0162000705565b9250620007b760e08b0162000705565b6101008b01519092506001600160401b0380821115620007d5575f80fd5b818c0191508c601f830112620007e9575f80fd5b815181811115620007fe57620007fe62000717565b8060051b604051601f19603f8301168101818110858211171562000826576200082662000717565b6040529182526020808301935084820101918f83111562000845575f80fd5b6020850194505b8285101562000872576200086085620006e9565b8452602094850194909301926200084c565b80955050505050509295985092959850929598565b600181811c908216806200089c57607f821691505b602082108103620008bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200090c57805f5260205f20601f840160051c81016020851015620008e85750805b601f840160051c820191505b8181101562000909575f8155600101620008f4565b50505b505050565b81516001600160401b038111156200092d576200092d62000717565b62000945816200093e845462000887565b84620008c1565b602080601f8311600181146200097b575f8415620009635750858301515b5f19600386901b1c1916600185901b178555620009d5565b5f85815260208120601f198616915b82811015620009ab578886015182559484019460019091019084016200098a565b5085821015620009c957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52603260045260245ffd5b602080825282518282018190525f9190848201906040850190845b8181101562000a335783516001600160a01b03168352928401929184019160010162000a0c565b50909695505050505050565b5f80835462000a4e8162000887565b6001828116801562000a69576001811462000a7f5762000aad565b60ff198416875282151583028701945062000aad565b875f526020805f205f5b8581101562000aa45781548a82015290840190820162000a89565b50505082870194505b50929695505050505050565b5f6020828403121562000aca575f80fd5b62000ad582620006e9565b9392505050565b60805160a05160c05160e0516101005161012051614c1762000b635f395f8181610b330152818161116f015261229c01525f8181610964015261227b01525f81816106e7015281816119c3015261225a01525f818161049101528181610be80152818161113e0152818161195501526125c901525f610eef01525f610ebf0152614c175ff3fe608060405260043610610387575f3560e01c80637b3c71d3116101d3578063c2ee3a08116100fd578063dd4e2ba51161009d578063f046c6461161006d578063f046c64614610b74578063f52c93c514610ba7578063fb999fcb14610bbb578063fc0c546a14610bda575f80fd5b8063dd4e2ba514610adb578063deaaa7cc14610aef578063e94bb22314610b22578063eb9019d414610b55575f80fd5b8063c7f758a8116100d8578063c7f758a814610a37578063c9167e6c14610a6a578063cee8770814610a89578063d11d19c214610aa8575f80fd5b8063c2ee3a08146109e4578063c59057e4146109f9578063c64d2ee614610a18575f80fd5b806396ccd67311610173578063af63a3e111610143578063af63a3e114610953578063b58131b014610986578063c01f9e3714610998578063c0324da1146109b7575f80fd5b806396ccd673146108e957806397c3d334146109085780639b9e9cf81461091c578063a7713a701461093b575f80fd5b806384b0196e116101ae57806384b0196e146108455780638968eb071461086c5780638e9d8c341461088b57806391ddadf4146108be575f80fd5b80637b3c71d3146107e85780637d5e81e214610807578063849a83b414610826575f80fd5b80633e4f49e6116102b4578063544ffc9c116102545780635b18c26a116102245780635b18c26a1461074757806364a38bf91461076657806370edcbc41461078557806377750fde146107a4575f80fd5b8063544ffc9c146106815780635548917f146106d657806355a73c53146107095780635678138814610728575f80fd5b80634bf5d7e91161028f5780634bf5d7e91461061b5780634d6d74411461062f5780634d8e08251461064357806353b0bbfd14610662575f80fd5b80633e4f49e61461059257806343859632146105be57806349a45dfb14610607575f80fd5b806324b2c7b31161032a5780633644e515116102fa5780633644e515146105375780633932abb11461054b5780633a5762d31461055f5780633bccf4fd14610573575f80fd5b806324b2c7b3146104c75780632656227d146104e65780632d63f693146104f95780633071712914610518575f80fd5b80630dd320e9116103655780630dd320e9146103f4578063143489d014610413578063160d66ae146104805780631703a018146104b3575f80fd5b806302a251a31461038b57806306fdde03146103b2578063086f7d65146103d3575b5f80fd5b348015610396575f80fd5b5061039f610c0c565b6040519081526020015b60405180910390f35b3480156103bd575f80fd5b506103c6610c19565b6040516103a9919061386d565b3480156103de575f80fd5b506103f26103ed36600461388e565b610ca8565b005b3480156103ff575f80fd5b5061039f61040e366004613a11565b610cbc565b34801561041e575f80fd5b5061045b61042d366004613aaf565b5f908152600160205260409020546301000000900473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a9565b34801561048b575f80fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104be575f80fd5b5061039f610d86565b3480156104d2575f80fd5b5061039f6104e1366004613ac6565b610da3565b61039f6104f4366004613cc8565b610dbb565b348015610504575f80fd5b5061039f610513366004613aaf565b610e0c565b348015610523575f80fd5b5061039f610532366004613d52565b610e34565b348015610542575f80fd5b5061039f610ebc565b348015610556575f80fd5b5061039f610f11565b34801561056a575f80fd5b506103f2610f18565b34801561057e575f80fd5b5061039f61058d366004613e2e565b610f9e565b34801561059d575f80fd5b506105b16105ac366004613aaf565b610fcd565b6040516103a99190613ede565b3480156105c9575f80fd5b506105f76105d8366004613eec565b600260209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016103a9565b348015610612575f80fd5b506103f2611131565b348015610626575f80fd5b506103c6611162565b34801561063a575f80fd5b5061045b61116c565b34801561064e575f80fd5b5061039f61065d366004613f1a565b6111fa565b34801561066d575f80fd5b506103f261067c36600461388e565b61120a565b34801561068c575f80fd5b506106bb61069b366004613aaf565b5f8181526001602081905260408220908101546002909101549093909250565b604080519384526020840192909252908201526060016103a9565b3480156106e1575f80fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610714575f80fd5b5061039f610723366004613f4c565b61129d565b348015610733575f80fd5b5061039f610742366004613f4c565b6112af565b348015610752575f80fd5b5061039f610761366004613f76565b6112ca565b348015610771575f80fd5b5061039f610780366004613fdc565b6112fc565b348015610790575f80fd5b5061039f61079f366004613fdc565b61131e565b3480156107af575f80fd5b506105f76107be366004614043565b73ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205460ff1690565b3480156107f3575f80fd5b5061039f61080236600461409c565b61135e565b348015610812575f80fd5b5061039f6108213660046140e6565b6113a0565b348015610831575f80fd5b5061039f610840366004613ac6565b6113b7565b348015610850575f80fd5b50610859611417565b6040516103a997969594939291906141ba565b348015610877575f80fd5b5061039f610886366004614242565b61154f565b348015610896575f80fd5b5061039f7fa891f76027ef63a24501b9dd3b0c779b49ad26d2328e9d423640209d1ad4fcc481565b3480156108c9575f80fd5b506108d26115be565b60405165ffffffffffff90911681526020016103a9565b3480156108f4575f80fd5b5061039f61090336600461409c565b6115c7565b348015610913575f80fd5b5061271061039f565b348015610927575f80fd5b5061039f6109363660046142cf565b6115d4565b348015610946575f80fd5b5060035461ffff1661039f565b34801561095e575f80fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610991575f80fd5b505f61039f565b3480156109a3575f80fd5b5061039f6109b2366004613aaf565b611656565b3480156109c2575f80fd5b506003546109d19061ffff1681565b60405161ffff90911681526020016103a9565b3480156109ef575f80fd5b5061039f61271081565b348015610a04575f80fd5b5061039f610a13366004613cc8565b611670565b348015610a23575f80fd5b5061039f610a32366004614383565b611693565b348015610a42575f80fd5b50610a56610a51366004613aaf565b6116e5565b6040516103a99897969594939291906143f8565b348015610a75575f80fd5b506103f2610a84366004614461565b6117a0565b348015610a94575f80fd5b5061039f610aa336600461448b565b611897565b348015610ab3575f80fd5b5061039f7f7949bd92105c02f48ca245aa185f4a7a4d7185641d59b186ac64abeb44964f0c81565b348015610ae6575f80fd5b506103c66118e7565b348015610afa575f80fd5b5061039f7f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610b2d575f80fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610b60575f80fd5b5061039f610b6f366004614461565b611907565b348015610b7f575f80fd5b5061039f7f9a121fc10d6025acfc09275f9709796b68831733b5bbac0d510d13f85b1b730f81565b348015610bb2575f80fd5b5061045b6119c0565b348015610bc6575f80fd5b5061039f610bd5366004613aaf565b611a2a565b348015610be5575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061045b565b5f60015b61ffff16905090565b60605f8054610c2790614507565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5390614507565b8015610c9e5780601f10610c7557610100808354040283529160200191610c9e565b820191905f5260205f20905b815481529060010190602001808311610c8157829003601f168201915b5050505050905090565b610cb0611a65565b610cb981611a9e565b50565b5f610d2187610d1b8888604051602001610cd7929190614558565b604051602081830303815290604052805190602001208787604051602001610d00929190614598565b60405160208183030381529060405280519060200120611bb2565b84611c0e565b610d7b87878787878267ffffffffffffffff811115610d4257610d4261390b565b604051908082528060200260200182016040528015610d7557816020015b6060815260200190600190039081610d605790505b50611c5f565b979650505050505050565b5f610d9e610d92611da7565b60035461ffff16611db0565b905090565b5f610d7b3388888888610db6888a6145d1565b611c5f565b5f610dc7858585611dda565b5f610dd0611da7565b9050610e02845f81518110610de757610de7614641565b602002602001015182600184610dfd919061469b565b611f82565b9695505050505050565b5f818152600160208190526040822054610e2a919061ffff1661469b565b61ffff1692915050565b5f610e9d89610d1b8a8a604051602001610e4f929190614558565b604051602081830303815290604052805190602001208989604051602001610e78929190614598565b60405160208183030381529060405280519060200120610e988989612076565b612159565b610eaf8989898989610db6898b6145d1565b9998505050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610eec57610d9e6121ad565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f80610c10565b610f20611a65565b610f9c610f2b61116c565b73ffffffffffffffffffffffffffffffffffffffff1663160d66ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9791906146bd565b612247565b565b5f610e02610fb7610faf888861247f565b8686866124c6565b878760405180602001604052805f8152506124ea565b5f818152600160205260408120805462010000900460ff1615610ff35750600792915050565b805461ffff165f819003611033576040517fd9c78e0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61104761104260018461469b565b612595565b90505f6001830161ffff1661105a611da7565b61ffff1611159050815f036110815780611075576006610e02565b60019695505050505050565b835477010000000000000000000000000000000000000000000000900461ffff166110ac83826146d8565b61271086600201546110be91906146d8565b106110dc57816110cf576006610d7b565b6004979650505050505050565b6110ea8361ffff83166146d8565b6127108660010154856110fd91906146ef565b61110791906146d8565b101580156111125750815b15611124575060019695505050505050565b5060039695505050505050565b611139611a65565b610f9c7f0000000000000000000000000000000000000000000000000000000000000000612247565b6060610d9e612647565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663585e78af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9e91906146bd565b5f61120482612667565b92915050565b611212611a65565b61121a6119c0565b6040517f94eac99500000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff91909116906394eac995906024015f604051808303815f87803b158015611284575f80fd5b505af1158015611296573d5f803e3d5ffd5b5050505050565b5f6112a8838361247f565b9392505050565b5f6112a833848460405180602001604052805f8152506124ea565b5f6112d985610d1b868661247f565b6112f385858560405180602001604052805f8152506124ea565b95945050505050565b5f6112f333868686868267ffffffffffffffff811115610d4257610d4261390b565b5f6112f38585604051602001611335929190614558565b604051602081830303815290604052805190602001208484604051602001610d00929190614598565b5f6112f333868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506124ea92505050565b5f6113ad85858585612679565b5095945050505050565b5f610d7b87876040516020016113ce929190614558565b6040516020818303038152906040528051906020012086866040516020016113f7929190614598565b60405160208183030381529060405280519060200120610e988686612076565b5f60608082808083814630828060405190808252806020026020018201604052801561144d578160200160208202803683370190505b507f0f00000000000000000000000000000000000000000000000000000000000000949392919084805461148090614507565b80601f01602080910402602001604051908101604052809291908181526020018280546114ac90614507565b80156114f75780601f106114ce576101008083540402835291602001916114f7565b820191905f5260205f20905b8154815290600101906020018083116114da57829003601f168201915b505050505094506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525093929190965096509650965096509650965090919293949596565b5f6115b2611595610faf8a8a60405160200161156c929190614558565b604051602081830303815290604052805190602001208989604051602001610d00929190614598565b898989898267ffffffffffffffff811115610d4257610d4261390b565b98975050505050505050565b5f610c10611da7565b5f6112f3858585856128c8565b5f61164861163a610faf8c8c6040516020016115f1929190614558565b604051602081830303815290604052805190602001208b8b60405160200161161a929190614598565b60405160208183030381529060405280519060200120610e988b8b612076565b8b8b8b8b610db68b8d6145d1565b9a9950505050505050505050565b5f81815260016020819052604082205461ffff1601610e2a565b5f6112f3835f8151811061168657611686614641565b6020026020010151612667565b5f6116a487610d1b888888886128c8565b610d7b87878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506124ea92505050565b5f818152600160205260408120805461ffff1691908190819081908190819081906117108960010190565b61ffff16975061171f8a610fcd565b600182015460028301548354929950909750955073ffffffffffffffffffffffffffffffffffffffff6301000000820416945061177e9061ffff8082169177010000000000000000000000000000000000000000000000900416611db0565b9250805f0160179054906101000a900461ffff16915050919395975091939597565b6117a8611a65565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611806576040517f23b3ddc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61180e61116c565b6040517fc9167e6c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063c9167e6c906044015f604051808303815f87803b15801561187d575f80fd5b505af115801561188f573d5f803e3d5ffd5b505050505050565b5f6115b26118aa610faf8a8a8a8a6128c8565b898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506124ea92505050565b60606040518060600160405280602d8152602001614bb5602d9139905090565b6040517f3a46b1a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390525f917f000000000000000000000000000000000000000000000000000000000000000090911690633a46b1a890604401602060405180830381865afa15801561199c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a89190614702565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663585e78af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d6573d5f803e3d5ffd5b5f81815260016020526040812080546112a89061ffff8082169177010000000000000000000000000000000000000000000000900416611db0565b333014610f9c576040517f29c3b7ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108161ffff161180611ab7575061010f61ffff8216105b15611b09576040517f39aa1e1800000000000000000000000000000000000000000000000000000000815261ffff8216600482015261010f602482015261271060448201526064015b60405180910390fd5b6003546040805161ffff928316815291831660208301527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a1600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040519081527fcae6f683fe1ab8ec2737e8d7cc5b306931ad2c39aa1701b65b3e4d9492bffa649060200160405180910390a150565b604080517f9a121fc10d6025acfc09275f9709796b68831733b5bbac0d510d13f85b1b730f6020820152908101839052606081018290525f906112a8906080015b60405160208183030381529060405280519060200120612932565b5f611c1a848484612993565b90505f816005811115611c2f57611c2f613e78565b03611c3a5750505050565b611c458484846129cd565b15611c505750505050565b611c5981612b15565b50505050565b5f84808203611c9a576040517f75672da700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808414611cdd576040517ffa5dbe080000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401611b00565b82518114611d245782516040517ffa5dbe08000000000000000000000000000000000000000000000000000000008152611b00918391600401918252602082015260400190565b5f5b81811015611d9b57611d9189898984818110611d4457611d44614641565b90506020020135888885818110611d5d57611d5d614641565b9050602002016020810190611d729190614719565b878581518110611d8457611d84614641565b60200260200101516124ea565b9250600101611d26565b50509695505050505050565b5f610d9e612cd9565b5f612710611dc261104260018661469b565b611dd09061ffff85166146d8565b6112a89190614732565b8251600114611e15576040517f83913ab500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16835f81518110611e3e57611e3e614641565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614611e93576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151600114611ece576040517f32143ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f81518110611ee057611ee0614641565b60200260200101515f14611f20576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600114611f5b576040517fc569313f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f7d815f81518110611f7057611f70614641565b6020026020010151612d01565b505050565b5f3415611fbb576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161ffff165f03611ff8576040517f0797d96900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161ffff168361ffff1610612044577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830192612036908590612f01565b9050805f036112a857611ff8565b6040517fb696436000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81818167ffffffffffffffff8111156120925761209261390b565b6040519080825280602002602001820160405280156120bb578160200160208202803683370190505b5090505f5b82811015612127578585828181106120da576120da614641565b90506020028101906120ec919061476a565b6040516120fa9291906147cb565b604051809103902082828151811061211457612114614641565b60209081029190910101526001016120c0565b508060405160200161213991906147da565b604051602081830303815290604052805190602001209250505092915050565b604080517fa891f76027ef63a24501b9dd3b0c779b49ad26d2328e9d423640209d1ad4fcc4602082015290810184905260608101839052608081018290525f906121a59060a001611bf3565b949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f1b5f6040516121df919061480f565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f61225061116c565b90505f805f61240f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000888873ffffffffffffffffffffffffffffffffffffffff1663a72246876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612305573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061232991906146bd565b6123316119c0565b73ffffffffffffffffffffffffffffffffffffffff1663c0324da16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239d91906148e4565b8a73ffffffffffffffffffffffffffffffffffffffff1663c27cabb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061240a9190614702565b613070565b6040805173ffffffffffffffffffffffffffffffffffffffff808616825280851660208301528084169282019290925293965091945092508616907fd4507bf853cb2d7b87ab8c58bf6ad8be37f7ae56ed374ed012d09b9235e59787906060015b60405180910390a25050505050565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810183905260ff821660608201525f906112a890608001611bf3565b5f806124d486868686613468565b925090506124e181612b15565b50949350505050565b5f806124f585610fcd565b9050600181600781111561250b5761250b613e78565b1461254457806040517f88f40ea0000000000000000000000000000000000000000000000000000000008152600401611b009190613ede565b5f858152600160205260409020546125869087907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff9182160116611907565b91506124e18683878787613575565b6040517f5c7e5d5f00000000000000000000000000000000000000000000000000000000815261ffff821660048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635c7e5d5f90602401602060405180830381865afa158015612623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112049190614702565b60606040518060a0016040528060658152602001614b5060659139905090565b5f61120482612674613718565b613728565b5f80612686868686611dda565b61268e613718565b90506126b3845f815181106126a5576126a5614641565b602002602001015182613728565b5f8181526001602052604090205490925061ffff16156126ff576040517f5c36267800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61282882826040805160c08101825261ffff92831681525f6020808301828152338486019081526003548716606086019081526080860185815260a087018681529986526001948590529690942094518554925191519451881677010000000000000000000000000000000000000000000000027fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff96909616630100000002959095167fffffffffffffff00000000000000000000000000000000000000000000ffffff92151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090941691909816179190911716949094171781559051918101919091559051600290910155565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0823388888a5167ffffffffffffffff8111156128675761286761390b565b60405190808252806020026020018201604052801561289a57816020015b60608152602001906001900390816128855790505b508987600181018b6040516128b799989796959493929190614975565b60405180910390a194509492505050565b5f6112f37f7949bd92105c02f48ca245aa185f4a7a4d7185641d59b186ac64abeb44964f0c5f1b868686866040516129019291906147cb565b604051908190038120611bf394939291602001938452602084019290925260ff166040830152606082015260800190565b5f61293b610ebc565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f805f6129a0858561377b565b90925090505f8260058111156129b8576129b8613e78565b146129c35781610e02565b610e0286826137bf565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1685856040516024016129fa929190614a51565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251612a7b9190614a69565b5f60405180830381855afa9150503d805f8114612ab3576040519150601f19603f3d011682016040523d82523d5f602084013e612ab8565b606091505b5091509150818015612acc57506020815110155b8015610e02575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090612b0a9083016020908101908401614702565b149695505050505050565b5f816005811115612b2857612b28613e78565b03612b305750565b6001816005811115612b4457612b44613e78565b03612b7b576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816005811115612b8f57612b8f613e78565b03612bc6576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003816005811115612bda57612bda613e78565b03612c11576040517fbf4bf5b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004816005811115612c2557612c25613e78565b03612c5c576040517fff551e8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005816005811115612c7057612c70613e78565b03612ca7576040517f10c74b0300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6213c680612cec63661bd350426146ef565b612cf69190614732565b610d9e906001614a84565b5f612d0b82614a97565b82519091507fffffffff0000000000000000000000000000000000000000000000000000000082167f3a5762d300000000000000000000000000000000000000000000000000000000148015612d615750600481145b158015612dbc57507fffffffff0000000000000000000000000000000000000000000000000000000082167f49a45dfb00000000000000000000000000000000000000000000000000000000148015612dba5750600481145b155b8015612e1657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc9167e6c00000000000000000000000000000000000000000000000000000000148015612e145750604481145b155b8015612e7057507fffffffff0000000000000000000000000000000000000000000000000000000082167f53b0bbfd00000000000000000000000000000000000000000000000000000000148015612e6e5750602481145b155b8015612eca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f086f7d6500000000000000000000000000000000000000000000000000000000148015612ec85750602481145b155b15611f7d576040517f1c49f4d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612f0c8383613728565b5f81815260016020526040902080549192509061ffff848116911614612f35575f915050611204565b6004612f4083610fcd565b6007811115612f5157612f51613e78565b14612f5f575f915050611204565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001781556040517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f90612fbc9084815260200190565b60405180910390a15f803073ffffffffffffffffffffffffffffffffffffffff1686604051612feb9190614a69565b5f604051808303815f865af19150503d805f8114613024576040519150601f19603f3d011682016040523d82523d5f602084013e613029565b606091505b50915091508161306757806040517f15fcd675000000000000000000000000000000000000000000000000000000008152600401611b00919061386d565b50505092915050565b5f805f808973ffffffffffffffffffffffffffffffffffffffff1663777f14d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130e191906146bd565b90505f8973ffffffffffffffffffffffffffffffffffffffff1663777f14d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315191906146bd565b6040517f1af0131c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152808316602483015261ffff8a166044830152919250908d1690631af0131c906064016020604051808303815f875af11580156131d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131f691906146bd565b6040517f8489e17900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015280831660248301528a811660448301526064820189905265048c273950006084830152919550908b1690638489e1799060a4016020604051808303815f875af1158015613288573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ac91906146bd565b94508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613333576040517fa20b5bb900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015286166024820152604401611b00565b6040517fd9181cd300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152868116602483015289811660448301528c169063d9181cd3906064016020604051808303815f875af11580156133ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133d291906146bd565b92508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613459576040517f3d454c1c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015284166024820152604401611b00565b50509750975097945050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561349d5750600390505f61356c565b8460ff16601b141580156134b557508460ff16601c14155b156134c55750600490505f61356c565b604080515f81526020810180835288905260ff871691810191909152606081018590526080810184905260019060a0016020604051602081039080840390855afa158015613515573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615613563575f81613567565b60015f5b915091505b94509492505050565b835f036135ae576040517f8791239e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845290915290205460ff1615613617576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558260ff16600181111561368357613683613e78565b600181111561369457613694613e78565b036136b5575f838152600160208190526040909120018054850190556136cc565b5f8381526001602052604090206002018054850190555b8473ffffffffffffffffffffffffffffffffffffffff167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4848487856040516124709493929190614ae6565b5f80613722611da7565b01905090565b5f82823060405160200161373e93929190614b0d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209392505050565b5f8082516041146137915750600290505f6137b8565b6020830151604084015160608501515f1a91906137b087848484613468565b945094505050505b9250929050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137fa5760056112a8565b505f92915050565b5f5b8381101561381c578181015183820152602001613804565b50505f910152565b5f815180845261383b816020860160208601613802565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6112a86020830184613824565b61ffff81168114610cb9575f80fd5b5f6020828403121561389e575f80fd5b81356112a88161387f565b73ffffffffffffffffffffffffffffffffffffffff81168114610cb9575f80fd5b5f8083601f8401126138da575f80fd5b50813567ffffffffffffffff8111156138f1575f80fd5b6020830191508360208260051b85010111156137b8575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561397f5761397f61390b565b604052919050565b5f82601f830112613996575f80fd5b813567ffffffffffffffff8111156139b0576139b061390b565b6139e160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613938565b8181528460208386010111156139f5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f8060808789031215613a26575f80fd5b8635613a31816138a9565b9550602087013567ffffffffffffffff80821115613a4d575f80fd5b613a598a838b016138ca565b90975095506040890135915080821115613a71575f80fd5b613a7d8a838b016138ca565b90955093506060890135915080821115613a95575f80fd5b50613aa289828a01613987565b9150509295509295509295565b5f60208284031215613abf575f80fd5b5035919050565b5f805f805f8060608789031215613adb575f80fd5b863567ffffffffffffffff80821115613af2575f80fd5b613afe8a838b016138ca565b90985096506020890135915080821115613b16575f80fd5b613b228a838b016138ca565b90965094506040890135915080821115613b3a575f80fd5b50613b4789828a016138ca565b979a9699509497509295939492505050565b5f67ffffffffffffffff821115613b7257613b7261390b565b5060051b60200190565b5f82601f830112613b8b575f80fd5b81356020613ba0613b9b83613b59565b613938565b8083825260208201915060208460051b870101935086841115613bc1575f80fd5b602086015b84811015613be6578035613bd9816138a9565b8352918301918301613bc6565b509695505050505050565b5f82601f830112613c00575f80fd5b81356020613c10613b9b83613b59565b8083825260208201915060208460051b870101935086841115613c31575f80fd5b602086015b84811015613be65780358352918301918301613c36565b5f82601f830112613c5c575f80fd5b81356020613c6c613b9b83613b59565b82815260059290921b84018101918181019086841115613c8a575f80fd5b8286015b84811015613be657803567ffffffffffffffff811115613cac575f80fd5b613cba8986838b0101613987565b845250918301918301613c8e565b5f805f8060808587031215613cdb575f80fd5b843567ffffffffffffffff80821115613cf2575f80fd5b613cfe88838901613b7c565b95506020870135915080821115613d13575f80fd5b613d1f88838901613bf1565b94506040870135915080821115613d34575f80fd5b50613d4187828801613c4d565b949793965093946060013593505050565b5f805f805f805f8060a0898b031215613d69575f80fd5b8835613d74816138a9565b9750602089013567ffffffffffffffff80821115613d90575f80fd5b613d9c8c838d016138ca565b909950975060408b0135915080821115613db4575f80fd5b613dc08c838d016138ca565b909750955060608b0135915080821115613dd8575f80fd5b613de48c838d016138ca565b909550935060808b0135915080821115613dfc575f80fd5b50613e098b828c01613987565b9150509295985092959890939650565b803560ff81168114613e29575f80fd5b919050565b5f805f805f60a08688031215613e42575f80fd5b85359450613e5260208701613e19565b9350613e6060408701613e19565b94979396509394606081013594506080013592915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60088110613eda577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b602081016112048284613ea5565b5f8060408385031215613efd575f80fd5b823591506020830135613f0f816138a9565b809150509250929050565b5f60208284031215613f2a575f80fd5b813567ffffffffffffffff811115613f40575f80fd5b6121a584828501613987565b5f8060408385031215613f5d575f80fd5b82359150613f6d60208401613e19565b90509250929050565b5f805f8060808587031215613f89575f80fd5b8435613f94816138a9565b935060208501359250613fa960408601613e19565b9150606085013567ffffffffffffffff811115613fc4575f80fd5b613fd087828801613987565b91505092959194509250565b5f805f8060408587031215613fef575f80fd5b843567ffffffffffffffff80821115614006575f80fd5b614012888389016138ca565b9096509450602087013591508082111561402a575f80fd5b50614037878288016138ca565b95989497509550505050565b5f60208284031215614053575f80fd5b81356112a8816138a9565b5f8083601f84011261406e575f80fd5b50813567ffffffffffffffff811115614085575f80fd5b6020830191508360208285010111156137b8575f80fd5b5f805f80606085870312156140af575f80fd5b843593506140bf60208601613e19565b9250604085013567ffffffffffffffff8111156140da575f80fd5b6140378782880161405e565b5f805f80608085870312156140f9575f80fd5b843567ffffffffffffffff80821115614110575f80fd5b61411c88838901613b7c565b95506020870135915080821115614131575f80fd5b61413d88838901613bf1565b94506040870135915080821115614152575f80fd5b61415e88838901613c4d565b93506060870135915080821115614173575f80fd5b50613fd087828801613987565b5f815180845260208085019450602084015f5b838110156141af57815187529582019590820190600101614193565b509495945050505050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f6141f460e0830189613824565b82810360408401526142068189613824565b905086606084015273ffffffffffffffffffffffffffffffffffffffff861660808401528460a084015282810360c08401526116488185614180565b5f805f805f805f60a0888a031215614258575f80fd5b873567ffffffffffffffff8082111561426f575f80fd5b61427b8b838c016138ca565b909950975060208a0135915080821115614293575f80fd5b506142a08a828b016138ca565b90965094506142b3905060408901613e19565b9250606088013591506080880135905092959891949750929550565b5f805f805f805f805f60c08a8c0312156142e7575f80fd5b893567ffffffffffffffff808211156142fe575f80fd5b61430a8d838e016138ca565b909b50995060208c0135915080821115614322575f80fd5b61432e8d838e016138ca565b909950975060408c0135915080821115614346575f80fd5b506143538c828d016138ca565b9096509450614366905060608b01613e19565b925060808a0135915060a08a013590509295985092959850929598565b5f805f805f8060a08789031215614398575f80fd5b86356143a3816138a9565b9550602087013594506143b860408801613e19565b9350606087013567ffffffffffffffff808211156143d4575f80fd5b6143e08a838b0161405e565b90955093506080890135915080821115613a95575f80fd5b65ffffffffffff898116825288166020820152610100810161441d6040830189613ea5565b6060820196909652608081019490945273ffffffffffffffffffffffffffffffffffffffff9290921660a084015260c083015261ffff1660e0909101529392505050565b5f8060408385031215614472575f80fd5b823561447d816138a9565b946020939093013593505050565b5f805f805f805f60c0888a0312156144a1575f80fd5b873596506144b160208901613e19565b9550604088013567ffffffffffffffff8111156144cc575f80fd5b6144d88a828b0161405e565b90965094506144eb905060608901613e19565b92506080880135915060a0880135905092959891949750929550565b600181811c9082168061451b57607f821691505b602082108103614552577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115614585575f80fd5b8260051b80858437919091019392505050565b5f8184825b858110156145c65760ff6145b083613e19565b168352602092830192919091019060010161459d565b509095945050505050565b5f6145de613b9b84613b59565b80848252602080830192508560051b8501368111156145fb575f80fd5b855b8181101561463557803567ffffffffffffffff81111561461b575f80fd5b61462736828a01613987565b8652509382019382016145fd565b50919695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b61ffff8281168282160390808211156146b6576146b661466e565b5092915050565b5f602082840312156146cd575f80fd5b81516112a8816138a9565b80820281158282048414176112045761120461466e565b818103818111156112045761120461466e565b5f60208284031215614712575f80fd5b5051919050565b5f60208284031215614729575f80fd5b6112a882613e19565b5f82614765577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261479d575f80fd5b83018035915067ffffffffffffffff8211156147b7575f80fd5b6020019150368190038213156137b8575f80fd5b818382375f9101908152919050565b81515f9082906020808601845b83811015614803578151855293820193908201906001016147e7565b50929695505050505050565b5f8083545f60018260011c9150600183168061482c57607f831692505b60208084108203614864577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b81801561487857600181146148ab576148d6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528415158502890196506148d6565b5f8a8152602090205f5b868110156148ce5781548b8201529085019083016148b5565b505084890196505b509498975050505050505050565b5f602082840312156148f4575f80fd5b81516112a88161387f565b5f8282518085526020808601955060208260051b840101602086015f5b84811015614968577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952614956838351613824565b9884019892509083019060010161491c565b5090979650505050505050565b5f6101208083018c8452602073ffffffffffffffffffffffffffffffffffffffff808e1660208701528360408701528293508c518084526101408701945060208e0193505f5b818110156149d95784518316865294830194938301936001016149bb565b505050505082810360608401526149f0818a614180565b90508281036080840152614a0481896148ff565b905082810360a0840152614a1881886148ff565b61ffff871660c0850152905061ffff851660e0840152828103610100840152614a418185613824565b9c9b505050505050505050505050565b828152604060208201525f6121a56040830184613824565b5f8251614a7a818460208701613802565b9190910192915050565b808201808211156112045761120461466e565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015614ade5780818460040360031b1b83161693505b505050919050565b84815260ff84166020820152826040820152608060608201525f610e026080830184613824565b606081525f614b1f6060830186613824565b905061ffff8416602083015273ffffffffffffffffffffffffffffffffffffffff8316604083015294935050505056fe6d6f64653d65706f63682665706f6368556e6465726c79696e67536f757263653d626c6f636b54696d657374616d702665706f63685374617274696e6754696d657374616d703d313731333039393630302665706f6368506572696f643d31323936303030737570706f72743d616761696e73742c666f722671756f72756d3d666f7226737563636573733d71756f72756da26469706673582212204d141078d20879dc64a1228001a642535bfbebd79aa28464d4808a8703447d3864736f6c63430008170033000000000000000000000000988567fe094570cce1ffda29d1f2d842b70492be0000000000000000000000003414922ff6edf6aacadb6ab4f2533089144625c4000000000000000000000000f6de7fde6f7a8947b94973053b580e754360d2f90000000000000000000000009fff4be0003d0716f37f8d2574e89f1a5d0745c80000000000000000000000002ef826926087614ab4779ff8dbcf7b98573719f200000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000000000000001964000000000000000000000000000000000000000000000000000000000000196400000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b