/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, BigNumberish, Contract, ContractFactory, Overrides, } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { TVault } from "../TVault"; export class TVault__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( param: { _want: string; _instruments: string[]; _ratios: BigNumberish[]; _junior_weight: BigNumberish; _promisedReturn: BigNumberish; _time_to_maturity: BigNumberish; vaultId: BigNumberish; inceptionPrice: BigNumberish; }, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy(param, overrides || {}) as Promise; } getDeployTransaction( param: { _want: string; _instruments: string[]; _ratios: BigNumberish[]; _junior_weight: BigNumberish; _promisedReturn: BigNumberish; _time_to_maturity: BigNumberish; vaultId: BigNumberish; inceptionPrice: BigNumberish; }, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction(param, overrides || {}); } attach(address: string): TVault { return super.attach(address) as TVault; } connect(signer: Signer): TVault__factory { return super.connect(signer) as TVault__factory; } static connect(address: string, signerOrProvider: Signer | Provider): TVault { return new Contract(address, _abi, signerOrProvider) as TVault; } } const _abi = [ { inputs: [ { components: [ { internalType: "address", name: "_want", type: "address", }, { internalType: "address[]", name: "_instruments", type: "address[]", }, { internalType: "uint256[]", name: "_ratios", type: "uint256[]", }, { internalType: "uint256", name: "_junior_weight", type: "uint256", }, { internalType: "uint256", name: "_promisedReturn", type: "uint256", }, { internalType: "uint256", name: "_time_to_maturity", type: "uint256", }, { internalType: "uint256", name: "vaultId", type: "uint256", }, { internalType: "uint256", name: "inceptionPrice", type: "uint256", }, ], internalType: "struct TrancheFactory.InitParams", name: "param", type: "tuple", }, ], stateMutability: "nonpayable", type: "constructor", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: true, internalType: "address", name: "spender", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Approval", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "caller", type: "address", }, { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: false, internalType: "uint256", name: "assets", type: "uint256", }, { indexed: false, internalType: "uint256", name: "shares", type: "uint256", }, ], name: "Deposit", 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: "amount", type: "uint256", }, ], name: "Transfer", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "caller", type: "address", }, { indexed: true, internalType: "address", name: "receiver", type: "address", }, { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: false, internalType: "uint256", name: "assets", type: "uint256", }, { indexed: false, internalType: "uint256", name: "shares", type: "uint256", }, ], name: "Withdraw", type: "event", }, { inputs: [], name: "DOMAIN_SEPARATOR", outputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "PRICE_PRECISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, { internalType: "address", name: "", 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: [], name: "asset", outputs: [ { internalType: "contract ERC20", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, ], name: "convertToAssets", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, ], name: "convertToShares", 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: "uint256", name: "assets", type: "uint256", }, { internalType: "address", name: "receiver", type: "address", }, ], name: "deposit", outputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "exchange_rate_hook", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "getCurrentRealReturn", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getInitialExchangeRates", outputs: [ { internalType: "uint256[]", name: "", type: "uint256[]", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getJuniorWeight", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getPromisedReturn", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "pastNBlock", type: "uint256", }, ], name: "getStoredReturnData", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getUnderlying", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "inceptionPrice", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isMatured", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "junior_weight", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "maxDeposit", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "maxMint", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "maxOracleEntries", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, ], name: "maxRedeem", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, ], name: "maxWithdraw", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "minEntries", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, { internalType: "address", name: "receiver", type: "address", }, ], name: "mint", outputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "", type: "address", }, ], name: "nonces", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "oracle_freq", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "value", type: "uint256", }, { internalType: "uint256", name: "deadline", type: "uint256", }, { internalType: "uint8", name: "v", type: "uint8", }, { internalType: "bytes32", name: "r", type: "bytes32", }, { internalType: "bytes32", name: "s", type: "bytes32", }, ], name: "permit", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, ], name: "previewDeposit", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, ], name: "previewMint", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, ], name: "previewRedeem", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, ], name: "previewWithdraw", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "queryExchangeRateOracle", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, { internalType: "address", name: "receiver", type: "address", }, { internalType: "address", name: "owner", type: "address", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "newOracle", type: "address", }, ], name: "setOracle", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "storeExchangeRate", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "store_exchange_rate", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "symbol", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalAssetOracle", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalAssets", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], 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: "want", outputs: [ { internalType: "contract ERC20", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "assets", type: "uint256", }, { internalType: "address", name: "receiver", type: "address", }, { internalType: "address", name: "owner", type: "address", }, ], name: "withdraw", outputs: [ { internalType: "uint256", name: "shares", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, ]; const _bytecode = "0x6101206040523480156200001257600080fd5b50604051620033143803806200331483398101604081905262000035916200084b565b806000015181600001516001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200007d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000a7919081019062000962565b604051602001620000b9919062000a00565b60405160208183030381529060405282600001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200010b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000135919081019062000962565b60405160200162000147919062000a40565b6040516020818303038152906040528181846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000197573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bd919062000a6b565b8251620001d29060009060208601906200057a565b508151620001e89060019060208501906200057a565b5060ff81166080524660a052620001fe6200043d565b60c052505050506001600160a01b0391821660e052508151600e80546001600160a01b0319169190921617905560208082015180516200024392600892019062000609565b5060208082015151600655604082015180516200026592600792019062000661565b506060810151600a556080810151600b5560a0810151600c5560e0810151600d55426009556006546001600160401b03811115620002a757620002a7620006b5565b604051908082528060200260200182016040528015620002d1578160200160208202803683370190505b508051620002e89160109160209091019062000661565b50600e60009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200033d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000363919062000a6b565b6200037090600a62000bac565b6101005260005b600654811015620004315780600f6000600884815481106200039d576200039d62000bbd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560088054620003fa919083908110620003df57620003df62000bbd565b6000918252602090912001546001600160a01b0316620004d9565b6010828154811062000410576200041062000bbd565b60009182526020909120015580620004288162000bd3565b91505062000377565b50504360115562000d07565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405162000471919062000c2e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006011546001620004ec919062000cd2565b4310156200052d5760405162461bcd60e51b815260206004820152600a6024820152694e6f6e2061746f6d696360b01b604482015260640160405180910390fd5b6001600160a01b0382166000908152600f60209081526040808320548352601590915290206200055f60018062000ced565b6001811062000572576200057262000bbd565b015492915050565b828054620005889062000bf1565b90600052602060002090601f016020900481019282620005ac5760008555620005f7565b82601f10620005c757805160ff1916838001178555620005f7565b82800160010185558215620005f7579182015b82811115620005f7578251825591602001919060010190620005da565b50620006059291506200069e565b5090565b828054828255906000526020600020908101928215620005f7579160200282015b82811115620005f757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200062a565b828054828255906000526020600020908101928215620005f75791602002820182811115620005f7578251825591602001919060010190620005da565b5b808211156200060557600081556001016200069f565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715620006f157620006f1620006b5565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620007225762000722620006b5565b604052919050565b80516001600160a01b03811681146200074257600080fd5b919050565b60006001600160401b03821115620007635762000763620006b5565b5060051b60200190565b600082601f8301126200077f57600080fd5b8151602062000798620007928362000747565b620006f7565b82815260059290921b84018101918181019086841115620007b857600080fd5b8286015b84811015620007de57620007d0816200072a565b8352918301918301620007bc565b509695505050505050565b600082601f830112620007fb57600080fd5b815160206200080e620007928362000747565b82815260059290921b840181019181810190868411156200082e57600080fd5b8286015b84811015620007de578051835291830191830162000832565b6000602082840312156200085e57600080fd5b81516001600160401b03808211156200087657600080fd5b9083019061010082860312156200088c57600080fd5b62000896620006cb565b620008a1836200072a565b8152602083015182811115620008b657600080fd5b620008c4878286016200076d565b602083015250604083015182811115620008dd57600080fd5b620008eb87828601620007e9565b604083015250606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e082015280935050505092915050565b60005b838110156200094c57818101518382015260200162000932565b838111156200095c576000848401525b50505050565b6000602082840312156200097557600080fd5b81516001600160401b03808211156200098d57600080fd5b818401915084601f830112620009a257600080fd5b815181811115620009b757620009b7620006b5565b620009cc601f8201601f1916602001620006f7565b9150808252856020828501011115620009e457600080fd5b620009f78160208401602086016200092f565b50949350505050565b65039bab832b9160d51b81526000825162000a238160068501602087016200092f565b650815985d5b1d60d21b6006939091019283015250600c01919050565b601d60fa1b81526000825162000a5e8160018501602087016200092f565b9190910160010192915050565b60006020828403121562000a7e57600080fd5b815160ff8116811462000a9057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000aee57816000190482111562000ad25762000ad262000a97565b8085161562000ae057918102915b93841c939080029062000ab2565b509250929050565b60008262000b075750600162000ba6565b8162000b165750600062000ba6565b816001811462000b2f576002811462000b3a5762000b5a565b600191505062000ba6565b60ff84111562000b4e5762000b4e62000a97565b50506001821b62000ba6565b5060208310610133831016604e8410600b841016171562000b7f575081810a62000ba6565b62000b8b838362000aad565b806000190482111562000ba25762000ba262000a97565b0290505b92915050565b600062000a9060ff84168362000af6565b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bea5762000bea62000a97565b5060010190565b600181811c9082168062000c0657607f821691505b6020821081141562000c2857634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c91508083168062000c4b57607f831692505b602080841082141562000c6c57634e487b7160e01b86526022600452602486fd5b81801562000c83576001811462000c955762000cc4565b60ff1986168952848901965062000cc4565b60008a81526020902060005b8681101562000cbc5781548b82015290850190830162000ca1565b505084890196505b509498975050505050505050565b6000821982111562000ce85762000ce862000a97565b500190565b60008282101562000d025762000d0262000a97565b500390565b60805160a05160c05160e0516101005161257462000da06000396000818161051201528181610c0801528181610cbb01528181610f980152818161102c015281816117e5015281816118680152611c270152600081816103c5015281816110fc0152818161119c015281816113e1015281816115310152611cd801526000610d4101526000610d0c0152600061037201526125746000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80637ecebe0011610167578063c63d75b6116100ce578063d7fdefca11610087578063d7fdefca146105f8578063d905777e14610601578063dd62ed3e1461062a578063e31fbfa214610655578063e6dbd1c31461065d578063ef8b30f71461066557600080fd5b8063c63d75b6146103fa578063c6e6f592146105ae578063c70acd8a146105c1578063ce96cb77146105ca578063d09a2c99146105dd578063d505accf146105e557600080fd5b80639816f473116101205780639816f4731461053c578063a2b379d71461054d578063a9059cbb14610562578063b3d7f6b914610575578063b460af9414610588578063ba0876521461059b57600080fd5b80637ecebe00146104cb5780637f2b6a0d146104eb578063806027e0146104f257806394bf804d146104fa57806395082d251461050d57806395d89b411461053457600080fd5b80633644e5151161020b5780634cdad506116101c45780634cdad5061461044557806352b892f714610458578063695f7af0146104605780636e553f651461046857806370a082311461047b5780637adbf9731461049b57600080fd5b80633644e515146103b857806338d52e0f146103c05780633cbaba28146103e7578063402d267d146103fa5780634796c5471461040f5780634b3ceabd1461043d57600080fd5b806318160ddd1161025d57806318160ddd146103265780631f1fcd511461032f57806323b872dd1461035a578063313ce5671461036d578063318b5e1b146103a657806334fd2eca146103b057600080fd5b806301e1d114146102a557806306fdde03146102c057806307196aa7146102d557806307a2d13a146102dd578063095ea7b3146102f05780630a28a47714610313575b600080fd5b6102ad610678565b6040519081526020015b60405180910390f35b6102c86107c1565b6040516102b7919061211f565b6102ad61084f565b6102ad6102eb366004612132565b610951565b6103036102fe366004612167565b61097e565b60405190151581526020016102b7565b6102ad610321366004612132565b6109eb565b6102ad60025481565b600e54610342906001600160a01b031681565b6040516001600160a01b0390911681526020016102b7565b610303610368366004612191565b610a0b565b6103947f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102b7565b6103ae610aeb565b005b600b546102ad565b6102ad610d08565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b601254610342906001600160a01b031681565b6102ad6104083660046121cd565b5060001990565b61042261041d366004612132565b610d63565b604080519384526020840192909252908201526060016102b7565b6102ad600a81565b6102ad610453366004612132565b610f1a565b6103ae610f25565b6102ad610f3b565b6102ad6104763660046121e8565b6110a2565b6102ad6104893660046121cd565b60036020526000908152604090205481565b6103ae6104a93660046121cd565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6102ad6104d93660046121cd565b60056020526000908152604090205481565b6001610303565b6102ad600181565b6102ad6105083660046121e8565b61117a565b6102ad7f000000000000000000000000000000000000000000000000000000000000000081565b6102c861121a565b600e546001600160a01b0316610342565b610555611227565b6040516102b79190612214565b610303610570366004612167565b61127f565b6102ad610583366004612132565b6112e5565b6102ad610596366004612258565b611304565b6102ad6105a9366004612258565b611408565b6102ad6105bc366004612132565b611558565b6102ad600a5481565b6102ad6105d83660046121cd565b611578565b6102ad606481565b6103ae6105f3366004612294565b61159a565b6102ad600d5481565b6102ad61060f3660046121cd565b6001600160a01b031660009081526003602052604090205490565b6102ad610638366004612307565b600460209081526000928352604080842090915290825290205481565b600a546102ad565b6102ad6117de565b6102ad610673366004612132565b611809565b60008080805b6006548110156107b9576008818154811061069b5761069b612331565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190612347565b91506008818154811061072557610725612331565b6000918252602090912001546040516303d1689d60e11b8152600481018490526001600160a01b03909116906307a2d13a90602401602060405180830381865afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b9190612347565b6107a59084612376565b9250806107b18161238e565b91505061067e565b509092915050565b600080546107ce906123a9565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa906123a9565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b505050505081565b43601155600080805b60065481101561094c576008818154811061087557610875612331565b60009182526020808320909101546001600160a01b0316808352600f825260408084205484526015909252912090925061092d565b6108b56001806123de565b81101561090057816108c8826001612376565b600181106108d8576108d8612331565b01548282600181106108ec576108ec612331565b0155806108f88161238e565b9150506108aa565b5061090a82611814565b816109166001806123de565b6001811061092657610926612331565b0155610939565b61093682611814565b81555b50806109448161238e565b915050610858565b505090565b600254600090801561097557610970610968610678565b8490836118e7565b610977565b825b9392505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109d99086815260200190565b60405180910390a35060015b92915050565b60025460009080156109755761097081610a03610678565b859190611906565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610a6757610a4283826123de565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b03851660009081526003602052604081208054859290610a8f9084906123de565b90915550506001600160a01b038085166000818152600360205260409081902080548701905551909187169060008051602061251f83398151915290610ad89087815260200190565b60405180910390a3506001949350505050565b601154431415610af757565b6012546001600160a01b031615610bf557604080518082018083526012546339aa885b60e21b909152915190918291610b87916001600160a01b03169063e6aa216c9060448086019160209181880301816000875af1158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190612347565b611934565b6001600160801b03168152602001610ba0600254611934565b6001600160801b0316815250601460006064601354610bbf919061240b565b8152602080820192909252604001600020825192909101516001600160801b03908116600160801b029216919091179055610c96565b6040518060400160405280610c2c610b827f00000000000000000000000000000000000000000000000000000000000000006112e5565b6001600160801b03168152602001610c45600254611934565b6001600160801b0316815250601460006064601354610c64919061240b565b8152602080820192909252604001600020825192909101516001600160801b03908116600160801b0292169190911790555b610ced604051806040016040528060018152602001602f60f81b815250610cdf610b827f00000000000000000000000000000000000000000000000000000000000000006112e5565b6001600160801b031661194a565b60138054906000610cfd8361238e565b909155505043601155565b60007f00000000000000000000000000000000000000000000000000000000000000004614610d3e57610d39611993565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b60008080808080865b8015610e14576000818152601460205260409020546001600160801b0316610d9357610e04565b600081815260146020526040902054610dbc90600160801b90046001600160801b031685612376565b600082815260146020526040902054909450610dea906001600160801b03600160801b820481169116611a2d565b610df49084612376565b925081610e008161238e565b9250505b610e0d8161241f565b9050610d6c565b506000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c546001600160801b031615610ef7576000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c54610e9390600160801b90046001600160801b031684612376565b6000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c54909350610edd906001600160801b03600160801b820481169116611a2d565b610ee79083612376565b915080610ef38161238e565b9150505b610f018184612436565b610f0b8284612436565b90989097509095509350505050565b60006109e582610951565b436011541015610f3957610f3761084f565b505b565b60008060065467ffffffffffffffff811115610f5957610f5961244a565b604051908082528060200260200182016040528015610f82578160200160208202803683370190505b5090506000805b60065481101561108d5761100c7f000000000000000000000000000000000000000000000000000000000000000060108381548110610fca57610fca612331565b906000526020600020015461100560088581548110610feb57610feb612331565b6000918252602090912001546001600160a01b0316611a42565b91906118e7565b83828151811061101e5761101e612331565b6020026020010181815250507f000000000000000000000000000000000000000000000000000000000000000083828151811061105d5761105d612331565b602002602001015161106f91906123de565b6110799083612376565b9150806110858161238e565b915050610f89565b5060065461109b9082612436565b9250505090565b60006110ad83611809565b9050806110ef5760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f53484152455360a81b60448201526064015b60405180910390fd5b6111246001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611ad7565b61112e8282611b61565b60408051848152602081018390526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a36109e5565b6000611184610aeb565b61118d836112e5565b90506111c46001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084611ad7565b6111cd83611bbb565b6111d78284611b61565b60408051828152602081018590526001600160a01b0384169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910161116d565b600180546107ce906123a9565b6060601080548060200260200160405190810160405280929190818152602001828054801561127557602002820191906000526020600020905b815481526020019060010190808311611261575b5050505050905090565b336000908152600360205260408120805483919083906112a09084906123de565b90915550506001600160a01b0383166000818152600360205260409081902080548501905551339060008051602061251f833981519152906109d99086815260200190565b6002546000908015610975576109706112fc610678565b849083611906565b600061130f846109eb565b9050336001600160a01b0383161461137f576001600160a01b0382166000908152600460209081526040808320338452909152902054600019811461137d5761135882826123de565b6001600160a01b03841660009081526004602090815260408083203384529091529020555b505b6113898282611e70565b60408051858152602081018390526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a46109776001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168486611ed2565b6000611412610aeb565b336001600160a01b03831614611480576001600160a01b0382166000908152600460209081526040808320338452909152902054600019811461147e5761145985826123de565b6001600160a01b03841660009081526004602090815260408083203384529091529020555b505b61148984610f1a565b9050806114c65760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f41535345545360a81b60448201526064016110e6565b6114cf81611f4a565b6114d98285611e70565b60408051828152602081018690526001600160a01b03808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a46109776001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168483611ed2565b60025460009080156109755761097081611570610678565b8591906118e7565b6001600160a01b0381166000908152600360205260408120546109e590610951565b428410156115ea5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016110e6565b600060016115f6610d08565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611702573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117385750876001600160a01b0316816001600160a01b0316145b6117755760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016110e6565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000610d397f00000000000000000000000000000000000000000000000000000000000000006112e5565b60006109e582611558565b6000806008838154811061182a5761182a612331565b60009182526020808320909101546001600160a01b039081168084526016909252604090922054909250166118e15760405163ef8b30f760e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0382169063ef8b30f790602401602060405180830381865afa1580156118bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190612347565b50919050565b8282028115158415858304851417166118ff57600080fd5b0492915050565b82820281151584158583048514171661191e57600080fd5b6001826001830304018115150290509392505050565b6000600160801b821061194657600080fd5b5090565b61198f8282604051602401611960929190612460565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b17905261203a565b5050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516119c59190612482565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006109778383670de0b6b3a76400006118e7565b60006011546001611a539190612376565b431015611a8f5760405162461bcd60e51b815260206004820152600a6024820152694e6f6e2061746f6d696360b01b60448201526064016110e6565b6001600160a01b0382166000908152600f6020908152604080832054835260159091529020611abf6001806123de565b60018110611acf57611acf612331565b015492915050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080611b5a5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b60448201526064016110e6565b5050505050565b8060026000828254611b739190612376565b90915550506001600160a01b03821660008181526003602090815260408083208054860190555184815260008051602061251f83398151915291015b60405180910390a35050565b60008060005b600654811015611e6a5760088181548110611bde57611bde612331565b600091825260209091200154600780546001600160a01b03909216935083916307a2d13a91611c4b9185908110611c1757611c17612331565b60009182526020909120015487907f00000000000000000000000000000000000000000000000000000000000000006118e7565b6040518263ffffffff1660e01b8152600401611c6991815260200190565b602060405180830381865afa158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa9190612347565b9250611d0160088281548110611cc257611cc2612331565b6000918252602090912001546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168561205b565b60405163402d267d60e01b81523060048201526001600160a01b0383169063402d267d90602401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190612347565b831115611da55760405162461bcd60e51b815260206004820152600a602482015269135a5b9d08131a5b5a5d60b21b60448201526064016110e6565b604051636e553f6560e01b8152600481018490523060248201526000906001600160a01b03841690636e553f65906044016020604051808303816000875af1158015611df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e199190612347565b1015611e585760405162461bcd60e51b815260206004820152600e60248201526d11985a5b19590811195c1bdcda5d60921b60448201526064016110e6565b80611e628161238e565b915050611bc1565b50505050565b6001600160a01b03821660009081526003602052604081208054839290611e989084906123de565b90915550506002805482900390556040518181526000906001600160a01b0384169060008051602061251f83398151915290602001611baf565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611e6a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016110e6565b6000805b60065481101561203557611f8860078281548110611f6e57611f6e612331565b906000526020600020015484611a2d90919063ffffffff16565b915060088181548110611f9d57611f9d612331565b600091825260209091200154604051632d182be560e21b815260048101849052306024820181905260448201526001600160a01b039091169063b460af94906064016020604051808303816000875af1158015611ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120229190612347565b508061202d8161238e565b915050611f4e565b505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080611e6a5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b60448201526064016110e6565b6000815180845260005b818110156120f8576020818501810151868301820152016120dc565b8181111561210a576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061097760208301846120d2565b60006020828403121561214457600080fd5b5035919050565b80356001600160a01b038116811461216257600080fd5b919050565b6000806040838503121561217a57600080fd5b6121838361214b565b946020939093013593505050565b6000806000606084860312156121a657600080fd5b6121af8461214b565b92506121bd6020850161214b565b9150604084013590509250925092565b6000602082840312156121df57600080fd5b6109778261214b565b600080604083850312156121fb57600080fd5b8235915061220b6020840161214b565b90509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561224c57835183529284019291840191600101612230565b50909695505050505050565b60008060006060848603121561226d57600080fd5b8335925061227d6020850161214b565b915061228b6040850161214b565b90509250925092565b600080600080600080600060e0888a0312156122af57600080fd5b6122b88861214b565b96506122c66020890161214b565b95506040880135945060608801359350608088013560ff811681146122ea57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561231a57600080fd5b6123238361214b565b915061220b6020840161214b565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561238957612389612360565b500190565b60006000198214156123a2576123a2612360565b5060010190565b600181811c908216806123bd57607f821691505b602082108114156118e157634e487b7160e01b600052602260045260246000fd5b6000828210156123f0576123f0612360565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261241a5761241a6123f5565b500690565b60008161242e5761242e612360565b506000190190565b600082612445576124456123f5565b500490565b634e487b7160e01b600052604160045260246000fd5b60408152600061247360408301856120d2565b90508260208301529392505050565b600080835481600182811c91508083168061249e57607f831692505b60208084108214156124be57634e487b7160e01b86526022600452602486fd5b8180156124d257600181146124e357612510565b60ff19861689528489019650612510565b60008a81526020902060005b868110156125085781548b8201529085019083016124ef565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122083d55a6fefd3e2c67104114eceef38947c37f9488fb6ec8931d571b38e09412364736f6c634300080a0033";