[ { "inputs": [ { "internalType": "contract ERC20", "name": "asset_", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "pounderRewardMultiplier_", "type": "uint256" }, { "internalType": "uint256", "name": "minOutputMultiplier_", "type": "uint256" }, { "internalType": "address", "name": "uniswapV3Factory_", "type": "address" }, { "internalType": "contract IQuoter", "name": "uniswapV3Quoter_", "type": "address" }, { "internalType": "uint24", "name": "uniswapV3PoolFee_", "type": "uint24" }, { "internalType": "uint32", "name": "uniswapV3TwapSecondsAgo_", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "Error_BothTokenDeltasAreZero", "type": "error" }, { "inputs": [], "name": "Error_ConsultTwapOracleFailed", "type": "error" }, { "inputs": [], "name": "Error_InsufficientOutput", "type": "error" }, { "inputs": [], "name": "Error_InvalidMultiplierValue", "type": "error" }, { "inputs": [], "name": "Error_NotUniswapV3Pool", "type": "error" }, { "inputs": [], "name": "T", "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": "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pounderRewardRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "yieldAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "pytCompounded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "pounderReward", "type": "uint256" } ], "name": "Pound", "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": [ { "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": [], "name": "assetBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "gate", "outputs": [ { "internalType": "contract Gate", "name": "", "type": "address" } ], "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": [ { "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": "minOutputMultiplier", "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": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "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": "nyt", "outputs": [ { "internalType": "contract NegativeYieldToken", "name": "", "type": "address" } ], "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": "address", "name": "pounderRewardRecipient", "type": "address" } ], "name": "pound", "outputs": [ { "internalType": "uint256", "name": "yieldAmount", "type": "uint256" }, { "internalType": "uint256", "name": "pytCompounded", "type": "uint256" }, { "internalType": "uint256", "name": "pounderReward", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pounderRewardMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [], "name": "previewPound", "outputs": [ { "internalType": "enum XPYT.PreviewPoundErrorCode", "name": "errorCode", "type": "uint8" }, { "internalType": "uint256", "name": "yieldAmount", "type": "uint256" }, { "internalType": "uint256", "name": "pytCompounded", "type": "uint256" }, { "internalType": "uint256", "name": "pounderReward", "type": "uint256" } ], "stateMutability": "nonpayable", "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": [ { "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": "contract ERC20", "name": "token", "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": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "token", "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": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "sweep", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "uniswapV3Factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "uniswapV3PoolFee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "uniswapV3Quoter", "outputs": [ { "internalType": "contract IQuoter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uniswapV3TwapSecondsAgo", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "address", "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" } ]
61022060405260016006553480156200001757600080fd5b5060405162004f0138038062004f018339810160408190526200003a916200056d565b88888888888484848181846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a991906200064d565b8251620000be906000906020860190620003a6565b508151620000d4906001906020850190620003a6565b5060ff81166080524660a052620000ea6200030a565b60c0525050506001600160a01b0390921660e0525050670de0b6b3a76400008111156200012a57604051633e8a238b60e01b815260040160405180910390fd5b610160819052610180829052670de0b6b3a76400008211156200016057604051633e8a238b60e01b815260040160405180910390fd5b6000856001600160a01b0316637a0ebc886040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000679565b9050806001600160a01b0316610100816001600160a01b0316815250506000866001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b919062000679565b6001600160a01b0381811661012081905260405163696bf4b760e01b8152600481019190915291925083169063696bf4b790602401602060405180830381865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000679565b6001600160a01b03908116610140529a8b166101a05250505050949095166101c0525062ffffff9091166101e05263ffffffff1661020052506200077895505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200033e9190620006d5565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b828054620003b49062000699565b90600052602060002090601f016020900481019282620003d8576000855562000423565b82601f10620003f357805160ff191683800117855562000423565b8280016001018555821562000423579182015b828111156200042357825182559160200191906001019062000406565b506200043192915062000435565b5090565b5b8082111562000431576000815560010162000436565b6001600160a01b03811681146200046257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200048d57600080fd5b81516001600160401b0380821115620004aa57620004aa62000465565b604051601f8301601f19908116603f01168101908282118183101715620004d557620004d562000465565b81604052838152602092508683858801011115620004f257600080fd5b600091505b83821015620005165785820183015181830184015290820190620004f7565b83821115620005285760008385830101525b9695505050505050565b80516200053f816200044c565b919050565b805162ffffff811681146200053f57600080fd5b805163ffffffff811681146200053f57600080fd5b60008060008060008060008060006101208a8c0312156200058d57600080fd5b89516200059a816200044c565b60208b01519099506001600160401b0380821115620005b857600080fd5b620005c68d838e016200047b565b995060408c0151915080821115620005dd57600080fd5b50620005ec8c828d016200047b565b97505060608a0151955060808a0151945060a08a01516200060d816200044c565b93506200061d60c08b0162000532565b92506200062d60e08b0162000544565b91506200063e6101008b0162000558565b90509295985092959850929598565b6000602082840312156200066057600080fd5b815160ff811681146200067257600080fd5b9392505050565b6000602082840312156200068c57600080fd5b815162000672816200044c565b600181811c90821680620006ae57607f821691505b602082108103620006cf57634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620006f257607f831692505b602080841082036200071257634e487b7160e01b86526022600452602486fd5b8180156200072957600181146200073b576200076a565b60ff198616895284890196506200076a565b60008a81526020902060005b86811015620007625781548b82015290850190830162000747565b505084890196505b509498975050505050505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051614613620008ee6000396000818161055501528181612305015261234c01526000818161045f015281816122d0015281816124cb0152818161255801526129c60152600081816105be015261296801526000818161062d0152818161204d0152818161228a01526124850152600081816107dd0152818161110f01526114a501526000818161097701528181611077015261143101526000818161070f015281816122ae0152818161237e015281816124a901528181612500015281816125f70152818161292e01526129a40152600081816109fe01528181610f8a015261135a0152600081816106ae01528181610fb901526113910152600081816104bc01528181610a6b015281816111680152818161128e01528181611510015281816119080152611ade01526000610e9d01526000610e680152600061041901526146136000f3fe6080604052600436106102f25760003560e01c80638b2919a41161018f578063c63d75b6116100e1578063dd62ed3e1161008a578063f3995c6711610064578063f3995c67146109b9578063fa461e33146109cc578063fbfa77cf146109ec57600080fd5b8063dd62ed3e1461092d578063ed693a5914610965578063ef8b30f71461099957600080fd5b8063ce96cb77116100bb578063ce96cb77146108aa578063d505accf146108ca578063d905777e146108ea57600080fd5b8063c63d75b614610503578063c66f245514610874578063c6e6f5921461088a57600080fd5b8063ac9650d811610143578063b460af941161011d578063b460af941461081f578063ba0876521461083f578063c2e3140a1461085f57600080fd5b8063ac9650d8146107ab578063ad7d5013146107cb578063b3d7f6b9146107ff57600080fd5b806394bf804d1161017457806394bf804d1461075657806395d89b4114610776578063a9059cbb1461078b57600080fd5b80638b2919a4146106fd5780638f8ceed71461073157600080fd5b806338d52e0f11610248578063509e1f50116101fc57806370a08231116101d657806370a082311461066f5780637a0ebc881461069c5780637ecebe00146106d057600080fd5b8063509e1f50146105e05780635b5491821461061b5780636e553f651461064f57600080fd5b80634397c40f1161022d5780634397c40f146105435780634cdad5061461058c5780634d20d0f8146105ac57600080fd5b806338d52e0f146104aa578063402d267d1461050357600080fd5b80630a28a477116102aa578063313ce56711610284578063313ce5671461040757806335edc1041461044d5780633644e5151461049557600080fd5b80630a28a477146103b157806318160ddd146103d157806323b872dd146103e757600080fd5b806306fdde03116102db57806306fdde031461033f57806307a2d13a14610361578063095ea7b31461038157600080fd5b806301681a62146102f757806301e1d1141461032a575b600080fd5b34801561030357600080fd5b50610317610312366004613702565b610a20565b6040519081526020015b60405180910390f35b34801561033657600080fd5b50600754610317565b34801561034b57600080fd5b50610354610bc9565b6040516103219190613795565b34801561036d57600080fd5b5061031761037c3660046137a8565b610c57565b34801561038d57600080fd5b506103a161039c3660046137c1565b610c85565b6040519015158152602001610321565b3480156103bd57600080fd5b506103176103cc3660046137a8565b610cff565b3480156103dd57600080fd5b5061031760025481565b3480156103f357600080fd5b506103a16104023660046137ed565b610d20565b34801561041357600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610321565b34801561045957600080fd5b506104817f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610321565b3480156104a157600080fd5b50610317610e64565b3480156104b657600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610321565b34801561050f57600080fd5b5061031761051e366004613702565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b34801561054f57600080fd5b506105777f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610321565b34801561059857600080fd5b506103176105a73660046137a8565b610ebf565b3480156105b857600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ec57600080fd5b506106006105fb366004613702565b610eca565b60408051938452602084019290925290820152606001610321565b34801561062757600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065b57600080fd5b5061031761066a36600461382e565b6111fd565b34801561067b57600080fd5b5061031761068a366004613702565b60036020526000908152604090205481565b3480156106a857600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106dc57600080fd5b506103176106eb366004613702565b60056020526000908152604090205481565b34801561070957600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561073d57600080fd5b5061074661131d565b604051610321949392919061385e565b34801561076257600080fd5b5061031761077136600461382e565b6114e9565b34801561078257600080fd5b5061035461159f565b34801561079757600080fd5b506103a16107a63660046137c1565b6115ac565b6107be6107b93660046138b5565b611631565b604051610321919061392a565b3480156107d757600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b34801561080b57600080fd5b5061031761081a3660046137a8565b6117a3565b34801561082b57600080fd5b5061031761083a3660046139aa565b6117c3565b34801561084b57600080fd5b5061031761085a3660046139aa565b61192f565b61087261086d3660046139fb565b611b05565b005b34801561088057600080fd5b5061031760075481565b34801561089657600080fd5b506103176108a53660046137a8565b611bb7565b3480156108b657600080fd5b506103176108c5366004613702565b611bd8565b3480156108d657600080fd5b506108726108e5366004613a57565b611c07565b3480156108f657600080fd5b50610317610905366004613702565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b34801561093957600080fd5b50610317610948366004613ac8565b600460209081526000928352604080842090915290825290205481565b34801561097157600080fd5b506103177f000000000000000000000000000000000000000000000000000000000000000081565b3480156109a557600080fd5b506103176109b43660046137a8565b611f26565b6108726109c73660046139fb565b611f31565b3480156109d857600080fd5b506108726109e7366004613af6565b611fe3565b3480156109f857600080fd5b506104de7f000000000000000000000000000000000000000000000000000000000000000081565b6007546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600091829173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190613b76565b610ae09190613bbe565b9050610aeb81611f26565b915081600003610b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a45524f5f53484152455300000000000000000000000000000000000000000060448201526064015b60405180910390fd5b610b668383612105565b604080518281526020810184905273ffffffffffffffffffffffffffffffffffffffff85169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3610bc3818361217e565b50919050565b60008054610bd690613bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0290613bd5565b8015610c4f5780601f10610c2457610100808354040283529160200191610c4f565b820191906000526020600020905b815481529060010190602001808311610c3257829003601f168201915b505050505081565b6002546000908015610c7c57610c77610c6f60075490565b849083612199565b610c7e565b825b9392505050565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ced9086815260200190565b60405180910390a35060015b92915050565b6002546000908015610c7c57610c7781610d1860075490565b8591906121b8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610db457610d828382613bbe565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604081208054859290610de9908490613bbe565b909155505073ffffffffffffffffffffffffffffffffffffffff808516600081815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e519087815260200190565b60405180910390a3506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610e9a57610e956121e6565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000610cf982610c57565b6000806000600654600114610f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152606401610b53565b60026006556040517f875efaae0000000000000000000000000000000000000000000000000000000081523060048201819052602482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063875efaae906084016020604051808303816000875af1158015611002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110269190613b76565b925060008061103485612280565b915091508161106f576040517fd29a518f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110a4827f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006123ad565b905060006110b18761247d565b9050818110156110ed576040517ff580341600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110f882610c57565b905061110430836126ff565b808801965061113c877f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006123ad565b600780548a0182900390559687900396955061118f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168a8861278d565b604080518981526020810189905290810187905273ffffffffffffffffffffffffffffffffffffffff8a169033907f9c887064dc205d9d0f44ce02f33d4cb26f380d7a310268e968116a4465da36529060600160405180910390a35050600160065550939592945090925050565b600061120883611f26565b905080600003611274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a45524f5f5348415245530000000000000000000000000000000000000000006044820152606401610b53565b6112b673ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308661284c565b6112c08282612105565b604080518481526020810183905273ffffffffffffffffffffffffffffffffffffffff84169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3610cf9838261217e565b6040517f748b259c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301526000918291829182917f0000000000000000000000000000000000000000000000000000000000000000169063748b259c90604401602060405180830381865afa1580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc9190613b76565b925060008061140a85612280565b91509150816114295760016000806000955095509550955050506114e3565b600061145e827f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006123ad565b9050600061146b87612912565b90508181101561148d57600260008060009750975097509750505050506114e3565b600061149882610c57565b905080880196506114d2877f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006123ad565b955085870396506000985050505050505b90919293565b60006114f4836117a3565b905061153873ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633308461284c565b6115428284612105565b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff84169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3610cf9818461217e565b60018054610bd690613bd5565b336000908152600360205260408120805483919083906115cd908490613bbe565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600081815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ced9086815260200190565b60608167ffffffffffffffff81111561164c5761164c613c22565b60405190808252806020026020018201604052801561167f57816020015b606081526020019060019003908161166a5790505b50905060005b8281101561179c57600080308686858181106116a3576116a3613c51565b90506020028101906116b59190613c80565b6040516116c3929190613cec565b600060405180830381855af49150503d80600081146116fe576040519150601f19603f3d011682016040523d82523d6000602084013e611703565b606091505b5091509150816117695760448151101561171c57600080fd5b600481019050808060200190518101906117369190613d4b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b539190613795565b8084848151811061177c5761177c613c51565b60200260200101819052505050808061179490613df4565b915050611685565b5092915050565b6002546000908015610c7c57610c776117bb60075490565b8490836121b8565b60006117ce84610cff565b90503373ffffffffffffffffffffffffffffffffffffffff8316146118835773ffffffffffffffffffffffffffffffffffffffff821660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118815761184f8282613bbe565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020555b505b60078054859003905561189682826126ff565b604080518581526020810183905273ffffffffffffffffffffffffffffffffffffffff808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4610c7e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016848661278d565b60003373ffffffffffffffffffffffffffffffffffffffff8316146119e45773ffffffffffffffffffffffffffffffffffffffff821660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119e2576119b08582613bbe565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020555b505b6119ed84610ebf565b905080600003611a59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a45524f5f4153534554530000000000000000000000000000000000000000006044820152606401610b53565b600780548290039055611a6c82856126ff565b604080518281526020810186905273ffffffffffffffffffffffffffffffffffffffff808516929086169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4610c7e73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016848361278d565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015611b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9b9190613b76565b1015611baf57611baf868686868686611f31565b505050505050565b6002546000908015610c7c57610c7781611bd060075490565b859190612199565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812054610cf990610c57565b42841015611c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610b53565b60006001611c7d610e64565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611dcf573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611e4a57508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152606401610b53565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000610cf982611bb7565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e401600060405180830381600087803b158015611fc357600080fd5b505af1158015611fd7573d6000803e3d6000fd5b50505050505050505050565b600080851315611ff4575083612036565b6000841315612004575082612036565b6040517f3fbd122600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061204483850185613e2c565b905060006120887f0000000000000000000000000000000000000000000000000000000000000000612083846000015185602001518660400151612abd565b612b4f565b90503373ffffffffffffffffffffffffffffffffffffffff8216146120d9576040517f1a13dcc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516120fc9073ffffffffffffffffffffffffffffffffffffffff16338561278d565b50505050505050565b80600260008282546121179190613ea6565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b81600760008282546121909190613ea6565b90915550505050565b8282028115158415858304851417166121b157600080fd5b0492915050565b8282028115158415858304851417166121d057600080fd5b6001826001830304018115150290509392505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516122189190613ebe565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008060006122f47f00000000000000000000000000000000000000000000000000000000000000006120837f0000000000000000000000000000000000000000000000000000000000000000307f0000000000000000000000000000000000000000000000000000000000000000612abd565b9050600061230182612c88565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015612344575060009485945092505050565b6000612370837f0000000000000000000000000000000000000000000000000000000000000000612ed8565b509050600194506123a381877f00000000000000000000000000000000000000000000000000000000000000003061319c565b9350505050915091565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060000361240457600084116123f957600080fd5b508290049050610c7e565b80841161241057600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000806124ef7f00000000000000000000000000000000000000000000000000000000000000006120837f0000000000000000000000000000000000000000000000000000000000000000307f0000000000000000000000000000000000000000000000000000000000000000612abd565b9050600060405180606001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000062ffffff168152506040516020016125cb9190815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401519091169082015260409182015162ffffff169181019190915260600190565b604051602081830303815290604052905060003073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161090506000808473ffffffffffffffffffffffffffffffffffffffff1663128acb0830858a876126705773fffd8963efd1fc6a506488495d951d5263988d25612677565b6401000276a45b896040518663ffffffff1660e01b8152600401612698959493929190613f90565b60408051808303816000875af11580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190613fd7565b91509150826126e957816126eb565b805b6126f490613ffb565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054839290612734908490613bbe565b909155505060028054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612172565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610b53565b50505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610b53565b5050505050565b6000803073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f7729d437f0000000000000000000000000000000000000000000000000000000000000000307f00000000000000000000000000000000000000000000000000000000000000008786612a055773fffd8963efd1fc6a506488495d951d5263988d25612a0c565b6401000276a45b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff9586166004820152938516602485015262ffffff9092166044840152606483015291909116608482015260a4016020604051808303816000875af1158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190613b76565b60408051606081018252600080825260208201819052918101919091528273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115612b12579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1610612b9157600080fd5b8151602080840151604080860151815173ffffffffffffffffffffffffffffffffffffffff95861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5820152610c7e9060f5016040516020818303038152906040528051906020012090565b60008060008373ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfc919061405a565b50505093509350505060008161ffff1611612d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f4e490000000000000000000000000000000000000000000000000000000000006044820152606401610b53565b60008073ffffffffffffffffffffffffffffffffffffffff861663252c09d784612d9e8760016140ee565b612da89190614143565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815261ffff9091166004820152602401608060405180830381865afa158015612dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e239190614176565b93505050915080612ec4576040517f252c09d70000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff87169063252c09d790602401608060405180830381865afa158015612e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebd9190614176565b5091935050505b612ece82426141d7565b9695505050505050565b6000808263ffffffff16600003612f4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f42500000000000000000000000000000000000000000000000000000000000006044820152606401610b53565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110612f8057612f80613c51565b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110612faf57612faf613c51565b602002602001019063ffffffff16908163ffffffff16815250506000808673ffffffffffffffffffffffffffffffffffffffff1663883bdbfd846040518263ffffffff1660e01b815260040161300591906141fc565b600060405180830381865afa158015613022573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261306891908101906142de565b9150915060008260008151811061308157613081613c51565b60200260200101518360018151811061309c5761309c613c51565b60200260200101516130ae91906143a1565b90506000826000815181106130c5576130c5613c51565b6020026020010151836001815181106130e0576130e0613c51565b60200260200101516130f29190614409565b905061310463ffffffff891683614436565b965060008260060b12801561312a575061312463ffffffff8916836144aa565b60060b15155b1561313d5786613139816144cc565b9750505b600061316373ffffffffffffffffffffffffffffffffffffffff63ffffffff8b16614529565b905061318d77ffffffffffffffffffffffffffffffffffffffff00000000602084901b1682614569565b96505050505050509250929050565b6000806131a886613376565b90506fffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8216116132a75760006131f973ffffffffffffffffffffffffffffffffffffffff8316806145a0565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610613269576132647801000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16836123ad565b61329f565b61329f81876fffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000006123ad565b92505061336d565b60006132d373ffffffffffffffffffffffffffffffffffffffff831680680100000000000000006123ad565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061333b57613336700100000000000000000000000000000000876fffffffffffffffffffffffffffffffff16836123ad565b613369565b61336981876fffffffffffffffffffffffffffffffff167001000000000000000000000000000000006123ad565b9250505b50949350505050565b60008060008360020b1261338d578260020b613395565b8260020b6000035b9050620d89e88111156133d4576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001166000036133f85770010000000000000000000000000000000061340a565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561343e576ffff97272373d413259a46990580e213a0260801c5b600482161561345d576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561347c576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561349b576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156134ba576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156134d9576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156134f8576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613518576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613538576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613558576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613578576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613598576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156135b8576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156135d8576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156135f8576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613619576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613639576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613658576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613675576b048a170391f7dc42444e8fa20260801c5b60008460020b13156136b457807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816136b0576136b0614114565b0490505b6401000000008106156136c85760016136cb565b60005b60ff16602082901c0192505050919050565b73ffffffffffffffffffffffffffffffffffffffff811681146136ff57600080fd5b50565b60006020828403121561371457600080fd5b8135610c7e816136dd565b60005b8381101561373a578181015183820152602001613722565b838111156128465750506000910152565b6000815180845261376381602086016020860161371f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610c7e602083018461374b565b6000602082840312156137ba57600080fd5b5035919050565b600080604083850312156137d457600080fd5b82356137df816136dd565b946020939093013593505050565b60008060006060848603121561380257600080fd5b833561380d816136dd565b9250602084013561381d816136dd565b929592945050506040919091013590565b6000806040838503121561384157600080fd5b823591506020830135613853816136dd565b809150509250929050565b6080810160038610613899577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9481526020810193909352604083019190915260609091015290565b600080602083850312156138c857600080fd5b823567ffffffffffffffff808211156138e057600080fd5b818501915085601f8301126138f457600080fd5b81358181111561390357600080fd5b8660208260051b850101111561391857600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561399d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261398b85835161374b565b94509285019290850190600101613951565b5092979650505050505050565b6000806000606084860312156139bf57600080fd5b8335925060208401356139d1816136dd565b915060408401356139e1816136dd565b809150509250925092565b60ff811681146136ff57600080fd5b60008060008060008060c08789031215613a1457600080fd5b8635613a1f816136dd565b955060208701359450604087013593506060870135613a3d816139ec565b9598949750929560808101359460a0909101359350915050565b600080600080600080600060e0888a031215613a7257600080fd5b8735613a7d816136dd565b96506020880135613a8d816136dd565b955060408801359450606088013593506080880135613aab816139ec565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613adb57600080fd5b8235613ae6816136dd565b91506020830135613853816136dd565b60008060008060608587031215613b0c57600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115613b3257600080fd5b818701915087601f830112613b4657600080fd5b813581811115613b5557600080fd5b886020828501011115613b6757600080fd5b95989497505060200194505050565b600060208284031215613b8857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613bd057613bd0613b8f565b500390565b600181811c90821680613be957607f821691505b602082108103610bc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613cb557600080fd5b83018035915067ffffffffffffffff821115613cd057600080fd5b602001915036819003821315613ce557600080fd5b9250929050565b8183823760009101908152919050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613d4357613d43613c22565b604052919050565b600060208284031215613d5d57600080fd5b815167ffffffffffffffff80821115613d7557600080fd5b818401915084601f830112613d8957600080fd5b815181811115613d9b57613d9b613c22565b613dcc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613cfc565b9150808252856020828501011115613de357600080fd5b61336d81602084016020860161371f565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e2557613e25613b8f565b5060010190565b600060608284031215613e3e57600080fd5b6040516060810181811067ffffffffffffffff82111715613e6157613e61613c22565b6040528235613e6f816136dd565b81526020830135613e7f816136dd565b6020820152604083013562ffffff81168114613e9a57600080fd5b60408201529392505050565b60008219821115613eb957613eb9613b8f565b500190565b600080835481600182811c915080831680613eda57607f831692505b60208084108203613f12577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015613f265760018114613f5557613f82565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650613f82565b60008a81526020902060005b86811015613f7a5781548b820152908501908301613f61565b505084890196505b509498975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a060808301526126f460a083018461374b565b60008060408385031215613fea57600080fd5b505080516020909101519092909150565b60007f8000000000000000000000000000000000000000000000000000000000000000820361402c5761402c613b8f565b5060000390565b805161ffff8116811461404557600080fd5b919050565b8051801515811461404557600080fd5b600080600080600080600060e0888a03121561407557600080fd5b8751614080816136dd565b8097505060208801518060020b811461409857600080fd5b95506140a660408901614033565b94506140b460608901614033565b93506140c260808901614033565b925060a08801516140d2816139ec565b91506140e060c0890161404a565b905092959891949750929550565b600061ffff80831681851680830382111561410b5761410b613b8f565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061ffff8084168061415857614158614114565b92169190910692915050565b8051600681900b811461404557600080fd5b6000806000806080858703121561418c57600080fd5b845163ffffffff811681146141a057600080fd5b93506141ae60208601614164565b925060408501516141be816136dd565b91506141cc6060860161404a565b905092959194509250565b600063ffffffff838116908316818110156141f4576141f4613b8f565b039392505050565b6020808252825182820181905260009190848201906040850190845b8181101561423a57835163ffffffff1683529284019291840191600101614218565b50909695505050505050565b600067ffffffffffffffff82111561426057614260613c22565b5060051b60200190565b600082601f83011261427b57600080fd5b8151602061429061428b83614246565b613cfc565b82815260059290921b840181019181810190868411156142af57600080fd5b8286015b848110156142d35780516142c6816136dd565b83529183019183016142b3565b509695505050505050565b600080604083850312156142f157600080fd5b825167ffffffffffffffff8082111561430957600080fd5b818501915085601f83011261431d57600080fd5b8151602061432d61428b83614246565b82815260059290921b8401810191818101908984111561434c57600080fd5b948201945b838610156143715761436286614164565b82529482019490820190614351565b9188015191965090935050508082111561438a57600080fd5b506143978582860161426a565b9150509250929050565b60008160060b8360060b60008112817fffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000018312811516156143e4576143e4613b8f565b81667fffffffffffff0183138116156143ff576143ff613b8f565b5090039392505050565b600073ffffffffffffffffffffffffffffffffffffffff838116908316818110156141f4576141f4613b8f565b60008160060b8360060b8061444d5761444d614114565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000831416156144a1576144a1613b8f565b90059392505050565b60008260060b806144bd576144bd614114565b808360060b0791505092915050565b60008160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000810361450157614501613b8f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff8083168185168183048111821515161561456057614560613b8f565b02949350505050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff8084168061459457614594614114565b92169190910492915050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145d8576145d8613b8f565b50029056fea2646970667358221220832f17e38b50631d77ff02822d449a12a858945c42ad88e3ce74476ca3f6feda64736f6c634300080d003300000000000000000000000082b5e618af4e90efca24d0dff3f9e055fa549b990000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000d2f13f7789f00000000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab60000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000001954696d656c657373205374616b65642046726178207850595400000000000000000000000000000000000000000000000000000000000000000000000000000ee2889e2d73465241582d78505954000000000000000000000000000000000000