@imaginarylabs/assemble
Version:
Assemble Protocol - Decentralized event management smart contracts with social coordination features
1 lines • 228 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_feeTo","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_PAYMENT_SPLITS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_PLATFORM_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_PROTOCOL_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_TICKET_QUANTITY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"REFUND_CLAIM_DEADLINE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addFriend","inputs":[{"name":"friend","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"calculatePrice","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"quantity","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"cancelEvent","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkIn","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkInDelegate","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"ticketTokenId","type":"uint256","internalType":"uint256"},{"name":"attendee","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"checkInWithTicket","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"ticketTokenId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimERC20Funds","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimFunds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimOrganizerCredential","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimTicketRefund","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"claimTipRefund","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"comments","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"content","type":"string","internalType":"string"},{"name":"parentId","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"createEvent","inputs":[{"name":"params","type":"tuple","internalType":"struct Assemble.EventParams","components":[{"name":"title","type":"string","internalType":"string"},{"name":"description","type":"string","internalType":"string"},{"name":"imageUri","type":"string","internalType":"string"},{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"endTime","type":"uint256","internalType":"uint256"},{"name":"capacity","type":"uint256","internalType":"uint256"},{"name":"latitude","type":"int64","internalType":"int64"},{"name":"longitude","type":"int64","internalType":"int64"},{"name":"venueName","type":"string","internalType":"string"},{"name":"visibility","type":"uint8","internalType":"enum Assemble.EventVisibility"}]},{"name":"tiers","type":"tuple[]","internalType":"struct Assemble.TicketTier[]","components":[{"name":"name","type":"string","internalType":"string"},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"maxSupply","type":"uint256","internalType":"uint256"},{"name":"sold","type":"uint256","internalType":"uint256"},{"name":"startSaleTime","type":"uint256","internalType":"uint256"},{"name":"endSaleTime","type":"uint256","internalType":"uint256"},{"name":"transferrable","type":"bool","internalType":"bool"}]},{"name":"splits","type":"tuple[]","internalType":"struct Assemble.PaymentSplit[]","components":[{"name":"recipient","type":"address","internalType":"address"},{"name":"basisPoints","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"eventInvites","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"eventOrganizers","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"events","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"basePrice","type":"uint128","internalType":"uint128"},{"name":"locationData","type":"uint128","internalType":"uint128"},{"name":"startTime","type":"uint64","internalType":"uint64"},{"name":"capacity","type":"uint32","internalType":"uint32"},{"name":"venueHash","type":"uint64","internalType":"uint64"},{"name":"tierCount","type":"uint16","internalType":"uint16"},{"name":"visibility","type":"uint8","internalType":"uint8"},{"name":"status","type":"uint8","internalType":"uint8"},{"name":"flags","type":"uint8","internalType":"uint8"},{"name":"reserved","type":"uint8","internalType":"uint8"},{"name":"padding","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"feeTo","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"generateTokenId","inputs":[{"name":"tokenType","type":"uint8","internalType":"enum Assemble.TokenType"},{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"serialNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"tokenId","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"getComment","inputs":[{"name":"commentId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct CommentLibrary.Comment","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"content","type":"string","internalType":"string"},{"name":"parentId","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getEventComments","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getFriends","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"inviteToEvent","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"invitees","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isFriend","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isOperator","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"nextCommentId","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"nextEventId","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pendingERC20Withdrawals","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pendingWithdrawals","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postComment","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"content","type":"string","internalType":"string"},{"name":"parentId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"protocolFeeBps","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"purchaseTickets","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"quantity","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"purchaseTickets","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"quantity","type":"uint256","internalType":"uint256"},{"name":"referrer","type":"address","internalType":"address"},{"name":"platformFeeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"purchaseTicketsERC20","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"quantity","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"},{"name":"referrer","type":"address","internalType":"address"},{"name":"platformFeeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"purchaseTicketsERC20","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"tierId","type":"uint256","internalType":"uint256"},{"name":"quantity","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeFriend","inputs":[{"name":"friend","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rsvps","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint8","internalType":"enum SocialLibrary.RSVPStatus"}],"stateMutability":"view"},{"type":"function","name":"setFeeTo","inputs":[{"name":"newFeeTo","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOperator","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFee","inputs":[{"name":"newFeeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSupportedToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"supported","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportedTokens","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"ticketTiers","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"name","type":"string","internalType":"string"},{"name":"price","type":"uint256","internalType":"uint256"},{"name":"maxSupply","type":"uint256","internalType":"uint256"},{"name":"sold","type":"uint256","internalType":"uint256"},{"name":"startSaleTime","type":"uint256","internalType":"uint256"},{"name":"endSaleTime","type":"uint256","internalType":"uint256"},{"name":"transferrable","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"tipEvent","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"referrer","type":"address","internalType":"address"},{"name":"platformFeeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"tipEvent","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"tipEventERC20","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"referrer","type":"address","internalType":"address"},{"name":"platformFeeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tipEventERC20","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalSupply","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateRSVP","inputs":[{"name":"eventId","type":"uint256","internalType":"uint256"},{"name":"status","type":"uint8","internalType":"enum SocialLibrary.RSVPStatus"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"usedTickets","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"userTicketPayments","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"userTipPayments","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"venueEventCount","inputs":[{"name":"","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CommentPosted","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"commentId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"author","type":"address","indexed":true,"internalType":"address"},{"name":"parentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ERC20FundsClaimed","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EventCancelled","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"organizer","type":"address","indexed":true,"internalType":"address"},{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EventCreated","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"organizer","type":"address","indexed":true,"internalType":"address"},{"name":"startTime","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EventTipped","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"tipper","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeToUpdated","inputs":[{"name":"oldFeeTo","type":"address","indexed":true,"internalType":"address"},{"name":"newFeeTo","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FundsClaimed","inputs":[{"name":"recipient","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OperatorSet","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"PlatformFeeAllocated","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"referrer","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"feeBps","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"oldFee","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RefundClaimed","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TicketPurchased","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"buyer","type":"address","indexed":true,"internalType":"address"},{"name":"quantity","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"price","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TokenSupportUpdated","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"supported","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"UserInvited","inputs":[{"name":"eventId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"invitee","type":"address","indexed":true,"internalType":"address"},{"name":"organizer","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VenueCredentialMinted","inputs":[{"name":"organizer","type":"address","indexed":true,"internalType":"address"},{"name":"venueHash","type":"uint64","indexed":true,"internalType":"uint64"}],"anonymous":false},{"type":"error","name":"BadInput","inputs":[]},{"type":"error","name":"BadPayment","inputs":[]},{"type":"error","name":"BadState","inputs":[]},{"type":"error","name":"BadTiming","inputs":[]},{"type":"error","name":"NoSupply","inputs":[]},{"type":"error","name":"NotAuth","inputs":[]},{"type":"error","name":"NotFound","inputs":[]},{"type":"error","name":"OpFailed","inputs":[]},{"type":"error","name":"SocialError","inputs":[]},{"type":"error","name":"TooMany","inputs":[]},{"type":"error","name":"UnsupportedToken","inputs":[]}],"bytecode":{"object":"0x608034620000c457601f62005f8838819003918201601f19168301916001600160401b03831184841017620000c857808492602094604052833981010312620000c457516001600160a01b03811690819003620000c45760015f556001805560326002558015620000b257600380546001600160a01b03191682179055604051905f7f8f93286d6f131e956d1aa672d3ecdc817f24efc20b223b0de5d591f454edc3478180a3615eab9081620000dd8239f35b60405163bdbbb53360e01b8152600490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8062fdd58e146103e3578063017e7e58146103de578063036d9ce7146103d95780630411b252146103d4578063051ea330146103cf578063059544c1146103ca5780630800e300146103c557806308a91ef5146103c05780630b791430146103bb5780630ef6c90d146103b65780631580de26146103b15780631fd209e3146103ac5780632a00c7e9146103a75780632da5d42e146103a257806335659fb81461039d578063388d578814610398578063392d399b146103935780633998a6811461038e5780633c5a1490146103895780633cb04e89146103845780633e5246ab1461037f5780633e6976cb1461037a5780633e978672146103755780633f69babd14610370578063426a84931461036b57806344d4c1a314610366578063558a729714610361578063598af9e71461035c5780635cbaedee146103575780635cbb7caa146103525780635dd0a9581461034d578063601b689f1461034857806363dab7e31461034357806366517ccc1461033e57806368c4ac261461033957806371a4597c1461033457806371efdc211461032f578063787dce3d1461032a57806378a35058146103255780637e4d63d81461032057806380cee8a51461031b5780638ebb4c15146103165780639f9d903a14610311578063a3e57e561461030c578063ac30777314610307578063b0ec0fdb14610302578063b6363cf2146102fd578063b8ca3b83146102f8578063bd85b039146102f3578063c07f4732146102ee578063d0bdacbe146102e9578063d2da3e31146102e4578063d7a1cfe1146102df578063e015c62a146102da578063e7986466146102d5578063e95a644f146102d0578063ee1909b2146102cb578063f3f43703146102c6578063f46901ed146102c1578063f5c4dbc9146102bc5763fac17548146102b7575f80fd5b61487d565b61472f565b61467b565b614614565b6143fd565b614308565b614262565b61422a565b614153565b613ff2565b613fb7565b613f0a565b613ec2565b613e88565b613e2f565b613d32565b613c89565b613bdc565b613ba2565b613b0a565b613977565b613907565b6137b1565b61371a565b6136cd565b613692565b613626565b6135c9565b61327e565b613245565b612f11565b612e5c565b612d99565b612cf3565b612c35565b612b29565b612a62565b612906565b612538565b6123a4565b612346565b6120e5565b612044565b61200a565b611c21565b611bb0565b611b75565b611b10565b611a08565b61194c565b611678565b6115e6565b6114f2565b6113d9565b611145565b610a05565b61082d565b610528565b6104ce565b61047d565b61040a565b73ffffffffffffffffffffffffffffffffffffffff81160361040657565b5f80fd5b346104065760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065773ffffffffffffffffffffffffffffffffffffffff60043561045a816103e8565b165f52600f60205260405f206024355f52602052602060405f2054604051908152f35b34610406575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760043567ffffffffffffffff8116809103610406575f526018602052602060405f2054604051908152f35b346104065760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657600435610563816103e8565b60243561056f816103e8565b6044356064359273ffffffffffffffffffffffffffffffffffffffff80821693843314158080916107f5575b806107bc575b610792578460f81c60028114908115610787575b811561077c575b50610752578461061a7f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac7288599583610627949061070f575b61068b5773ffffffffffffffffffffffffffffffffffffffff165f52600f60205260405f2090565b905f5260205260405f2090565b61063287825461494c565b90556106608461061a8373ffffffffffffffffffffffffffffffffffffffff165f52600f60205260405f2090565b61066b878254614977565b90556040805194855260208501969096521693339290819081015b0390a4005b6106de8361061a336106bb8573ffffffffffffffffffffffffffffffffffffffff165f52601060205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b6106e98b825461494c565b905573ffffffffffffffffffffffffffffffffffffffff165f52600f60205260405f2090565b5061074d610749610742336106bb8573ffffffffffffffffffffffffffffffffffffffff165f52601160205260405f2090565b5460ff1690565b1590565b6105f2565b60046040517f33ea2b44000000000000000000000000000000000000000000000000000000008152fd5b60049150145f6105bc565b6003811491506105b5565b60046040517fc14d5d60000000000000000000000000000000000000000000000000000000008152fd5b50866107ee8661061a336106bb8973ffffffffffffffffffffffffffffffffffffffff165f52601060205260405f2090565b54106105a1565b50610828610749610742336106bb8873ffffffffffffffffffffffffffffffffffffffff165f52601160205260405f2090565b61059b565b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657600435611003805c610406576001815d600160ff61089182610886865f52600460205260405f2090565b015460b81c60ff1690565b16036109db576108b26108ac835f52601560205260405f2090565b54614959565b42116109b1576108f06108cd835f52601360205260405f2090565b3373ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b548015610987575f61090e336106bb865f52601360205260405f2090565b555f80808084335af161091f6149ec565b501561095d576040519081525f9233917ff3f402280ef0a7905e124aa621b65eaeb2725c343e8b36d398ed78c29daf285c9080602081015b0390a35d005b60046040517fc3976d6c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b60046040517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8523b62a000000000000000000000000000000000000000000000000000000008152fd5b346104065760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760046064356044358235602435610a4a846103e8565b60843594610a57866103e8565b6110039460a435865c6104065760019283885d67ffffffffffffffff610a9885610a89895f52600460205260405f2090565b015467ffffffffffffffff1690565b161561107257610acc6107496107428573ffffffffffffffffffffffffffffffffffffffff165f52601960205260405f2090565b61104a576101f48211610fd2578115158061102c575b6110045773ffffffffffffffffffffffffffffffffffffffff8916903382146110045787158015610ffa575b610fd257610b288661061a895f52600660205260405f2090565b6002810154968715610fa957828201544210610f805760058201544211610f80576003820191825498610b5b8c8b614977565b11610f0b57600260ff610b858a610b7a8e5f52600460205260405f2090565b015460b01c60ff1690565b161480610f5d575b610f34578a88610b9e920154614a1b565b978815610f0b578a610baf91614977565b8255865f5b8a8c808310610ea85750506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201908152336024830152306044830152606482018c90525f955085945092509050610c3c81608481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261129b565b519082885af1610c4a6149ec565b5015610e8057509083929186610c6b610c638489614a1b565b612710900490565b9a610c768c8961494c565b93610c90610c89610c6360025488614a1b565b809661494c565b9c80610e0c575b505050505080610db8575b509050610cb7845f52600860205260405f2090565b5f835b610d00575b60408051888152602081018790525f918a9133918a917fef266bb11bf4b58aa8562ab8c8746e3b84a521780a2c57ca09d87bae13f5eb099181908101610957565b8154811015610db357908382610d28610c6383610d1f81989787614a5b565b5001548d614a1b565b610da8610da0610d568773ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b610d7e610d638689614a5b565b505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b918254614977565b905501909192610cba565b610cbf565b610e04610da0610de68473ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b60035473ffffffffffffffffffffffffffffffffffffffff16610d7e565b90555f610ca2565b610e597fd621d379087cd90275364e79a56640d3c84c09bf89df55558627e0142e9f11c7936106bb8973ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b610e64828254614977565b9055604080519182526020820192909252a35f86818080610c97565b6040517fc3976d6c000000000000000000000000000000000000000000000000000000008152fd5b610f039185610ecc610ec786610ec2610efd968c5461494c565b614977565b614969565b917f0100000000000000000000000000000000000000000000000000000000000000929160981b9060b81b17171790565b33615cc6565b018790610bb4565b836040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b836040517f33ea2b44000000000000000000000000000000000000000000000000000000008152fd5b50610f7b6107496107428c6106bb33915f52601760205260405f2090565b610b8d565b826040517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b826040517fad44c75c000000000000000000000000000000000000000000000000000000008152fd5b6040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b5060328811610b0e565b6040517f2bb9acf7000000000000000000000000000000000000000000000000000000008152fd5b5073ffffffffffffffffffffffffffffffffffffffff891615610ae2565b6040517f6a172882000000000000000000000000000000000000000000000000000000008152fd5b6040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b91908251928382525f5b8481106110e25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b6020818301810151848301820152016110a4565b6020815273ffffffffffffffffffffffffffffffffffffffff8251166020820152602082015160408201526080606061113c6040850151838386015260a085019061109a565b93015191015290565b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576111f860405f606082516111878161127a565b828152826020820152818482015201526004355f526009602052805f209060038151926111b38461127a565b73ffffffffffffffffffffffffffffffffffffffff8154168452600181015460208501526111e3600282016112dc565b838501520154606083015251918291826110f6565b0390f35b90600182811c92168015611243575b602083101461121657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161120b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761129657604052565b61124d565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761129657604052565b9060405191825f82546112ee816111fc565b908184526020946001916001811690815f1461135c575060011461131e575b50505061131c9250038361129b565b565b5f90815285812095935091905b81831061134457505061131c93508201015f808061130d565b8554888401850152948501948794509183019161132b565b91505061131c9593507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f808061130d565b95926113b860c096939998959260e0895260e089019061109a565b98602088015260408701526060860152608085015260a08401521515910152565b346104065760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576004355f52600660205260405f206024355f5260205260405f2061142b816112dc565b6111f8600183015492600281015490600381015460048201549060ff6006600585015494015416936040519788978861139d565b989694919b9a99979593906101608a019c6fffffffffffffffffffffffffffffffff8092168b521660208a015267ffffffffffffffff80931660408a015263ffffffff16606089015216608087015261ffff1660a086015260ff1660c085015260ff1660e084015261010083016114d79160ff169052565b60ff166101208201526101400161131c9163ffffffff169052565b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576004355f52600460205260405f20600181549101546111f867ffffffffffffffff9263ffffffff93604051948481879660d01c169360ff8260c81c169360ff8360c01c169360ff8460b81c169360ff8160b01c169361ffff8260a01c1693808360601c16938360401c169216906fffffffffffffffffffffffffffffffff8160801c91168c61145f565b60209060206040818301928281528551809452019301915f5b8281106115d2575050505090565b8351855293810193928101926001016115c4565b34610406576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576004355f52600a60205260405f20906040519081602084549182815201935f5260205f20915f905b828210611661576111f8856116558189038261129b565b604051918291826115ab565b83548652948501946001938401939091019061163e565b346104065760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760048035602435604435926116bb846103e8565b6040806116d86116d3865f52600460205260405f2090565b614a79565b0167ffffffffffffffff90816116f6825167ffffffffffffffff1690565b16156118f75761171e611711825167ffffffffffffffff1690565b67ffffffffffffffff1690565b42106118cf5761171161173c611741925167ffffffffffffffff1690565b614b40565b42116118a8576117738461061a3373ffffffffffffffffffffffffffffffffffffffff165f52600f60205260405f2090565b54156118815784908460b81c160361185b5761179a610742845f52601660205260405f2090565b61185b578461181c8563ffffffff866117e96117be825f52601660205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60981c16907f02000000000000000000000000000000000000000000000000000000000000009160981b9060b81b171790565b6118488161061a8473ffffffffffffffffffffffffffffffffffffffff165f52600f60205260405f2090565b541561185057005b61185991615cc6565b005b517f33ea2b44000000000000000000000000000000000000000000000000000000008152fd5b50517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b50517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b5050517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b5050517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b346104065760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760ff6119bd60243561198c816103e8565b6004355f52600e60205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b541660405160048210156119d2576020918152f35b61191f565b9181601f840112156104065782359167ffffffffffffffff8311610406576020808501948460051b01011161040657565b34610406577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606081360112610406576004359067ffffffffffffffff90818311610406576101409083360301126104065760243581811161040657611a729036906004016119d7565b919092604435928284116104065736602385011215610406578360040135928311610406573660248460061b86010111610406576111f8946024611aba950192600401615458565b6040519081529081906020820190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261040657600435611b00816103e8565b90602435611b0d816103e8565b90565b3461040657602060ff611b6973ffffffffffffffffffffffffffffffffffffffff611b3a36611aca565b91165f52600c845260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54166040519015158152f35b34610406575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576020600254604051908152f35b34610406575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657602060405160148152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261040657600435906024359060443590565b611c2a36611be9565b61100392919291825c610406576001936001845d67ffffffffffffffff611c5e6001610a89855f52600460205260405f2090565b16156109875782158015612000575b611fd657611c878161061a845f52600660205260405f2090565b946002860154958615611fac57600492838201544210611f835760058201544211611f83576003820191825498611cbe888b614977565b11611ee6573315611f5a57600260ff611ce46001610b7a8a5f52600460205260405f2090565b161480611f38575b611f0f57866001611cfe920154614a1b565b97883410611ee65786611d1091614977565b8255611d28336106bb875f52601360205260405f2090565b611d33898254614977565b90555f5b868110611e955750505050611d74611d54610c6360025488614a1b565b611d5e818861494c565b9080151580611e52575b611e01575b5083615de6565b843411611dbb575b506040805192835260208301949094525f9333927fef266bb11bf4b58aa8562ab8c8746e3b84a521780a2c57ca09d87bae13f5eb099181908101610957565b5f808080611dc9893461494c565b335af1611dd46149ec565b50611d7c576040517fc3976d6c000000000000000000000000000000000000000000000000000000008152fd5b611e4a610da0611e2660035473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff165f52600b60205260405f2090565b90555f611d6d565b50611e8e611e7560035473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b1515611d68565b80611ee0610efd611eaf610ec78895610ec28d8a5461494c565b60b88a901b609887901b17177f01000000000000000000000000000000000000000000000000000000000000001790565b01611d37565b846040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b846040517f33ea2b44000000000000000000000000000000000000000000000000000000008152fd5b50611f55610749610742336106bb8a5f52601760205260405f2090565b611cec565b846040517f2bb9acf7000000000000000000000000000000000000000000000000000000008152fd5b836040517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b60046040517fad44c75c000000000000000000000000000000000000000000000000000000008152fd5b60046040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b5060328311611c6d565b34610406575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760206040516101f48152f35b3461040657602061209b73ffffffffffffffffffffffffffffffffffffffff61206c36611aca565b91165f52601a835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261040657600435906024356120de816103e8565b9060443590565b6120ee366120a4565b909161100391825c610406576001835d67ffffffffffffffff61211e6001610a89855f52600460205260405f2090565b1615610987573415611fd6576101f48111611fd657801515908180612328575b6122fe5773ffffffffffffffffffffffffffffffffffffffff8516913383146122fe575f956121da93856121ab94612182336106bb845f52601460205260405f2090565b61218d348254614977565b9055899483151590816122f6575b50612266575b505050503461494c565b6121c46121bd610c6360025484614a1b565b809261494c565b908015158061223c575b61220f575b5082615de6565b6040513481523391907fc9190f41680b22f0a6c2e134aff0e19883fb591309280918a988bedc91b28a26908060208101610957565b612234610da0611e2660035473ffffffffffffffffffffffffffffffffffffffff1690565b90555f6121d3565b5061225f611e7560035473ffffffffffffffffffffffffffffffffffffffff1690565b15156121ce565b7fd621d379087cd90275364e79a56640d3c84c09bf89df55558627e0142e9f11c79192939450806122c56122a0610c636122ea9434614a1b565b9673ffffffffffffffffffffffffffffffffffffffff165f52600b60205260405f2090565b6122d0878254614977565b905560408051878152602081019290925290918291820190565b0390a35f8085816121a1565b90505f61219b565b60046040517f2bb9acf7000000000000000000000000000000000000000000000000000000008152fd5b5073ffffffffffffffffffffffffffffffffffffffff85161561213e565b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576004355f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346104065760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065767ffffffffffffffff602435600435828211610406573660238301121561040657816004013583811161040657366024828501011161040657604435936124276001610a89855f52600460205260405f2090565b1615610987578015801561252d575b6122fe57836124e9575b61249a906124786001549461245c61245787614b69565b600155565b6124646149a5565b3381529242602085015260243692016159cb565b6040820152846060820152612495845f52600960205260405f2090565b615a01565b6124b5826124b0835f52600a60205260405f2090565b615bb2565b60405192835233927f6cdb8a8ec480dd4a658ef921bcd92a7a501b27167b6e7a5ad1b97c94da6bbefb908060208101610686565b60016124fd855f52600960205260405f2090565b01546124405760046040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b506103e88111612436565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610406576024356064356044356004803590612579846103e8565b6084359461100394855c610406576001966001875d67ffffffffffffffff6125ae6001610a89885f52600460205260405f2090565b16156128dd57851580156128d3575b610f0b576125d78361061a875f52600660205260405f2090565b9060028201549889156128aa578583015442106128815760058301544211612881576003830180549a61260a8a8d614977565b11612858576101f483116128585782151595868061283a575b6128115773ffffffffffffffffffffffffffffffffffffffff8616943386146127e857600260ff6126616001610b7a8e5f52600460205260405f2090565b1614806127c5575b61279c578a600161267b920154614a1b565b9b8c341061277357906126928b8b96959493614977565b82558c6126ae610da0336106bb895f52601360205260405f2090565b90555f5b8b808210612748575050505050916126e79391611d7495938b5f958415159081612740575b506126f9575b935050505061494c565b611d5e6121bd610c6360025484614a1b565b7fd621d379087cd90275364e79a56640d3c84c09bf89df55558627e0142e9f11c79293949550906122c56122a0610c638361273395614a1b565b0390a35f8086818b6126dd565b90505f6126d7565b610efd85969784610ecc610ec786610ec2612767978b9c9a9b5461494c565b019190899493926126b2565b886040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b886040517f33ea2b44000000000000000000000000000000000000000000000000000000008152fd5b506127e36107496107428c6106bb33915f52601760205260405f2090565b612669565b886040517f2bb9acf7000000000000000000000000000000000000000000000000000000008152fd5b876040517f2bb9acf7000000000000000000000000000000000000000000000000000000008152fd5b5073ffffffffffffffffffffffffffffffffffffffff861615612623565b866040517fbdbbb533000000000000000000000000000000000000000000000000000000008152fd5b856040517f276d5598000000000000000000000000000000000000000000000000000000008152fd5b856040517fad44c75c000000000000000000000000000000000000000000000000000000008152fd5b50603286116125bd565b836040517fc5723b51000000000000000000000000000000000000000000000000000000008152fd5b346104065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760043561296761294d825f52600560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff339116036107925760ff61299d6001610886845f52600460205260405f2090565b166109db576129bc6117116001610a89845f52600460205260405f2090565b4210156109b157612a1d60016129da835f52600460205260405f2090565b01770100000000000000000000000000000000000000000000007fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff825416179055565b42612a30825f52601560205260405f2090565b556040514281523391907fa128805e9787c02636444667a035d27eef98494621cd8204a10744b1dac5b6f490602090a3005b346104065760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657600435612a9d816103e8565b6024359073ffffffffffffffffffffffffffffffffffffffff60443591335f526010602052612aed8160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b845f526020528260405f205560405192835216907fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a760203392a4005b346104065760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760043560243590600482101561040657805f52600460205267ffffffffffffffff600160405f2001541615610987575f52600e602052612bb860405f203373ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691161790555f80f35b8015150361040657565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261040657600435612c28816103e8565b90602435611b0d81612be8565b346104065773ffffffffffffffffffffffffffffffffffffffff612c5836612bf2565b9190335f526011602052612cc183612c918360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b604051921515835216907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a3005b346104065760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657612d82600435612d31816103e8565b73ffffffffffffffffffffffffffffffffffffffff60243591612d53836103e8565b165f52601060205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b6044355f52602052602060405f2054604051908152f35b346104065760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657602060ff611b69602435612ddb816103e8565b6004355f526017845260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b60209060206040818301928281528551809452019301915f5b828110612e32575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612e24565b34610406576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657600435612e98816103e8565b73ffffffffffffffffffffffffffffffffffffffff8091165f52600d60205260405f20916040518092602085549283815201945f5260205f20925f915b838310612ef8576111f886612eec818a038261129b565b60405191829182612e0b565b8454811687529581019560019485019490920191612ed5565b346104065760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104065760046024358135612f50826103e8565b6044359060643592612f61846103e8565b61100393608435855c610406576001966001875d67ffffffffffffffff612f956001610a89885f52600460205260405f2090565b161561107257612fc96107496107428673ffffffffffffffffffffffffffffffffffffffff165f52601960205260405f2090565b61104a576101f48211610fd25781151580613227575b6110045773ffffffffffffffffffffffffffffffffffffffff831690338214611004578615610fd2576040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201908152336024830152306044830152606482018990525f918291906130588160848101610c10565b519082895af16130666149ec565b5015610e805750908793929185613080610c63848a614a1b565b9361308b858a61494c565b9361309e610c89610c6360025488614a1b565b95806131b3575b50505050508061317d575b509091506130c6835f52600860205260405f2090565b905f875b613108575b5f8787877fc9190f41680b22f0a6c2e134aff0e19883fb591309280918a988bedc91b28a26604051806109573395829190602083019252565b825481101561317857908782613131610c63836131288897829a99614a5b565b50015485614a1b565b61316c610da061315f8873ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b610d7e610d63868a614a5b565b905501909192936130ca565b6130cf565b6131ab610da0610de68573ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b90555f6130b0565b6132007fd621d379087cd90275364e79a56640d3c84c09bf89df55558627e0142e9f11c7936106bb8a73ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b61320b828254614977565b9055604080519182526020820192909252a35f858180806130a5565b5073ffffffffffffffffffffffffffffffffffffffff831615612fdf565b34610406575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657602060405160328152f35b346104065760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261040657606435600460443581356024356132c3856103e8565b61100393845c6104065760019081865d67ffffffffffffffff6132f283610a89875f52600460205260405f2090565b1615611072576133266107496107428973ffffffffffffffffffffffffffffffffffffffff165f52601960205260405f2090565b61104a57841580156135bf575b610fd25761334d8361061a865f52600660205260405f2090565b6002810154938415610fa957828201544210610f805760058201544211610f805760038201918254956133808988614977565b11610f0b57600260ff61339f87610b7a8b5f52600460205260405f2090565b16148061359e575b610f345787856133b8920154614a1b565b948515610f0b57876133c991614977565b8255835f5b8880821061354d5750506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201908152336024830152306044830152606482018890525f9450849350915061342b8160848101610c10565b5190828b5af16134396149ec565b5015610e80575080613450610c6360025485614a1b565b9661345b888561494c565b9780613517575b509050613477845f52600860205260405f2090565b5f835b6134bf5760408051888152602081018790525f918a9133918a917fef266bb11bf4b58aa8562ab8c8746e3b84a521780a2c57ca09d87bae13f5eb099181908101610957565b8154811015610db3579083826134de610c6383610d1f81989787614a5b565b61350c610da0610d568773ffffffffffffffffffffffffffffffffffffffff165f52601a60205260405f2090565b90550190919261347a565b613545610da0610de68473ffffffffffffffffff