0 txs
6 calls
constructor
constructor(uint256 _sparkValue, address _protocolRewards, address _zoraRecipient)
functions
BACKFILLER_ROLE
viewfunction BACKFILLER_ROLE() view returns (bytes32)
commentSparksQuantity
viewfunction commentSparksQuantity(tuple commentIdentifier) view returns (uint256)
contractName
purefunction contractName() pure returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DELEGATE_COMMENTER
viewfunction DELEGATE_COMMENTER() view returns (bytes32)
DOMAIN_NAME
viewfunction DOMAIN_NAME() view returns (string)
DOMAIN_VERSION
viewfunction DOMAIN_VERSION() view returns (string)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hashAndCheckCommentExists
viewfunction hashAndCheckCommentExists(tuple commentIdentifier) view returns (bytes32 commentId, bool exists)
hashAndValidateCommentExists
viewfunction hashAndValidateCommentExists(tuple commentIdentifier) view returns (bytes32 commentId)
hashCommentIdentifier
purefunction hashCommentIdentifier(tuple commentIdentifier) pure returns (bytes32)
hashPermitComment
viewfunction hashPermitComment(tuple permit) view returns (bytes32)
hashPermitSparkComment
viewfunction hashPermitSparkComment(tuple permit) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
implementation
viewfunction implementation() view returns (address)
nextNonce
viewfunction nextNonce() view returns (bytes32)
nonceUsed
viewfunction nonceUsed(address owner, bytes32 nonce) view returns (bool)
PERMISSION_BIT_ADMIN
viewfunction PERMISSION_BIT_ADMIN() view returns (uint256)
protocolRewards
viewfunction protocolRewards() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
REFERRER_REWARD_PCT
viewfunction REFERRER_REWARD_PCT() view returns (uint256)
sparkValue
viewfunction sparkValue() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
ZORA_REWARD_NO_REFERRER_PCT
viewfunction ZORA_REWARD_NO_REFERRER_PCT() view returns (uint256)
ZORA_REWARD_PCT
viewfunction ZORA_REWARD_PCT() view returns (uint256)
backfillBatchAddComment
nonpayablefunction backfillBatchAddComment(tuple[] commentIdentifiers, string[] texts, uint256[] timestamps, bytes32[] originalTransactionHashes)
comment
payablefunction comment(address commenter, address contractAddress, uint256 tokenId, string text, tuple replyTo, address commenterSmartWallet, address referrer) payable returns (tuple commentIdentifier)
delegateComment
payablefunction delegateComment(address commenter, address contractAddress, uint256 tokenId, string text, tuple replyTo, address commenterSmartWalletOwner, address referrer) payable returns (tuple commentIdentifier, bytes32 commentId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address defaultAdmin, address backfiller, address[] delegateCommenters)
permitComment
payablefunction permitComment(tuple permit, bytes signature) payable
permitSparkComment
payablefunction permitSparkComment(tuple permit, bytes signature) payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sparkComment
payablefunction sparkComment(tuple commentIdentifier, uint256 sparksQuantity, address referrer) payable
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BackfilledComment
event BackfilledComment(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, string text, uint256 timestamp, bytes32 originalTransactionId)
Commented
event Commented(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, bytes32 replyToId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) replyTo, uint256 sparksQuantity, string text, uint256 timestamp, address referrer)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
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)
SparkedComment
event SparkedComment(bytes32 indexed commentId, (address commenter, address contractAddress, uint256 tokenId, bytes32 nonce) commentIdentifier, uint256 sparksQuantity, address sparker, uint256 timestamp, address referrer)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressZero
error AddressZero()
ArrayLengthMismatch
error ArrayLengthMismatch()
CannotSparkOwnComment
error CannotSparkOwnComment()
CommentAddressOrTokenIdsDoNotMatch
error CommentAddressOrTokenIdsDoNotMatch(address commentAddress, uint256 commentTokenId, address replyAddress, uint256 replyTokenId)
CommentDoesntExist
error CommentDoesntExist()
CommenterMismatch
error CommenterMismatch(address expected, address actual)
DuplicateComment
error DuplicateComment(bytes32 commentId)
EmptyComment
error EmptyComment()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
FailedInnerCall
error FailedInnerCall()
IncorrectDestinationChain
error IncorrectDestinationChain(uint256 wrongDestinationChainId)
IncorrectETHAmountForSparks
error IncorrectETHAmountForSparks(uint256 actual, uint256 expected)
InvalidAccountNonce
error InvalidAccountNonce(address account, bytes32 currentNonce)
InvalidInitialization
error InvalidInitialization()
InvalidSignature
error InvalidSignature()
MustSendAtLeastOneSpark
error MustSendAtLeastOneSpark()
NoFundsRecipient
error NoFundsRecipient()
NotInitializing
error NotInitializing()
NotSmartWallet
error NotSmartWallet()
NotSmartWalletOwner
error NotSmartWalletOwner()
NotTokenHolderOrAdmin
error NotTokenHolderOrAdmin()
OnlySparksContract
error OnlySparksContract()
TransferFailed
error TransferFailed()
UpgradeToMismatchedContractName
error UpgradeToMismatchedContractName(string currentName, string newName)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x61010034620001a557601f620052ef38819003918201601f19168301926001600160401b0392909183851183861017620001aa578160609284926040978852833981010312620001a557805162000066846200005e60208501620001c0565b9301620001c0565b30608052926001600160a01b0392831692831590811562000199575b5062000188577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff82881c166200017757808083160362000132575b50505060a05260c05260e052516151199081620001d68239608051818181611f2e0152612027015260a05181818161287201528181613a5501528181613c990152818161407601526141a5015260c05181818161261e015261474a015260e05181818161464401526148de0152f35b6001600160401b0319909116811790915584519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080620000c3565b865163f92ee8a960e01b8152600490fd5b8451639fabe1c160e01b8152600490fd5b90508416153862000082565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001a55756fe608080604052600436101561001357600080fd5b60003560e01c90816246365d1461283e5750806301ffc9a71461277f5780630e230f97146126e8578063248a9ca31461267c5780632937ccc61461264257806329df6479146125d35780632f2ff15d1461255757806336568abe146124cd5780633a7dfb3a146124745780634f1ef28614611fa857806352d1902d14611ee857806353c6dcd514611cbf5780635c60da1b14611c4e578063622110d314611bf55780637130a0e714611bbb57806375ae094f14611b5d57806375d0c0dc14611ae157806377a24f3614611256578063796f077b1461121c57806384b0196e1461106157806391d1485414610fc957806394053b3414610e2357806397de148714610a51578063a0a8e460146109d5578063a2152d1814610960578063a217fddf14610926578063acb8cc49146108d8578063ad3cb1cc14610858578063b84529191461081e578063c0464356146107e4578063c46a4ae114610794578063ce5263c314610529578063cf59d007146104b6578063d547741f1461043a578063d69c3d30146103df578063e30e9ae31461039d578063e5c97b1314610254578063eb2313451461021a5763ffb5d589146101cb57600080fd5b346102155760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602061020d61020836612c01565b61317a565b604051908152f35b600080fd5b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602060405160148152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360161018081126102155761016013610215576101643567ffffffffffffffff8111610215576102a9903690600401612a02565b6102b1612d02565b9163ffffffff9283804616911603610363576102e792506102d0612f80565b916102d9612d27565b9160c4359360e435906136ef565b60a4358015610339576102fa3482614074565b610302612d27565b90610104359073ffffffffffffffffffffffffffffffffffffffff82168203610215576103379261033236612c01565b6140eb565b005b60046040517f58574dc5000000000000000000000000000000000000000000000000000000008152fd5b60248361036e612d02565b6040517f16d5b96e00000000000000000000000000000000000000000000000000000000815291166004820152fd5b346102155760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602061020d6103da36612c01565b61310f565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155760207f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d0254604051908152f35b346102155760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576103376004356104776128b8565b90806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526104b16001604060002001546131b7565b6135cf565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c08112610215576080136102155760843560a43573ffffffffffffffffffffffffffffffffffffffff81168103610215578115610339576103379161051f3482614074565b3361033236612c01565b61053236612b34565b929596909394610540612f4b565b503360009081527ff42a8efff468fcef324535266976260ddee6dd8f36b86533dba0904c131e743060205260409020547fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d9060ff161561075d5750906105af916105a934613a4d565b98613987565b946105e06105d873ffffffffffffffffffffffffffffffffffffffff96878951169336916129cb565b923690612c7f565b90858751169080820361072657505060006105fa8761310f565b9580835116610699575b5082511561066f5760a09761061c6106259689614444565b42938888613ad2565b61066860405180936060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565b6080820152f35b60046040517f2b3f4713000000000000000000000000000000000000000000000000000000008152fd5b90506106a48261317a565b908060208901511690602084015116808214801590610714575b6106c85750610604565b90836084926040808c015192015191604051937ffbd068270000000000000000000000000000000000000000000000000000000085526004850152602484015260448301526064820152fd5b506040890151604085015114156106be565b60449250604051917f30a3507600000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b604490604051907fe2517d3f0000000000000000000000000000000000000000000000000000000082523360048301526024820152fd5b346102155760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155760406107d66107d136612c01565b6130d1565b825191825215156020820152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602060405160028152f35b34610215576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602061020d612f80565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576108d460405161089681612918565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612a53565b0390f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576108d4610912612cc9565b604051918291602083526020830190612a53565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602060405160008152f35b346102155760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155761099b6103da36612c01565b6000527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d006020526020600160406000200154604051908152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576108d4604051610a1381612918565b600581527f302e302e320000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190612a53565b346102155760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155760043567ffffffffffffffff8082116102155736602383011215610215578082600401351161021557366024836004013560071b840101116102155760243581811161021557610ad4903690600401612a96565b60449391933583811161021557610aef903690600401612a96565b91909360643590811161021557610b0a903690600401612a96565b3360009081527f3dcf8136aea27c4e59adba4b5b5f26ca29dc6e5a703de453b2361643c43217c76020526040902054909591929060ff1615610dcd5780856004013514801590610dc3575b8015610db9575b610d8f5760005b85600401358110610b7057005b610b8e6103da36610b89848a6004013560248c01612f70565b612c7f565b90816000527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d0060205260ff60406000205416610d5e57816000527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d00602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055610c2c81886004013560248a01612f70565b9183821015610d2f577f0bc97795ba26a99c8fa64f7929d95dc237ecae3c6db64508d07ca5cf1ef8a2a286866001957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8f8f898f9291610ca382610c9b610caa958260051b810190612d6b565b96909a612f23565b3598612f23565b3560405196879573ffffffffffffffffffffffffffffffffffffffff80610cd0836128db565b168852610cdf602083016128db565b166020880152604081013560408801526060809101359087015260e060808701528260e0870152826101009788880137600087848801015260a086015260c085015201168101030190a201610b63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602482604051907f8bdcb6160000000000000000000000000000000000000000000000000000000082526004820152fd5b60046040517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b5085841415610b5c565b5083811415610b55565b60446040517fe2517d3f0000000000000000000000000000000000000000000000000000000081523360048201527f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e6024820152fd5b610e5f610e57610e67610e3536612b34565b96909794610e479a949399929a612f4b565b50610e5134613a4d565b96613987565b9636916129cb565b953690612c7f565b73ffffffffffffffffffffffffffffffffffffffff9182865116338103610f925750600090610e958761310f565b9380845116610f05575b5087511561066f57608097610eb8610ec097838a6142d2565b874295613ad2565b610f0360405180926060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565bf35b9150610f108361317a565b918060208901511690602085015116808214801590610f80575b610f345750610e9f565b90846084926040808c015192015191604051937ffbd068270000000000000000000000000000000000000000000000000000000085526004850152602484015260448301526064820152fd5b50604089015160408601511415610f2a565b604490604051907f30a350760000000000000000000000000000000000000000000000000000000082526004820152336024820152fd5b346102155760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576110006128b8565b6004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005415806111f3575b15611195576110c6613eaa565b6110ce613fb3565b9060405191602083019280841067ffffffffffffffff851117611166576111456108d49261113795604052600083526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190612a53565b908582036040870152612a53565b90466060850152306080850152600060a085015283820360c0850152612b00565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154156110b9565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576108d4610912612ac7565b346102155760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155761128d612895565b6112956128b8565b60443567ffffffffffffffff8111610215576112b5903690600401612a96565b90917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff851680159081611ad1575b6001149081611ac7575b159081611abe575b50611a945760017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008616177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560ff8560401c1615611a3f575b73ffffffffffffffffffffffffffffffffffffffff80821615908115611a34575b50611a0a5761138861498e565b61139061498e565b611398612ac7565b6113a0612cc9565b906113a961498e565b6113b161498e565b80519067ffffffffffffffff82116111665781906113ef7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254613e57565b601f8111611941575b50602090601f831160011461181f57600092611814575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b80519067ffffffffffffffff82116111665761149d7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354613e57565b601f8111611752575b50602090601f831160011461164a57918061156e9594926115689460009261163f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005560007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155613235565b50613312565b5060005b81811061161a5760ff8460401c161561158757005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b8061163861163361162e6001948688612f23565b612d4a565b613411565b5001611572565b0151905089806114c9565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1036000527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759260005b81811061173a57509260019285926115689661156e99989610611703575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035561151b565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558980806116d6565b929360206001819287860151815501950193016116b8565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103600052601f830160051c7f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b750190602084106117ec575b601f0160051c7f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b7501905b8181106117e057506114a6565b600081556001016117d3565b7f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b7591506117a9565b01519050888061140f565b92507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026000527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d906000935b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841685106119265760019450837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08116106118ef575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255611461565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558880806118c2565b8181015183556020948501946001909301929091019061186b565b9091507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102600052601f830160051c7f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d01602084106119e3575b908392915b601f820160051c7f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d0181106119d457506113f8565b6000815584935060010161199f565b507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d61199a565b60046040517f9fabe1c1000000000000000000000000000000000000000000000000000000008152fd5b90508216158661137b565b680100000000000000017fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000008616177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561135a565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b90501586611300565b303b1591506112f8565b604087901c60ff161591506112ee565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576108d4604051611b1f81612918565b600d81527f5a6f726120436f6d6d656e7473000000000000000000000000000000000000006020820152604051918291602083526020830190612a53565b34610215577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc602081360112610215576004359067ffffffffffffffff8211610215576101c09082360301126102155761020d602091600401612dbc565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576020604051600a8152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155760206040517fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d8152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604081360112610215576004359067ffffffffffffffff808311610215576101c0836004019284360301126102155760243590811161021557611d27903690600401612a02565b6101a484019391611d3785612d16565b63ffffffff9081804616911603611edc575090611d7591611d5785612dbc565b91611d6186612d4a565b9161014486013593610164870135906136ef565b611d99611d8460448301612d4a565b611d8d84612d4a565b90606484013590613987565b90611da334613a4d565b916084820191610104810193611db98587612d6b565b939095611dd6611dcb60248601612d4a565b97610e573689612c7f565b93600094611de38461310f565b9673ffffffffffffffffffffffffffffffffffffffff80825116611e4f575b5050511561066f57611e34611e2b611e3c936103379b611e266101249c89896142d2565b612d6b565b99909201612d4a565b9736916129cb565b90611e4942963690612c7f565b94613ad2565b909650611e5b8761317a565b968160208701511691602082015116808314801590611eca575b611e7f5750611e02565b6084935060408088015192015191604051937ffbd068270000000000000000000000000000000000000000000000000000000085526004850152602484015260448301526064820152fd5b50604087015160408301511415611e75565b60249061036e87612d16565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611f7e5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60046040517fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60408136011261021557611fdb612895565b90602491823567ffffffffffffffff811161021557366023820112156102155761200e90369085816004013591016129cb565b9073ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016803014908115612446575b50611f7e573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602090815260409091205490919060ff161561240f57821693604051907f75d0c0dc0000000000000000000000000000000000000000000000000000000091828152600081600481838b5af19081156123a5576000916123f4575b5060405190838252600082600481305afa9182156123a5576000926123d7575b5084815191012090848151910120036122e45750506040517f52d1902d0000000000000000000000000000000000000000000000000000000081528181600481885afa600091816122b5575b5061217a578585604051907f4c9c8ce30000000000000000000000000000000000000000000000000000000082526004820152fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc918281036122875750843b156122585750817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156122255750600083819261033795519101845af461221f6149e7565b91614b41565b925050503461223057005b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b82604051907f4c9c8ce30000000000000000000000000000000000000000000000000000000082526004820152fd5b604051907faa1d49a40000000000000000000000000000000000000000000000000000000082526004820152fd5b9091508281813d83116122dd575b6122cd8183612950565b8101031261021557519087612145565b503d6122c3565b925092505060405191808352600083600481305afa9283156123a5576000936123b1575b506000929360048492604051958693849283525af180156123a55761236e9461237c93600092612380575b506040519586957fa23cbf7b000000000000000000000000000000000000000000000000000000008752604060048801526044870190612a53565b928584030190850152612a53565b0390fd5b61239e9192503d806000833e6123968183612950565b810190613690565b9086612333565b6040513d6000823e3d90fd5b600093509360046123cd8593963d8086833e6123968183612950565b9450509390612308565b6123ed9192503d806000833e6123968183612950565b90896120f9565b61240991503d806000833e6123968183612950565b886120d9565b6044866000604051917fe2517d3f000000000000000000000000000000000000000000000000000000008352336004840152820152fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141586612052565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155760206040517f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e8152f35b346102155760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576125046128b8565b3373ffffffffffffffffffffffffffffffffffffffff82160361252d57610337906004356135cf565b60046040517f6697b232000000000000000000000000000000000000000000000000000000008152fd5b346102155760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576103376004356125946128b8565b90806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526125ce6001604060002001546131b7565b61350a565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576020604051601e8152f35b346102155760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526020600160406000200154604051908152f35b346102155760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102155773ffffffffffffffffffffffffffffffffffffffff612734612895565b166000527fc84b62be2e432010aa71cc1bbdba4c7b02245544521aa5beae20093c706224006020526040600020602435600052602052602060ff604060002054166040519015158152f35b346102155760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361021557807f7965db0b0000000000000000000000000000000000000000000000000000000060209214908115612814575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482612809565b346102155760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610215576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361021557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361021557565b359073ffffffffffffffffffffffffffffffffffffffff8216820361021557565b6080810190811067ffffffffffffffff82111761116657604052565b6040810190811067ffffffffffffffff82111761116657604052565b60c0810190811067ffffffffffffffff82111761116657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761116657604052565b67ffffffffffffffff811161116657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926129d782612991565b916129e56040519384612950565b829481845281830111610215578281602093846000960137010152565b9181601f840112156102155782359167ffffffffffffffff8311610215576020838186019501011161021557565b60005b838110612a435750506000910152565b8181015183820152602001612a33565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612a8f81518092818752878088019101612a30565b0116010190565b9181601f840112156102155782359167ffffffffffffffff8311610215576020808501948460051b01011161021557565b60405190612ad482612918565b600882527f436f6d6d656e74730000000000000000000000000000000000000000000000006020830152565b90815180825260208080930193019160005b828110612b20575050505090565b835185529381019392810192600101612b12565b6101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102155773ffffffffffffffffffffffffffffffffffffffff916004358381168103610215579260243581811681036102155792604435926064359267ffffffffffffffff8411610215576080612bd6847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c96600401612a02565b9590959401126102155760849161010435828116810361021557916101243590811681036102155790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60809101126102155760405190612c38826128fc565b8173ffffffffffffffffffffffffffffffffffffffff6004358181168103610215578252602435908116810361021557602082015260443560408201526060606435910152565b919082608091031261021557604051612c97816128fc565b6060808294612ca5816128db565b8452612cb3602082016128db565b6020850152604081013560408501520135910152565b60405190612cd682612918565b600182527f31000000000000000000000000000000000000000000000000000000000000006020830152565b6101443563ffffffff811681036102155790565b3563ffffffff811681036102155790565b60843573ffffffffffffffffffffffffffffffffffffffff811681036102155790565b3573ffffffffffffffffffffffffffffffffffffffff811681036102155790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610215570180359067ffffffffffffffff82116102155760200191813603831361021557565b612dc860408201612d4a565b90612dd281612d4a565b612de7612de23660808501612c7f565b613d3c565b92612e00612df9610100850185612d6b565b36916129cb565b6020815191012091612e1460208501612d4a565b91612e226101208601612d4a565b90612e306101808701612d16565b93612e3e6101a08801612d16565b95604051987f24ba1c68e2ba339f50981ed71cb6c98d1a28a067665f83ea649433ab0b0b74e760208b015273ffffffffffffffffffffffffffffffffffffffff80968180961660408d015260608b013560608d01521660808b015260a08a015260c089015261014087013560e0890152610160870135610100890152166101208701521661014085015263ffffffff91828092166101608601521661018084015261018083526101a083019280841067ffffffffffffffff85111761116657610180612f1991612f2095604052602081519101209301612d16565b1690613dbb565b90565b9190811015610d2f5760051b0190565b67ffffffffffffffff81116111665760051b60200190565b60405190612f58826128fc565b60006060838281528260208201528260408201520152565b9190811015610d2f5760071b0190565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021557604051612fb6816128fc565b73ffffffffffffffffffffffffffffffffffffffff9060043582811681036102155781526024359082821682036102155761300591602082015260443560408201526064356060820152613d3c565b9060843591818316809303610215576101043591821680920361021557610124359163ffffffff908184168094036102155761014435918216809203610215576040519460208601937f01b6c3e5d963f61c036cc10c97aeba0ac10158c6cfa12416c35eeecd0a2508b985526040870152606086015260a435608086015260c43560a086015260e43560c086015260e0850152826101008501526101209081850152835261014083019280841067ffffffffffffffff85111761116657612f2093604052519020613dbb565b6130da9061310f565b90816000527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d0060205260ff6040600020541690565b6040516131566020820180936060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565b6080815260a0810181811067ffffffffffffffff8211176111665760405251902090565b613183906130d1565b9190911561318d57565b60046040517fc8e4a46f000000000000000000000000000000000000000000000000000000008152fd5b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260406000203360005260205260ff60406000205416156131fc5750565b6040517fe2517d3f0000000000000000000000000000000000000000000000000000000081523360048201526024810191909152604490fd5b73ffffffffffffffffffffffffffffffffffffffff1660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091907f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff1661330d57828052602052604082208183526020526040822060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505090565b73ffffffffffffffffffffffffffffffffffffffff1660008181527f3dcf8136aea27c4e59adba4b5b5f26ca29dc6e5a703de453b2361643c43217c760205260408120549091907f2294cdd65f68a33a3e7097ee86a70cf0f4adf6b27328c6b154d47834bdfcdf4e907f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff1661340b57818452602052604083208284526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b50505090565b73ffffffffffffffffffffffffffffffffffffffff1660008181527ff42a8efff468fcef324535266976260ddee6dd8f36b86533dba0904c131e743060205260408120549091907fc590cf330eebec919872b979b32e0cfb49fcb1f4a0cef88b6b29d9a1713fb87d907f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009060ff1661340b57818452602052604083208284526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b906000918083527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268008060205273ffffffffffffffffffffffffffffffffffffffff6040852093169283855260205260ff6040852054161560001461340b57818452602052604083208284526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b906000918083527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268008060205273ffffffffffffffffffffffffffffffffffffffff6040852093169283855260205260ff60408520541660001461340b5781845260205260408320828452602052604083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6020818303126102155780519067ffffffffffffffff8211610215570181601f820112156102155780516136c381612991565b926136d16040519485612950565b8184526020828401011161021557612f209160208085019101612a30565b919294804211613956575073ffffffffffffffffffffffffffffffffffffffff938481166000948186527fc84b62be2e432010aa71cc1bbdba4c7b02245544521aa5beae20093c70622400976020948986526040998a8920828a52875260ff8b8a205416613907578489528652898820908852855288872080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561379c913691906129cb565b906137a78286614be1565b5060048199929910156138da571597886138ce575b50505085156137fc575b5050505050156137d35750565b600490517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b84955090849293949187516138788161384c888201947f1626ba7e000000000000000000000000000000000000000000000000000000009a8b875260248401528c60448401526064830190612a53565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612950565b51915afa926138856149e7565b90846138c1575b846138a0575b5050505038808080806137c6565b909180939450828051810103126138be575001511438808080613892565b80fd5b935081815110159361388c565b161495503880806137bc565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b5089517f17a63d2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810191909152604490fd5b602490604051907f627913020000000000000000000000000000000000000000000000000000000082526004820152fd5b9190613991612f4b565b507f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d02918254927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8414613a1e57600184019055604051936139f1856128fc565b73ffffffffffffffffffffffffffffffffffffffff80921685521660208401526040830152606082015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8015613ab9577f0000000000000000000000000000000000000000000000000000000000000000808203613a82575050600190565b60449250604051917f72a3bac100000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b50600090565b81810292918115918404141715613a1e57565b9096939591949294816000527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d00928360205260409360ff856000205416613d0c5791613c16917feee8cd8185162ef6658993ba27320099864440fe513fb9ae1c9ab7421113b57293856000526020528560002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905585519283928c613bb7856101a0926060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565b8c6080860152613c0060a086018b6060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565b8b61012086015280610140860152840190612a53565b9061016083015273ffffffffffffffffffffffffffffffffffffffff88166101808301520390a28051613c4881612918565b600781527f436f6d6d656e7400000000000000000000000000000000000000000000000000602082015294613cce575b5082613c86575b5050505050565b613c96613cbe91613cc49661451a565b927f000000000000000000000000000000000000000000000000000000000000000090613abf565b9161454c565b3880808080613c7f565b90935051613cdb81612918565b600d81527f436f6d6d656e74205265706c790000000000000000000000000000000000000060208201529238613c78565b6024848651907f8bdcb6160000000000000000000000000000000000000000000000000000000082526004820152fd5b73ffffffffffffffffffffffffffffffffffffffff80602083015116916060604082015192825116910151906040519260208401947ff50b5c2dfba3cda25b5ff058b098c69c9663b57c8f7fa26975400600bdc66cb6865260408501526060840152608083015260a082015260a08152613db581612934565b51902090565b604291613dc6614f97565b90613dcf615001565b906040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85526040840152606083015260808201523060a082015260a08152613e1e81612934565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b90600182811c92168015613ea0575b6020831014613e7157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691613e66565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10291825492613edf84613e57565b80845293602091600191828116908115613f6e5750600114613f0d575b505050613f0b92500383612950565b565b60009081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410613f565750613f0b945050508101602001388080613efc565b85548885018301529485019487945092810192613f3a565b91505060209350613f0b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101388080613efc565b604051906000827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492613fe884613e57565b80845293602091600191828116908115613f6e575060011461401357505050613f0b92500383612950565b60009081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b82841061405c5750613f0b945050508101602001388080613efc565b85548885018301529485019487945092810192614040565b7f0000000000000000000000000000000000000000000000000000000000000000906140a08282613abf565b83036140ab57505050565b604492916140b891613abf565b604051917f72a3bac100000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b919273ffffffffffffffffffffffffffffffffffffffff91828085511691169081146142905761411a8461310f565b9460008681527f9e5d0d3a4c7e8d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d9d5b9e8f9d008060205260ff6040832054161561318d57878252602052600160408220018054918383018093116142635750916101009593917fb2c2c602f3c1f47735b32d6a660d741f13d555e25493cf652586575aac1962d497959355614207848651166141ca7f000000000000000000000000000000000000000000000000000000000000000084613abf565b85604051926141d884612918565b600f84527f537061726b656420436f6d6d656e740000000000000000000000000000000000602085015261454c565b61424a60405180966060809173ffffffffffffffffffffffffffffffffffffffff8082511685526020820151166020850152604081015160408501520151910152565b608085015260a08401524260c08401521660e0820152a2565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b60046040517f2951d9c9000000000000000000000000000000000000000000000000000000008152fd5b90816020910312610215575180151581036102155790565b909173ffffffffffffffffffffffffffffffffffffffff80821680614366575b506020830192818451169161431284604084019485518486511691614a17565b61435e5780614328955116925191511691614a5c565b15614334571561033957565b60046040517fd8a26f99000000000000000000000000000000000000000000000000000000008152fd5b505050505050565b823b1561441a576020828551166024604051809481937fa2e1a8d800000000000000000000000000000000000000000000000000000000835260048301525afa9081156123a5576000916143eb575b50156143c157386142f2565b60046040517fee4e75cf000000000000000000000000000000000000000000000000000000008152fd5b61440d915060203d602011614413575b6144058183612950565b8101906142ba565b386143b5565b503d6143fb565b60046040517f4eb2199c000000000000000000000000000000000000000000000000000000008152fd5b9073ffffffffffffffffffffffffffffffffffffffff808216806144a0575b506020830192818451169161448384604084019485518486511691614a17565b613c7f5780614499955116925191511691614a5c565b1561433457565b823b1561441a576020828551166024604051809481937fa2e1a8d800000000000000000000000000000000000000000000000000000000835260048301525afa9081156123a5576000916144fb575b50156143c15738614463565b614514915060203d602011614413576144058183612950565b386144ef565b9073ffffffffffffffffffffffffffffffffffffffff9182825116156145405750511690565b9050612f209150614a99565b73ffffffffffffffffffffffffffffffffffffffff93918416928315801593919291906149855760ff60035b1661458281612f33565b94604096879161459483519889612950565b8388526145a084612f33565b95602092838a01927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08099013685376146186145db88612f33565b976145e88851998a612950565b8089528a6145f582612f33565b0136888b013761461061460782612f33565b98519889612950565b808852612f33565b8686019901368a37156148bc5788600a02600a81048a03613a1e5760649004906146418b614b07565b8d7f00000000000000000000000000000000000000000000000000000000000000001690528161467088614b07565b527f538b62d60000000000000000000000000000000000000000000000000000000061469b87614b07565b5289601402601481048b03613a1e57614702928c926146c060646146fd940494614b14565b52826146cb8a614b14565b527feb4a589f000000000000000000000000000000000000000000000000000000006146f689614b14565b528b614b34565b614b34565b908b61470d8b614b24565b9116905261471a85614b24565b527ffbaf211e0000000000000000000000000000000000000000000000000000000061474584614b24565b525b897f00000000000000000000000000000000000000000000000000000000000000001697883b1561021557969493929089989698519a8b987f300def95000000000000000000000000000000000000000000000000000000008a5260848a0190608060048c01525180915260a48a0192916000905b82821061489f57505050506147fd83917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc95868b83030160248c0152612b00565b91848984030160448a0152519182815201979160005b82811061486657505050506148378686949385938460009a03016064850152612a53565b03925af1801561485b57614849575050565b67ffffffffffffffff82116111665752565b50513d6000823e3d90fd5b83517fffffffff00000000000000000000000000000000000000000000000000000000168a52988101988b985092810192600101614813565b8351811685528e9b509386019392860192600191909101906147bc565b5087601e02601e81048903613a1e57606461493c91046148db8b614b07565b8d7f00000000000000000000000000000000000000000000000000000000000000001690528061490a88614b07565b527f538b62d60000000000000000000000000000000000000000000000000000000061493587614b07565b5289614b34565b908b6149478b614b14565b9116905261495485614b14565b527ffbaf211e0000000000000000000000000000000000000000000000000000000061497f84614b14565b52614747565b60ff6002614578565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156149bd57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b3d15614a12573d906149f882612991565b91614a066040519384612950565b82523d6000602084013e565b606090565b9291614a24908285614c1d565b614a545773ffffffffffffffffffffffffffffffffffffffff8216614a4b57505050600090565b612f2092614c1d565b505050600190565b9291614a69908285614ca5565b614a545773ffffffffffffffffffffffffffffffffffffffff8216614a9057505050600090565b612f2092614ca5565b614aa281614d62565b9073ffffffffffffffffffffffffffffffffffffffff91828116614b015750816020614ad092015116614e1f565b908116612f205760046040517f06e65373000000000000000000000000000000000000000000000000000000008152fd5b91505090565b805115610d2f5760200190565b805160011015610d2f5760400190565b805160021015610d2f5760600190565b91908203918211613a1e57565b90614b805750805115614b5657805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580614bd8575b614b91575090565b60249073ffffffffffffffffffffffffffffffffffffffff604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b15614b89565b8151919060418303614c1257614c0b92506020820151906060604084015193015160001a90615046565b9192909190565b505060009160029190565b60646020929373ffffffffffffffffffffffffffffffffffffffff809360405196879586947f23bd0386000000000000000000000000000000000000000000000000000000008652166004850152602484015260026044840152165afa9081156123a557600091614c8c575090565b612f20915060203d602011614413576144058183612950565b60446020929373ffffffffffffffffffffffffffffffffffffffff809360405196879586947efdd58e0000000000000000000000000000000000000000000000000000000086521660048501526024840152165afa9081156123a557600091614d0f575b50151590565b90506020813d602011614d39575b81614d2a60209383612950565b81010312610215575138614d09565b3d9150614d1d565b519073ffffffffffffffffffffffffffffffffffffffff8216820361021557565b6020604073ffffffffffffffffffffffffffffffffffffffff82840151169201516024604051809481937f5e4e040400000000000000000000000000000000000000000000000000000000835260048301525afa60009181614dca575b50612f205750600090565b9091506020813d602011614dfe575b81614de660209383612950565b8101031261021557614df790614d41565b9038614dbf565b3d9150614dd9565b51906bffffffffffffffffffffffff8216820361021557565b73ffffffffffffffffffffffffffffffffffffffff809116906040517f79502c5500000000000000000000000000000000000000000000000000000000815260c081600481865afa8091600091614f16575b5090614f08575b506020600492604051938480927f8da5cb5b0000000000000000000000000000000000000000000000000000000082525afa60009281614ecc575b50614ec0575b5050600090565b8116612f205780614eb9565b9092506020813d602011614f00575b81614ee860209383612950565b8101031261021557614ef990614d41565b9138614eb3565b3d9150614edb565b81168015614e785791505090565b60c0813d60c011614f8f575b81614f2f60c09383612950565b81010312614f8b57614f4081614d41565b50614f4d60208201614e06565b5060408101519184831683036138be575060a081614f706060614f849401614e06565b50614f7d60808201614d41565b5001614e06565b5038614e71565b5080fd5b3d9150614f22565b614f9f613eaa565b8051908115614faf576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015614fdc5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b615009613fb3565b8051908115615019576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614fdc5790565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116150d757926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156150cb57805173ffffffffffffffffffffffffffffffffffffffff8116156150c257918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fea264697066735822122018321481ef3dce44f01b1b7e209a33b67a940cc698123c834a03bdea154769b664736f6c63430008170033000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000007777777f279eba3d3ad8f4e708545291a6fdba8b000000000000000000000000d1d1d4e36117ab794ec5d4c78cbd3a8904e691d0