0 txs
17 calls
constructor
constructor()
functions
AUTHORITY_MANAGER_ROLE
viewfunction AUTHORITY_MANAGER_ROLE() view returns (bytes32)
balanceOf
viewfunction balanceOf(address player, address token) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
developerTreasuries
viewfunction developerTreasuries(bytes16 gameId) view returns (address treasury)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
elympicsTreasury
viewfunction elympicsTreasury() view returns (address)
encode
purefunction encode(tuple proofOfEntry) pure returns (bytes)
encode
purefunction encode(tuple entry) pure returns (bytes)
ERC20_ENTRY_TYPEHASH
viewfunction ERC20_ENTRY_TYPEHASH() view returns (bytes32)
getEthSignedDataHash
purefunction getEthSignedDataHash(bytes32 messageHash) pure returns (bytes32)
getProofOfGameDataHash
purefunction getProofOfGameDataHash(tuple proofOfGame) pure returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getVerifiedCompetitionDataHash
purefunction getVerifiedCompetitionDataHash(tuple competitionData) pure returns (bytes32)
getWithdrawTicketHash
purefunction getWithdrawTicketHash(tuple withdrawTicket) pure returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isNonceUsed
viewfunction isNonceUsed(bytes22 nonce) view returns (bool)
matchAuthority
viewfunction matchAuthority() view returns (address)
packAddressInfo
purefunction packAddressInfo(tuple addressInfo) pure returns (bytes)
packErc20Entry
purefunction packErc20Entry(tuple entry) pure returns (bytes)
packGame
purefunction packGame(tuple game) pure returns (bytes)
packProofOfEntry
purefunction packProofOfEntry(tuple proofOfEntry) pure returns (bytes)
packProofOfGame
purefunction packProofOfGame(tuple proofOfGame) pure returns (bytes)
packVerifiedCompetitionData
purefunction packVerifiedCompetitionData(tuple competitionData) pure returns (bytes)
packWithdrawTicket
purefunction packWithdrawTicket(tuple withdrawTicket) pure returns (bytes)
PROOF_OF_ENTRY_TYPEHASH
viewfunction PROOF_OF_ENTRY_TYPEHASH() view returns (bytes32)
recoverSigner
viewfunction recoverSigner(tuple proofOfEntry, bytes signature) view returns (address)
recoverSigner
purefunction recoverSigner(bytes32 ethSignedMessageHash, bytes signature) pure returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TREASURY_MANAGER_ROLE
viewfunction TREASURY_MANAGER_ROLE() view returns (bytes32)
verify
purefunction verify(tuple data, address signer) pure returns (bool)
verify
purefunction verify(tuple proofOfGameSigned, address signer) pure returns (bool)
verify
purefunction verify(tuple withdrawTicketSigned, address signer) pure returns (bool)
verify
viewfunction verify(tuple proofOfEntry, bytes signature, address signer) view returns (bool)
version
viewfunction version() view returns (uint8)
withdrawAuthority
viewfunction withdrawAuthority() view returns (address)
conclude
nonpayablefunction conclude(tuple competitionData)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _matchAuthority, address _withdrawAuthority, address _elympicsTreasury)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDeveloperTreasury
nonpayablefunction setDeveloperTreasury(bytes16 gameId, address developerTreasury)
setElympicsTreasury
nonpayablefunction setElympicsTreasury(address newElympicsTreasury)
setMatchAuthority
nonpayablefunction setMatchAuthority(address newMatchAuthority)
setWithdrawAuthority
nonpayablefunction setWithdrawAuthority(address newWithdrawAuthority)
topUp
nonpayablefunction topUp(address token, uint256 amount)
withdraw
nonpayablefunction withdraw(tuple withdrawTicket)
events
DeveloperTreasuryUpdated
event DeveloperTreasuryUpdated(bytes16 indexed gameId, address newDeveloperTreasury)
EIP712DomainChanged
event EIP712DomainChanged()
ElympicsTreasuryUpdated
event ElympicsTreasuryUpdated(address newElympicsTreasury)
Initialized
event Initialized(uint64 version)
MatchAuthorityUpdated
event MatchAuthorityUpdated(address newMatchAuthority)
MatchConcluded
event MatchConcluded()
PlayerToppedUp
event PlayerToppedUp(address indexed player, address indexed token, uint256 amount)
PlayerWithdrew
event PlayerWithdrew(address indexed player, address indexed token, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
WithdrawAuthorityUpdated
event WithdrawAuthorityUpdated(address newWithdrawAuthority)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
DeveloperTreasuryNotSet
error DeveloperTreasuryNotSet(bytes16 gameId)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InsufficientPlayerFunds
error InsufficientPlayerFunds(address player, uint256 playerFunds, uint256 requiredFunds)
InvalidAddress
error InvalidAddress()
InvalidInitialization
error InvalidInitialization()
InvalidProofOfEntrySignature
error InvalidProofOfEntrySignature(uint256 index)
InvalidProofOfGameSignature
error InvalidProofOfGameSignature()
InvalidVerifiedCompetitionDataSignature
error InvalidVerifiedCompetitionDataSignature()
InvalidVerifyingContractAddress
error InvalidVerifyingContractAddress()
InvalidVerifyingContractChainId
error InvalidVerifyingContractChainId()
InvalidWithdrawTicketSignature
error InvalidWithdrawTicketSignature()
MismatchedEntriesAndResultsLengths
error MismatchedEntriesAndResultsLengths(uint256 entriesLength, uint256 resultsLength)
MismatchedProofOfEntryBetAmount
error MismatchedProofOfEntryBetAmount(uint256 index)
MismatchedProofOfEntryBetToken
error MismatchedProofOfEntryBetToken(uint256 index)
NonceAlreadyUsed
error NonceAlreadyUsed(bytes22 nonce)
NotInitializing
error NotInitializing()
ProofsOfEntryNotFound
error ProofsOfEntryNotFound()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TotalCommissionExceedsMaxValue
error TotalCommissionExceedsMaxValue(uint256 totalCommission, uint256 maxTotalCommission)
WithdrawTicketSubmittedPastDeadline
error WithdrawTicketSubmittedPastDeadline()
creation bytecode
0x6080806040523460d2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b604051614c6390816100d88239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880604d565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630104d44e146102f257806301ffc9a7146102ed5780631714be46146102e85780631c5fdb9e146102e357806322e4aa6e146102de578063248a9ca3146102d9578063275543e3146102d45780632f2ff15d146102cf57806333d1ae08146102ca57806336568abe146102c55780633ef570eb146102c057806351249121146102bb57806354fd4d50146102b657806366da5820146102b157806379f78cfa146102ac57806384b0196e146102a75780638e2a74b4146102a25780638ff9119d1461027f57806391d148541461029d57806397aba7f914610298578063a217fddf14610293578063a338bf841461028e578063a4079fd114610289578063a42a571514610284578063a558c98e1461027f578063abee1d051461027a578063adacc94114610275578063ae4e7bed14610270578063b2426fe51461026b578063c290094414610266578063c6ec906314610261578063ca29e6001461025c578063ca2a377314610257578063cc2f369e14610252578063d547741f1461024d578063d6f7ddf914610248578063d7f9d87a14610243578063d874435b1461023e578063e02c914d14610239578063e329ae2c14610234578063e8ced06e1461022f578063ebdf690f1461022a578063eebdce5114610225578063f7888aec14610220578063f7be40a21461021b5763f8c8765e1461021657600080fd5b6127f6565b61273b565b6126a6565b61264d565b6125f4565b612592565b612536565b612491565b61247d565b61243a565b61231d565b6122a0565b612219565b6121c7565b612184565b612132565b6120d9565b6120c6565b61205a565b611fa4565b611f68565b611401565b611e84565b611aec565b61157a565b611540565b6114e2565b611444565b6113e8565b6111b1565b6110e9565b610dc0565b610ced565b610c74565b610bbe565b610b34565b610adb565b610a57565b610a14565b6108ba565b610864565b610734565b6106e4565b610349565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361034457807f7965db0b00000000000000000000000000000000000000000000000000000000602092149081156103de575b506040519015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386103d3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761045357604052565b610408565b60a0810190811067ffffffffffffffff82111761045357604052565b6060810190811067ffffffffffffffff82111761045357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761045357604052565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034457565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361034457565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361034457565b359073ffffffffffffffffffffffffffffffffffffffff8216820361034457565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261034457604051906105b582610437565b8160043573ffffffffffffffffffffffffffffffffffffffff811681036103445781526020602435910152565b9190826040910312610344576040516105fa81610437565b60208082946106088161055d565b84520135910152565b35907fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008216820361034457565b9060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103445760405161067581610458565b80926004359073ffffffffffffffffffffffffffffffffffffffff82168203610344576106b59183526106a98160246105e2565b602084015260646105e2565b60408201526106c460a4610611565b606082015260c4359067ffffffffffffffff821682036103445760800152565b346103445760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206107266107213661063e565b612ada565b818151910120604051908152f35b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344577f575013129b137fe29cf9c1eb1df92717c299eee4bc4f75bf4acf76e397e93d2a602073ffffffffffffffffffffffffffffffffffffffff6107a36104d1565b6107ab613a8a565b166107b7811515612a92565b807fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155604051908152a1005b60005b8381106107fd5750506000910152565b81810151838201526020016107ed565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610849815180928187528780880191016107ea565b0116010190565b90602061086192818152019061080d565b90565b346103445760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576108b66108a26107213661063e565b60405191829160208352602083019061080d565b0390f35b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206109246004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b604051908152f35b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103445760405161096381610474565b80926004359073ffffffffffffffffffffffffffffffffffffffff821682036103445761099391835260246105e2565b6020820152606435907fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000821682036103445760400152565b919091608081840312610344576040610a0f60608251936109eb85610474565b610a0485976109f98361055d565b8752602083016105e2565b602086015201610611565b910152565b346103445760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576108b66108a2610a523661092c565b612bb2565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457610ad9600435610a946104f4565b90610ad4610acf826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b613ba0565b613d1d565b005b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206040517f1324c07b429e7aca3a767b19c12867b295a0a37d54953449d8c7f5da7bfd23478152f35b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457600435610b6e6104f4565b3373ffffffffffffffffffffffffffffffffffffffff821603610b9457610ad991613e44565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344577f2b89813d2efe3dafd49575bad57caa45097166c4eabba508ccea8bbed86e8534602073ffffffffffffffffffffffffffffffffffffffff610c2d6104d1565b610c35613a8a565b16610c41811515612a92565b807fffffffffffffffffffffffff00000000000000000000000000000000000000006000541617600055604051908152a1005b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576004357fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008116809103610344576000526005602052602060ff604060002054166040519015158152f35b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602060ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b81601f820112156103445780359067ffffffffffffffff82116104535760405192610d9e601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610490565b8284526020838301011161034457816000926020809301838601378301015290565b346103445760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457610df83661092c565b60843567ffffffffffffffff811161034457602091610e1e610e24923690600401610d4b565b90612c4f565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b67ffffffffffffffff81116104535760051b60200190565b9080601f8301121561034457813590610e7282610e42565b92610e806040519485610490565b82845260208085019360051b82010191821161034457602001915b818310610ea85750505090565b82358060000b810361034457815260209283019201610e9b565b600435907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361034457565b35907fffffffffffffffffffffffffffffffff000000000000000000000000000000008216820361034457565b919082606091031261034457604051610f3681610474565b6040808294610f4481610ef1565b8452610f5260208201610ef1565b60208501520135910152565b919060a0838203126103445760405190610f7782610474565b8193803567ffffffffffffffff811161034457810182601f8201121561034457803590610fa382610e42565b91610fb16040519384610490565b80835260208084019160051b830101918583116103445760208101915b83831061100e5750505050835260208101359167ffffffffffffffff831161034457604082611003838396610a0f9601610e5a565b602087015201610f1e565b823567ffffffffffffffff81116103445782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838a030112610344576040519061105b82610437565b61106889602085016109cb565b825260a08301359167ffffffffffffffff8311610344576110918a602080969581960101610d4b565b83820152815201920191610fce565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610344576004359067ffffffffffffffff82116103445761086191600401610f5e565b346103445760206107266110fc366110a0565b613471565b92939073ffffffffffffffffffffffffffffffffffffffff92611155611163927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061080d565b90858203604087015261080d565b936060840152166080820152600060a082015260c08183039101526020808351928381520192019060005b81811061119b5750505090565b825184526020938401939092019160010161118e565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580611298575b1561123a57611216613fcb565b61121e6140de565b906108b661122a612d01565b6040519384933091469186611101565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611209565b919060408382031261034457604051906112da82610437565b8193803567ffffffffffffffff811161034457826112f9918301610f5e565b835260208101359167ffffffffffffffff831161034457602092610a0f9201610d4b565b919060c083820312610344576040519061133682610458565b8193803567ffffffffffffffff811161034457826113559183016112c1565b8352602081013560208401526040810135604084015261137882606083016105e2565b606084015260a08101359167ffffffffffffffff831161034457608092610a0f9201610d4b565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610344576004359067ffffffffffffffff8211610344576108619160040161131d565b34610344576108b66108a26113fc3661139f565b612d1d565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576108b66108a261143f3661057e565b612e0d565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602060ff6114d66004356114856104f4565b906000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800845260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54166040519015158152f35b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760043560243567ffffffffffffffff81116103445760209161153a610e24923690600401610d4b565b90612e62565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602060405160008152f35b34610344576115883661139f565b805160608201519061162161161c8251926115eb60206040860151966115e26115c5825173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163014612f10565b01514614612f41565b60005473ffffffffffffffffffffffffffffffffffffffff16906116176116128389613592565b612f72565b6132f3565b612fa3565b61167e60408401926116586317d7840061164360208751980197885190613003565b11156116528651885190613003565b90613015565b517fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b906116f38273ffffffffffffffffffffffffffffffffffffffff6116eb6116d1837fffffffffffffffffffffffffffffffff00000000000000000000000000000000166000526003602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b161515613052565b6116fd815161429c565b909161170c602082015161446e565b92919361171c85828181146130aa565b61177961176861175761174561174f61174561173d60208d019788516130e3565b9d518e6130e3565b633b9aca00900490565b9c518c6130e3565b996117628b8d613003565b90613134565b946117738187613125565b95613141565b938415611a365760015b92602085519501519460005b88811061187c57506118558b8b6118028f6118226117cf8f6118086116d1946117e86117cf845173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff165b90614534565b5173ffffffffffffffffffffffffffffffffffffffff1690565b927fffffffffffffffffffffffffffffffff00000000000000000000000000000000166000526003602052604060002090565b7f1e3b444982564c5ab7f4dbe74e901d6fb10e8d811afccb353e1749bd0cf33bef600080a1005b6118a5611889828461318c565b51515173ffffffffffffffffffffffffffffffffffffffff1690565b6118b96118b2838a61318c565b5160000b90565b8460000b9060000b146000146119f557855187908c90878181106119d657505061195f6119576118ea8a518a613134565b926119336119188773ffffffffffffffffffffffffffffffffffffffff166000526004602052604060002090565b915173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254613003565b90555b611972575b506001905b0161178f565b95506001906119c36119a660009873ffffffffffffffffffffffffffffffffffffffff166000526004602052604060002090565b8c5173ffffffffffffffffffffffffffffffffffffffff16611933565b6119ce8a8254613003565b905590611967565b6118ea6119e6916119ee93613134565b918254613134565b9055611962565b90600191611a2f6119e68d6119336119188b519573ffffffffffffffffffffffffffffffffffffffff166000526004602052604060002090565b905561196c565b6000611783565b808203929161010084126103445760405191611a5883610437565b60e083951261034457604051611a6d81610458565b611a768261055d565b8152611a8583602084016105e2565b6020820152611a9783606084016105e2565b6040820152611aa860a08301610611565b606082015260c082013567ffffffffffffffff81168103610344576080820152835260e08101359167ffffffffffffffff831161034457602092610a0f9201610d4b565b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760043567ffffffffffffffff811161034457611b3b903690600401611a3d565b8051611b99611b94604083015193611b74602080860151966115e26115c5825173ffffffffffffffffffffffffffffffffffffffff1690565b60015473ffffffffffffffffffffffffffffffffffffffff165b90613569565b6131a0565b7ff32abcbb99448b5b2e6b3547c4c05f8feb4b54bc26f44bf58db42b455e78ec5773ffffffffffffffffffffffffffffffffffffffff611e6b611e506060850194611c78611c4d611c49611c42611c108a517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001690565b7fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000166000526005602052604060002090565b5460ff1690565b1590565b87517fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000165b906131d1565b611ca8611ca0611c93608084015167ffffffffffffffff1690565b67ffffffffffffffff1690565b421115613229565b611d9e611d73611c10611cf1611cd2855173ffffffffffffffffffffffffffffffffffffffff1690565b8b5173ffffffffffffffffffffffffffffffffffffffff165b906135c6565b98611d4d60208c019a8b5111158c611d44611d3e611d238a5173ffffffffffffffffffffffffffffffffffffffff1690565b925173ffffffffffffffffffffffffffffffffffffffff1690565b826135c6565b908d519261325a565b517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001690565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b8551611e0a6119e6611ded611dc7855173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166000526004602052604060002090565b8a5173ffffffffffffffffffffffffffffffffffffffff16611933565b9055611808611e306117cf895173ffffffffffffffffffffffffffffffffffffffff1690565b825173ffffffffffffffffffffffffffffffffffffffff1688519161454a565b945173ffffffffffffffffffffffffffffffffffffffff1690565b925160405190815292811693169180602081015b0390a3005b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457611ebb610ec2565b7fc47e72be6fe20658f21032075a799d129db63621bf8dde7c098791909f66d5d060207fffffffffffffffffffffffffffffffff00000000000000000000000000000000611f076104f4565b93611f10613b15565b1692836000526003825273ffffffffffffffffffffffffffffffffffffffff6040600020911690817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055604051908152a2005b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206109246004356132ae565b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344577fc7284703bb690a73875a9803c47edcc378be8fe778d2c9ac6011ee3a68ea4618602073ffffffffffffffffffffffffffffffffffffffff6120136104d1565b61201b613b15565b16612027811515612a92565b807fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255604051908152a1005b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760043567ffffffffffffffff8111610344576120bc6120ae60209236906004016112c1565b6120b66104f4565b906132f3565b6040519015158152f35b346103445760206107266113fc3661139f565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206040517f489cf1e445c78d018acbfa51842b23ba855d897f6fa9a0818459b6f8c096ff3f8152f35b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346103445760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576108b66108a26121c23661092c565b613338565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346103445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344577fffffffffffffffffffffffffffffffff00000000000000000000000000000000612271610ec2565b166000526003602052602073ffffffffffffffffffffffffffffffffffffffff60406000205416604051908152f35b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261034457610ad96004356122dd6104f4565b90612318610acf826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b613e44565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576123546104d1565b6024356123f973ffffffffffffffffffffffffffffffffffffffff8316926123c56040517f23b872dd000000000000000000000000000000000000000000000000000000006020820152336024820152306044820152846064820152606481526123bf608482610490565b8561475d565b3360009081526004602052604090209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b612404828254613003565b905560405190815233907fc50c8a1079c07674ad5b7015c7f442a78274f01d3ed268cb855fd33f7f4deca3908060208101611e7f565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576108b66108a26124783661057e565b6133f0565b34610344576108b66108a26110fc366110a0565b346103445760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610344576124c93661092c565b60843567ffffffffffffffff8111610344576124e9903690600401610d4b565b60a4359073ffffffffffffffffffffffffffffffffffffffff82168092036103445761252c73ffffffffffffffffffffffffffffffffffffffff91602094612c4f565b1614604051908152f35b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760043567ffffffffffffffff8111610344576120bc61258a6020923690600401611a3d565b611b8e6104f4565b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760043567ffffffffffffffff8111610344576120bc6125e6602092369060040161131d565b6125ee6104f4565b90613592565b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206040517fede9dcdb0ce99dc7cec9c7be9246ad08b37853683ad91569c187b647ddf5e21c8152f35b346103445760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206040517fb7a0c38d57a0307777e67b00464302c77b6001aa771fdf5d1adfb503d5721c6e8152f35b346103445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760206127326126e26104d1565b73ffffffffffffffffffffffffffffffffffffffff6126ff6104f4565b91166000526004835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b346103445760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445760405161277681610474565b6004357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681036103445781526024357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361034457816127ea9160206108b69401526044356040820152613617565b60405191829182610850565b346103445760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103445761282d6104d1565b6128356104f4565b9061283e610517565b61284661053a565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff612895612887611c498860ff9060401c1690565b9667ffffffffffffffff1690565b1680159081612a8a575b6001149081612a80575b159081612a77575b50612a4d57612932938561292960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6129d25761368b565b61293857005b6129a37fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b612a48680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61368b565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b905015386128b1565b303b1591506128a9565b86915061289f565b15612a9957565b7fe6c4247b0000000000000000000000000000000000000000000000000000000060005260046000fd5b90612ad6602092828151948592016107ea565b0190565b61086160167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000928051906034612b136020830151612e0d565b917fffffffffffffffffffffffffffffffffffffffffffff000000000000000000006060612b446040840151612e0d565b920151169260405197889560601b166020860152612b6b81518092602086890191016107ea565b8401612b8082518093602086850191016107ea565b0101908152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6810184520182610490565b73ffffffffffffffffffffffffffffffffffffffff815116907fffffffffffffffffffffffffffffffffffffffffffff000000000000000000006040612bfb60208401516133f0565b602081519101209201511690604051927fb7a0c38d57a0307777e67b00464302c77b6001aa771fdf5d1adfb503d5721c6e60208501526040840152606083015260808201526080815261086160a082610490565b906042612c5e61086193612bb2565b60208151910120612c6d614b7e565b612c75614be8565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152612cc660c082610490565b51902090604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015220613f62565b60405190612d10602083610490565b6000808352366020840137565b6108616040602080612dc094805190612d9883612d3a8451613471565b930151865195869181612d5681850197888151938492016107ea565b8301612d6a825180938580850191016107ea565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285610490565b8281015190612dae606087830151920151612e0d565b928651988996518092878901906107ea565b8501918483015285820152612dde82518093856060850191016107ea565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610490565b602081519101517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519260601b166020830152603482015260348152610861605482610490565b6040513d6000823e3d90fd5b6041825103612eb2576020828101516040808501516060958601518251958652600090811a868601529185019290925293830152828052919060809060015afa15612ead5760005190565b612e56565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152fd5b15612f1757565b7f74f9ac140000000000000000000000000000000000000000000000000000000060005260046000fd5b15612f4857565b7fd5ea63950000000000000000000000000000000000000000000000000000000060005260046000fd5b15612f7957565b7f44e028cc0000000000000000000000000000000000000000000000000000000060005260046000fd5b15612faa57565b7fb4f2832b0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161301057565b612fd4565b1561301d5750565b7f9e52165e000000000000000000000000000000000000000000000000000000006000526004526317d7840060245260446000fd5b1561305a5750565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000907ff89bc21f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b156130b3575050565b7f9f51bdb90000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b8181029291811591840414171561301057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b811561312f570490565b6130f6565b9190820391821161301057565b811561312f570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051156131875760200190565b61314b565b80518210156131875760209160051b010190565b156131a757565b7f13c70e050000000000000000000000000000000000000000000000000000000060005260046000fd5b156131d95750565b7fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000907fb580c862000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b1561323057565b7f94faf04d0000000000000000000000000000000000000000000000000000000060005260046000fd5b1561326457505050565b73ffffffffffffffffffffffffffffffffffffffff907ffea2bbdd000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b60405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c81526132ed605c82610490565b51902090565b73ffffffffffffffffffffffffffffffffffffffff6133308192602061332761331c8351613471565b8281519101206132ae565b91015190612e62565b921691161490565b610861601660347fffffffffffffffffffffffffffffffffffffffff000000000000000000000000938051907fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000060406133946020840151612e0d565b920151169060405196879360601b1660208401526133bb81518092602087870191016107ea565b8201908382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6810184520182610490565b602073ffffffffffffffffffffffffffffffffffffffff825116910151604051917f489cf1e445c78d018acbfa51842b23ba855d897f6fa9a0818459b6f8c096ff3f60208401526040830152606082015260608152610861608082610490565b60209061346660019493828151948592016107ea565b019060f81b81520190565b600060605b825180518310156134ea576134e26001926134b66134a061349a876134b09661318c565b516145ac565b6040519485936020850190612ac3565b90612ac3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610490565b910190613476565b50919291600091505b6020840151805183101561352f57906135276135146118b28560019561318c565b916134b660405193849260208401613450565b9101906134f3565b5061086191506134b66134a060406134b095960151613617565b61333073ffffffffffffffffffffffffffffffffffffffff928392612c4f565b73ffffffffffffffffffffffffffffffffffffffff6133308192602061332761331c8351612ada565b73ffffffffffffffffffffffffffffffffffffffff613330819260806133276135ba83612d1d565b602081519101206132ae565b9073ffffffffffffffffffffffffffffffffffffffff6136139216600052600460205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b5490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008151169060407fffffffffffffffffffffffffffffffff00000000000000000000000000000000602083015116910151906040519260208401526030830152604082015260408152610861606082610490565b939291906136b073ffffffffffffffffffffffffffffffffffffffff82161515612a92565b6136d173ffffffffffffffffffffffffffffffffffffffff83161515612a92565b6136f273ffffffffffffffffffffffffffffffffffffffff84161515612a92565b6136fa6147e8565b60409485519561370a8188610490565b601487527f456c796d7069637350726f6f664f66456e747279000000000000000000000000602088015261374081519182610490565b600181527f320000000000000000000000000000000000000000000000000000000000000060208201526137726147e8565b61377a6147e8565b865167ffffffffffffffff8111610453576137be816137b97fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254613f78565b6148e9565b6020601f82116001146139775792613847613929969593613820846138a6956138e89861396a9d9e60009261396c575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556149ad565b61387060007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b61389960007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b6138a16147e8565b613c33565b5073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006000541617600055565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255565b565b0151905038806137ee565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216987f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9960005b818110613a7257509360018461396a9b9c6138e89895613847956138a6986139299d9c9a10613a3b575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556149ad565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613a0e565b838301518c556001909b019a602093840193016139e4565b3360009081527f9967084534f1bfdf20406ac7fea0e72efc88feba87e44092894e4546122729c3602052604090205460ff1615613ac357565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f1324c07b429e7aca3a767b19c12867b295a0a37d54953449d8c7f5da7bfd234760245260446000fd5b3360009081527f66de4a4f04a2e43b4f0e16c30f097faaf056d056754069bf209462cbbc634a15602052604090205460ff1615613b4e57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527fede9dcdb0ce99dc7cec9c7be9246ad08b37853683ad91569c187b647ddf5e21c60245260446000fd5b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff613bf83360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b541615613c025750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16613d175773ffffffffffffffffffffffffffffffffffffffff1660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff613d758360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b5416613e3d57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052613dd18260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff613e9c8360406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b541615613e3d57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052613ef98260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b61086191613f6f9161461b565b90929192614690565b90600182811c92168015613fc1575b6020831014613f9257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691613f87565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025491613ffe83613f78565b80835292600181169081156140a15750600114614022575b61396a92500383610490565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102600090815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061408557505090602061396a92820101614016565b602091935080600191548385890101520191019091849261406d565b6020925061396a9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101614016565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103549161411183613f78565b80835292600181169081156140a157506001146141345761396a92500383610490565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103600090815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061419757505090602061396a92820101614016565b602091935080600191548385890101520191019091849261417f565b604051906141c082610437565b60006020838281520152565b156141d357565b7f1f685b750000000000000000000000000000000000000000000000000000000060005260046000fd5b156142055750565b7f38b3a7fa0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b1561423a5750565b7f7e710d110000000000000000000000000000000000000000000000000000000060005260045260246000fd5b1561426f5750565b7f710905230000000000000000000000000000000000000000000000000000000060005260045260246000fd5b906142a56141b3565b508151916142b48315156141cc565b60206142bf8261317a565b5151015190602082018260005b8681106142db57505050509190565b614466611d73611c10611c10611d4d6001966144058760206142fd828e61318c565b516143fb8382519661433e8261433987808c01519701516143328c5173ffffffffffffffffffffffffffffffffffffffff1690565b908c613549565b6141fd565b61439f614376611c49611c4260408c019d8e517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001690565b8b517fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016611c72565b73ffffffffffffffffffffffffffffffffffffffff6143f36117cf6143d8875173ffffffffffffffffffffffffffffffffffffffff1690565b935173ffffffffffffffffffffffffffffffffffffffff1690565b911614614232565b01518b5114614267565b614443614426825173ffffffffffffffffffffffffffffffffffffffff1690565b8c5173ffffffffffffffffffffffffffffffffffffffff16611ceb565b8951915173ffffffffffffffffffffffffffffffffffffffff168282101561325a565b0183906142cc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8091600091805190835b8281106144a6575050929190565b936144b38583979361318c565b5160000b8260000b8091136000146144e2575050506144d2838561318c565b5160000b93600180945b01614498565b6144f18688949897939761318c565b5160000b14614503575b6001906144dc565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461301057600101936144fb565b919081156145455761396a9261454a565b505050565b61396a9273ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526145a7606483610490565b61475d565b61086160206145bb8351613338565b92015191602060405193826145d986945180928580880191016107ea565b83016145ed825180938580850191016107ea565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610490565b815191906041830361464c5761464592506020820151906060604084015193015160001a90614841565b9192909190565b505060009160029190565b6004111561466157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61469981614657565b806146a2575050565b6146ab81614657565b600181036146dd577ff645eedf0000000000000000000000000000000000000000000000000000000060005260046000fd5b6146e681614657565b6002810361471c57507ffce698f70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b80614728600392614657565b146147305750565b7fd78bce0c0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b906000602091828151910182855af115612e56576000513d6147df575073ffffffffffffffffffffffffffffffffffffffff81163b155b61479b5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60011415614794565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561481757565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b90917f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116148dd579061489b60209460009493604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15612ead5760005173ffffffffffffffffffffffffffffffffffffffff8116156148d15790600090600090565b50600090600190600090565b50505060009160039190565b601f81116148f5575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026000526020600020906020601f840160051c83019310614951575b601f0160051c01905b818110614945575050565b6000815560010161493a565b9091508190614931565b601f821161496857505050565b6000526020600020906020601f840160051c830193106149a3575b601f0160051c01905b818110614997575050565b6000815560010161498c565b9091508190614983565b90815167ffffffffffffffff811161045357614a13816149ed7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354613f78565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10361495b565b602092601f8211600114614a8557614a619293829160009261396c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1036000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759160005b868110614b665750836001959610614b2f575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080614b05565b91926020600181928685015181550194019201614af2565b614b86613fcb565b8051908115614b96576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015614bc35790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b614bf06140de565b8051908115614c00576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614bc3579056fea26469706673582212208a21a4ce54b4e505d1f86caef1b7361a5e7e62a749a660448e85feab8adbff0564736f6c634300081c0033