[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AddressIsNotAContract", "type": "error" }, { "inputs": [], "name": "ClaimableAmountOfImportIsGreaterThanExpected", "type": "error" }, { "inputs": [], "name": "EqualPercentagesOnlyAllowedBeforeLinear", "type": "error" }, { "inputs": [], "name": "InputArraysMustHaveSameLength", "type": "error" }, { "inputs": [], "name": "LastPercentageMustBe100", "type": "error" }, { "inputs": [], "name": "MaxAllowedMilestonesHit", "type": "error" }, { "inputs": [], "name": "MilestonePercentagesNotSorted", "type": "error" }, { "inputs": [], "name": "MilestoneTimestampsNotSorted", "type": "error" }, { "inputs": [], "name": "MoreThanTwoEqualPercentages", "type": "error" }, { "inputs": [], "name": "OnlyLastPercentageCanBe100", "type": "error" }, { "inputs": [], "name": "UnlockedIsGreaterThanExpected", "type": "error" }, { "inputs": [], "name": "UnsuccessfulFetchOfTokenBalance", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "milestoneIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint64", "name": "percentage", "type": "uint64" } ], "name": "MilestoneReached", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "addRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "addRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "claimableBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimableSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "claimedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimedSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "exportRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "exportRecipients", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "claimableAmountOfImport", "type": "uint256" }, { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "name": "importRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "claimableAmountsOfImport", "type": "uint256[]" }, { "internalType": "uint256", "name": "unlocked", "type": "uint256" } ], "name": "importRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "underlyingTokenAddress", "type": "address" }, { "components": [ { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { "internalType": "enum IVestingToken.Ramp", "name": "ramp", "type": "uint8" }, { "internalType": "uint64", "name": "percentage", "type": "uint64" } ], "internalType": "struct IVestingToken.Milestone[]", "name": "milestonesArray", "type": "tuple[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "lockedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockedSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "contract IFeeManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "milestones", "outputs": [ { "components": [ { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, { "internalType": "enum IVestingToken.Ramp", "name": "ramp", "type": "uint8" }, { "internalType": "uint64", "name": "percentage", "type": "uint64" } ], "internalType": "struct IVestingToken.Milestone[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlyingToken", "outputs": [ { "internalType": "contract ERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unlockedPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startIndex", "type": "uint256" } ], "name": "updateLastReachedMilestone", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608080604052346100c1576000549060ff8260081c1661006f575060ff80821610610034575b604051612a7a90816100c78239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a138610025565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816306fdde0314611bdc57508063095ea7b314611bb657806318160ddd14611b9857806323b872dd146119cf5780632495a599146119a8578063313ce5671461198457806339509351146119325780633e2a34731461105d57806340bf050614610fb9578063481c6a7514610f925780634e71d92d14610d9557806357c2f2e814610d375780635935573614610cf957806370a0823114610cbf57806389392c7c14610b9a57806395d89b4114610abc5780639af850ed146108ba5780639c3ee244146108975780639dd509cb1461074a578063a1c7bd7714610719578063a457c2d71461064e578063a9059cbb1461048b578063ad4126b61461032f578063bfc2aa2a14610301578063c8de1d56146102c4578063ca5c7b9114610275578063d5ab20b414610252578063d67d13ce14610234578063dd62ed3e146101e25763f79822431461016957600080fd5b346101dd5760403660031901126101dd576101d6610185611cc8565b61018d61201d565b6101c1610198612968565b6101b46001600160a01b03609754166024359030903390612117565b6101bc612968565b611f67565b906101ce82609954611e34565b609955612073565b6001606555005b600080fd5b346101dd5760403660031901126101dd576101fb611cc8565b610203611cde565b906001600160a01b038091166000526034602052604060002091166000526020526020604060002054604051908152f35b346101dd5760203660031901126101dd57610250600435612401565b005b346101dd5760003660031901126101dd57602061026d612543565b604051908152f35b346101dd5760003660031901126101dd57602061026d6035546102be609954670de0b6b3a76400006102b86102aa8584611f67565b926102b3612543565b612370565b04611f67565b90611f67565b346101dd5760203660031901126101dd576001600160a01b036102e5611cc8565b16600052609d6020526020600160406000200154604051908152f35b346101dd5760003660031901126101dd57602061026d61032660995460355490611f67565b609a5490611f67565b346101dd5760003660031901126101dd57609b5461034c816123a3565b6103596040519182611d10565b8181526020908181019283609b6000527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc349906000905b83821061041a5760408051878152865181890181905289928201908960005b8281106103bb5784840385f35b90919285519067ffffffffffffffff91828151168252848101519160028310156104045760019360406060938895868501520151166040820152019601910194929190946103ae565b634e487b7160e01b600052602160045260246000fd5b60405167ffffffffffffffff9190606081018381118282101761047557604052845491838316825260ff8360401c169160028310156104045760019485948b948584015260481c16604082015281520193019101909161038f565b634e487b7160e01b600052604160045260246000fd5b346101dd5760403660031901126101dd576104a4611cc8565b6024359033600052602091609d83526040600020918254926104e76104e06104cc8587612370565b336000526033885260406000205490612383565b8095611f67565b90556001600160a01b039283821633810361052a575b6105219450600052609d85526105196040600020918254611e34565b90553361273d565b60405160018152f35b846040600496609854168151978880926273a9f360e91b82525afa908115610642576000916105d8575b610521965067ffffffffffffffff88830151169182610576575b5050506104fd565b956105b76105d093926105a896985116916105b1670de0b6b3a76400008061059e8785612370565b049889968c612370565b04978892611f67565b98611f67565b9481600052609d8a526105196040600020918254611e34565b86808061056e565b90506040863d60401161063a575b816105f360409383611d10565b810103126101dd576040519561060887611cf4565b80519082821682036101dd578891885201519567ffffffffffffffff871687036101dd57610521968882015290610554565b3d91506105e6565b6040513d6000823e3d90fd5b346101dd5760403660031901126101dd57610667611cc8565b6024359033600052603460205260406000206001600160a01b038216600052602052604060002054918083106106ae576106a392039033611e41565b602060405160018152f35b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608490fd5b346101dd5760003660031901126101dd57602061026d609954670de0b6b3a76400006102b86102aa60355484611f67565b346101dd5760403660031901126101dd5767ffffffffffffffff6004358181116101dd5761077c903690600401611d95565b916024359081116101dd57610795903690600401611d95565b9190926107a061201d565b828103610886576107af612968565b9360009460005b83811061086157506107db906101b4876001600160a01b036097541630903390612117565b916107e883609954611e34565b60995560005b8181106107fc576001606555005b8061083561081661081161083a94868a61234c565b61235c565b888a848980830361083f5750905061082e918861234c565b3590612073565b611f43565b6107ee565b6108506108569261085b958c61234c565b35612370565b612383565b90612073565b9561087b6108819161087489898761234c565b3590611e34565b96611f43565b6107b6565b60405162514d8b60e31b8152600490fd5b346101dd5760203660031901126101dd57602061026d6108b5611cc8565b61265f565b346101dd5760803660031901126101dd5767ffffffffffffffff6004358181116101dd576108ec903690600401611d95565b91906024358281116101dd57610906903690600401611d95565b926044359081116101dd5761091f903690600401611d95565b6064929192359061092e61201d565b610936612543565b8211610aaa57858714801590610aa0575b61088657906109599694939296612968565b9160009760005b878110610a7057506109866001600160a01b03946101b48b876097541630903390612117565b976000996000985b808a106109c3576109b96109b18d8d6109a982609a54611e34565b609a55611e34565b609954611e34565b6099556001606555005b9091929394959697989a610a4389610a49928a8f8f908f8d610a15838f8f8f968f978f986109fb61081184610a239c610a1c9c61234c565b9a818103610a57575050610a0e9261234c565b359961234c565b3587612a0f565b9482612073565b16600052609d6020526040600020610a3c838254611e34565b9055611e34565b9b611f43565b98979695949392919061098e565b90926108509061085693610a6a9661234c565b9961234c565b979091929394959698610a8b610a91916108748b858761234c565b98611f43565b98969594939291909798610960565b5085811415610947565b60405163d52b679760e01b8152600490fd5b346101dd5760003660031901126101dd576040516000603754610ade81611dfa565b80845290600190818116908115610b735750600114610b18575b610b1484610b0881860382611d10565b60405191829182611c7f565b0390f35b6037600090815292507f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae5b828410610b5b575050508101602001610b0882610af8565b80546020858701810191909152909301928101610b43565b60ff191660208087019190915292151560051b85019092019250610b089150839050610af8565b346101dd576020806003193601126101dd5760043567ffffffffffffffff81116101dd57610bcc903690600401611d95565b9091610bd7826123bb565b610be0836123bb565b9060005b848110610c6e5750610bf4612543565b92604051948060808701608088525260a08601969060005b818110610c455750505085610c3b9392610c2d928780990390880152611dc6565b908482036040860152611dc6565b9060608301520390f35b9091978835906001600160a01b0382168092036101dd5790815283019783019190600101610c0c565b80610caa610c83610811610cba94898b61234c565b6001600160a01b03811660005260338752604060002054610ca484876123ed565b5261265f565b610cb482866123ed565b52611f43565b610be4565b346101dd5760203660031901126101dd576001600160a01b03610ce0611cc8565b1660005260336020526020604060002054604051908152f35b346101dd5760203660031901126101dd57602061026d610d17611cc8565b6001600160a01b038116600052603383526102be6040600020549161265f565b346101dd5760203660031901126101dd576080610d52611cc8565b6001600160a01b03811690816000526033602052610d756040600020549161265f565b610d7d612543565b91604051938452602084015260408301526060820152f35b346101dd5760003660031901126101dd57336000526020609d8152604060002090610dc1609c54612401565b610df182543360005260338352670de0b6b3a76400006102b8610de960406000205484611e34565b6102b3612543565b9182610df957005b3315610f43573360005260338252604060002054838110610ef3579083600192336000526033855203604060002055836035540360355560006040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef853392a3610e68848254611e34565b815501610e76838254611e34565b90556040518281527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4823392a26001600160a01b0360975416916040519163a9059cbb60e01b90830152336024830152604482015260448152608081019181831067ffffffffffffffff841117610475576102509260405261216f565b60405162461bcd60e51b815260048101849052602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260048101839052602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b346101dd5760003660031901126101dd5760206001600160a01b0360985416604051908152f35b346101dd5760803660031901126101dd57610fd2611cc8565b606435610fdd61201d565b610fe5612543565b8111610aaa576101d6916101ce6109b1610ffd612968565b61102b6110216001600160a01b03926101b484609754166024359030903390612117565b9560443587612a0f565b908416600052609d6020526040600020611046828254611e34565b905561105481609a54611e34565b609a5584611e34565b346101dd5760803660031901126101dd5760043567ffffffffffffffff81116101dd5761108e903690600401611d4e565b60243567ffffffffffffffff81116101dd576110ae903690600401611d4e565b6001600160a01b0360443516604435036101dd5767ffffffffffffffff606435116101dd573660236064350112156101dd5767ffffffffffffffff60643560040135116101dd57366024606060643560040135026064350101116101dd576000549060ff8260081c161591828093611925575b801561190e575b156118a35760ff19811660011760005582611891575b5061115960ff60005460081c1661115481611fab565b611fab565b825167ffffffffffffffff811161047557611175603654611dfa565b601f81116117f2575b506020601f821160011461176c5781929394600092611761575b50508160011b916000199060031b1c1916176036555b80519067ffffffffffffffff82116104755781906111cd603754611dfa565b601f81116116b7575b50602090601f831160011461162d57600092611622575b50508160011b916000199060031b1c1916176037555b61121860ff60005460081c1661115481611fab565b60016065553373ffffffffffffffffffffffffffffffffffffffff1960985416176098556044353b156116105761033a60643560040135116115fe5760643560040135156115e8576024606435016000805b60643560040135811061132d57836001600160a01b036044351673ffffffffffffffffffffffffffffffffffffffff1960975416176097556112aa6128dc565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000006098549260a01b169116176098556112f557005b61ff0019600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b806114ba575b600460643501356000198101116114a4576004606435013560001901810361146e57670de0b6b3a764000067ffffffffffffffff61137360408601611f52565b160361145c575b609b54680100000000000000008110156104755780600161139e9201609b55611f74565b9190916114465767ffffffffffffffff6113b785611f52565b169180548367ffffffffffffffff19821617825560208601359360028510156101dd5768ff00000000000000006114419560401b1690818168ffffffffffffffffff1985161717845570ffffffffffffffff00000000000000000061141e60408a01611f52565b60481b169270ffffffffffffffffffffffffffffffffff19161717179055611f43565b61126a565b634e487b7160e01b600052600060045260246000fd5b604051635be691b360e01b8152600490fd5b670de0b6b3a764000067ffffffffffffffff61148c60408601611f52565b160361137a5760405163e575499360e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b90916024606083026064350101926114d182611f52565b67ffffffffffffffff806114e487611f52565b16911610156115d6576114f960408301611f52565b67ffffffffffffffff8061151560646060880281350101611f52565b169116116115c457611554575b604061152e9101611f52565b67ffffffffffffffff8061154a60646060860281350101611f52565b1691161490611333565b61156060408201611f52565b67ffffffffffffffff8061157c60646060870281350101611f52565b169116146115b25760446060830260643501013560028110156101dd57600114611522576040516338f14c3560e11b8152600490fd5b6040516304855a8f60e01b8152600490fd5b604051630218d22d60e41b8152600490fd5b604051630bb2da2160e21b8152600490fd5b634e487b7160e01b600052603260045260246000fd5b604051638375f01560e01b8152600490fd5b6040516356db3a0f60e01b8152600490fd5b0151905083806111ed565b925060376000527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae906000935b601f198416851061169c576001945083601f19811610611683575b505050811b01603755611203565b015160001960f88460031b161c19169055838080611675565b8181015183556020948501946001909301929091019061165a565b9091506037600052601f830160051c7f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae016020841061173a575b908392915b601f820160051c7f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae01811061172b57506111d6565b600081558493506001016116f6565b507f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae6116f1565b015190508480611198565b60366000527f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b89060005b601f19841681106117da5750600193949583601f198116106117c1575b505050811b016036556111ae565b015160001960f88460031b161c191690558480806117b3565b9091602060018192858a015181550193019101611796565b6036600052601f820160051c7f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b8016020831061186a575b601f820160051c7f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b801811061185e575061117e565b60008155600101611829565b507f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b8611829565b61ffff1916610101176000558361113e565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608490fd5b50303b1580156111285750600160ff821614611128565b50600160ff821610611121565b346101dd5760403660031901126101dd576106a361194e611cc8565b33600052603460205260406000206001600160a01b03821660005260205261197d602435604060002054611e34565b9033611e41565b346101dd5760003660031901126101dd57602060ff60985460a01c16604051908152f35b346101dd5760003660031901126101dd5760206001600160a01b0360975416604051908152f35b346101dd5760603660031901126101dd576119e8611cc8565b6119f0611cde565b906044356000926001600160a01b03938484169485600052602095609d8752604060002091825492611a3c6104e0611a288987612370565b8560005260338c5260406000205490612383565b9055808516918203611a80575b508252609d8652611a5f60408320918254611e34565b905515611a715761052192503361273d565b611a7a9261269c565b50610521565b806040600492609854168151938480926273a9f360e91b82525afa91821561064257600092611b31575b5067ffffffffffffffff89830151169182611ac7575b5050611a49565b611afb94979550611b289291611b04915116956105b1670de0b6b3a764000080611af18685612370565b049788958c612370565b04968792611f67565b9385600052609d8a52611b1d6040600020918254611e34565b90556000948861269c565b50878080611ac0565b9091506040813d604011611b90575b81611b4d60409383611d10565b810103126101dd5760405190611b6282611cf4565b80519083821682036101dd578a918352015167ffffffffffffffff811681036101dd57898201529089611aaa565b3d9150611b40565b346101dd5760003660031901126101dd576020603554604051908152f35b346101dd5760403660031901126101dd576106a3611bd2611cc8565b6024359033611e41565b346101dd5760003660031901126101dd576000603654611bfb81611dfa565b80845290600190818116908115610b735750600114611c2457610b1484610b0881860382611d10565b6036600090815292507f4a11f94e20a93c79f6ec743a1954ec4fc2c08429ae2122118bf234b2185c81b85b828410611c67575050508101602001610b0882610af8565b80546020858701810191909152909301928101611c4f565b6020808252825181830181905290939260005b828110611cb457505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611c92565b600435906001600160a01b03821682036101dd57565b602435906001600160a01b03821682036101dd57565b6040810190811067ffffffffffffffff82111761047557604052565b90601f8019910116810190811067ffffffffffffffff82111761047557604052565b67ffffffffffffffff811161047557601f01601f191660200190565b81601f820112156101dd57803590611d6582611d32565b92611d736040519485611d10565b828452602083830101116101dd57816000926020809301838601378301015290565b9181601f840112156101dd5782359167ffffffffffffffff83116101dd576020808501948460051b0101116101dd57565b90815180825260208080930193019160005b828110611de6575050505090565b835185529381019392810192600101611dd8565b90600182811c92168015611e2a575b6020831014611e1457565b634e487b7160e01b600052602260045260246000fd5b91607f1691611e09565b919082018092116114a457565b6001600160a01b03809116918215611ef25716918215611ea25760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260348252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b60001981146114a45760010190565b3567ffffffffffffffff811681036101dd5790565b919082039182116114a457565b609b548110156115e857609b6000527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc3490190600090565b15611fb257565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608490fd5b60026065541461202e576002606555565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6001600160a01b03169081156120d2577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020826120b5600094603554611e34565b6035558484526033825260408420818154019055604051908152a3565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b9290604051926323b872dd60e01b60208501526001600160a01b03809216602485015216604483015260648201526064815260a081019181831067ffffffffffffffff8411176104755761216d9260405261216f565b565b6001600160a01b031690604051604081019080821067ffffffffffffffff831117610475576121e2916040526020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16121dc612287565b916122b7565b8051806121f0575b50505050565b8184918101031261228357820151908115918215036122805750612216578080806121ea565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b80fd5b5080fd5b3d156122b2573d9061229882611d32565b916122a66040519384611d10565b82523d6000602084013e565b606090565b9192901561231957508151156122cb575090565b3b156122d45790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b82519091501561232c5750805190602001fd5b60405162461bcd60e51b81529081906123489060048301611c7f565b0390fd5b91908110156115e85760051b0190565b356001600160a01b03811681036101dd5790565b818102929181159184041417156114a457565b811561238d570490565b634e487b7160e01b600052601260045260246000fd5b67ffffffffffffffff81116104755760051b60200190565b906123c5826123a3565b6123d26040519182611d10565b82815280926123e3601f19916123a3565b0190602036910137565b80518210156115e85760209160051b010190565b61240a81611f74565b50805467ffffffffffffffff92908316421061252457915b609b548310156124ce5761243583611f74565b50428282541611156124bb5750609c908154600181018091116124a657841161245e5750505050565b60001984019384116124a6577f096f719a73b78cea362757e681984eb34248a391c19ce10bfbc1a57614bc51759284602093555460481c16604051908152a2388080806121ea565b60246000634e487b7160e01b81526011600452fd5b6124c89193925091611f43565b91612422565b5050609c54609b546000198101925082116114a45781116124ec5750565b80609c557f096f719a73b78cea362757e681984eb34248a391c19ce10bfbc1a57614bc51756020604051670de0b6b3a76400008152a2565b505050565b67ffffffffffffffff91821690821603919082116114a457565b609c5461254f81611f74565b509081549167ffffffffffffffff9042828516116126565781604894851c16936001938481018091116114a4579391609b54925b838610612594575b50505050505090565b61259d86611f74565b5080549486861697428911156126395750505060ff8460401c16600281101561262457146125cc575b8061258b565b61261a95949261260785936126149661260061260d9554928280851696816125f48942611f67565b96841c16921c16612529565b1690612370565b93612529565b1690612383565b90611e34565b38808080806125c6565b60246000634e487b7160e01b81526021600452fd5b93509486919850612650929750841c169691611f43565b94612583565b50505050600090565b6001600160a01b0316600052609d6020526126996040600020546033602052670de0b6b3a76400006102b8610de960406000205484611e34565b90565b91906001600160a01b03831660005260346020526040600020336000526020526040600020549260001984036126dc575b6126d7935061273d565b600190565b8284106126f8576126f3836126d795033383611e41565b6126cd565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b6001600160a01b03809116918215612871571691821561282057600082815260336020526040812054918083106127b557604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95876020965260338652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608490fd5b6001600160a01b036097541660405190602082019063313ce56760e01b825260048352604083019183831067ffffffffffffffff84111761047557600093849360405251915afa61292b612287565b908061295c575b61293d575b50601290565b6020818051810103126101dd576020015160ff81116129375760ff1690565b50602081511015612932565b60006001600160a01b036097541660405160208101906370a0823160e01b8252306024820152602481526060810181811067ffffffffffffffff8211176129fb576040525183928392905afa906129bd612287565b91806129ef575b6129da57604051637677db4d60e01b8152600490fd5b60208280518101031261228057506020015190565b506020825110156129c4565b634e487b7160e01b85526041600452602485fd5b90670de0b6b3a76400009182841461265657612a2b9084612370565b9080830290838204036114a457818111612a5b57612a4891611f67565b9181039081116114a45761269991612383565b604051634484113f60e01b8152600490fdfea164736f6c6343000811000a