[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxLoan", "type": "uint256" } ], "name": "ERC3156ExceededMaxLoan", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC3156InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "ERC3156UnsupportedToken", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "flashFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC3156FlashBorrower", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "maxFlashLoan", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "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": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b506040518060400160405280600881526020017f4a41595853454544000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4a415958534545440000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534545440000000000000000000000000000000000000000000000000000000081525081600390816100f9919061124d565b508060049081610109919061124d565b5050506101206005836101f560201b90919060201c565b610120818152505061013c6006826101f560201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017961024260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050506101f0336101c961029c60201b60201c565b600a6101d59190611484565b6402540be4006101e591906114ce565b6102a460201b60201c565b611952565b5f6020835110156102165761020f8361032960201b60201c565b905061023c565b826102268361038e60201b60201c565b5f019081610234919061124d565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610281959493929190611575565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610314575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161030b91906115c6565b60405180910390fd5b6103255f838361039760201b60201c565b5050565b5f80829050601f8151111561037557826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040161036c9190611645565b60405180910390fd5b80518161038190611692565b5f1c175f1b915050919050565b5f819050919050565b6103a88383836103ad60201b60201c565b505050565b6103be83838361047360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361045d575f61040061068c60201b60201c565b90505f61041161069560201b60201c565b90508082111561045a5781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016104519291906116f8565b60405180910390fd5b50505b61046e8383836106b860201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104c3578060025f8282546104b7919061171f565b92505081905550610591565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561054c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161054393929190611752565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105d8578060025f8282540392505081905550610622565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161067f9190611787565b60405180910390a3505050565b5f600254905090565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071757610714600a6107a860201b61119517610709846107bd60201b60201c565b61082a60201b60201c565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361077657610773600a61087260201b6111aa17610768846107bd60201b60201c565b61082a60201b60201c565b50505b6107a36107888461088760201b60201c565b6107978461088760201b60201c565b836108ec60201b60201c565b505050565b5f81836107b591906117c5565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156108225760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161081992919061184b565b60405180910390fd5b819050919050565b5f8061086661083d610b8260201b60201c565b61085661084f88610b9660201b60201c565b868860201c565b87610bfe60201b9092919060201c565b91509150935093915050565b5f818361087f9190611872565b905092915050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561092757505f81115b15610b7d575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a54575f806109c560095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061087260201b6111aa176109ba866107bd60201b60201c565b61082a60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051610a499291906116f8565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b7c575f80610aed60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206107a860201b61119517610ae2866107bd60201b60201c565b61082a60201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051610b719291906116f8565b60405180910390a250505b5b505050565b5f610b91610c1f60201b60201c565b905090565b5f80825f018054905090505f8114610bf457610bc6835f01600183610bbb91906118bf565b610c3460201b60201c565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16610bf6565b5f5b915050919050565b5f80610c13855f018585610c4660201b60201c565b91509150935093915050565b5f610c2f43610fba60201b60201c565b905090565b5f825f528160205f2001905092915050565b5f805f858054905090505f811115610ed2575f610c7587600184610c6a91906118bf565b610c3460201b60201c565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115610d60576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603610de85784610d9788600185610d8c91906118bf565b610c3460201b60201c565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550610ec1565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050610fb2565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f65ffffffffffff801682111561100b576030826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161100292919061192b565b60405180910390fd5b819050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061108e57607f821691505b6020821081036110a1576110a061104a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826110c8565b61110d86836110c8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61115161114c61114784611125565b61112e565b611125565b9050919050565b5f819050919050565b61116a83611137565b61117e61117682611158565b8484546110d4565b825550505050565b5f90565b611192611186565b61119d818484611161565b505050565b5b818110156111c0576111b55f8261118a565b6001810190506111a3565b5050565b601f821115611205576111d6816110a7565b6111df846110b9565b810160208510156111ee578190505b6112026111fa856110b9565b8301826111a2565b50505b505050565b5f82821c905092915050565b5f6112255f198460080261120a565b1980831691505092915050565b5f61123d8383611216565b9150826002028217905092915050565b61125682611013565b67ffffffffffffffff81111561126f5761126e61101d565b5b6112798254611077565b6112848282856111c4565b5f60209050601f8311600181146112b5575f84156112a3578287015190505b6112ad8582611232565b865550611314565b601f1984166112c3866110a7565b5f5b828110156112ea578489015182556001820191506020850194506020810190506112c5565b868310156113075784890151611303601f891682611216565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561139e5780860481111561137a5761137961131c565b5b60018516156113895780820291505b808102905061139785611349565b945061135e565b94509492505050565b5f826113b65760019050611471565b816113c3575f9050611471565b81600181146113d957600281146113e357611412565b6001915050611471565b60ff8411156113f5576113f461131c565b5b8360020a91508482111561140c5761140b61131c565b5b50611471565b5060208310610133831016604e8410600b84101617156114475782820a9050838111156114425761144161131c565b5b611471565b6114548484846001611355565b9250905081840481111561146b5761146a61131c565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61148e82611125565b915061149983611478565b92506114c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846113a7565b905092915050565b5f6114d882611125565b91506114e383611125565b92508282026114f181611125565b915082820484148315176115085761150761131c565b5b5092915050565b5f819050919050565b6115218161150f565b82525050565b61153081611125565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61155f82611536565b9050919050565b61156f81611555565b82525050565b5f60a0820190506115885f830188611518565b6115956020830187611518565b6115a26040830186611518565b6115af6060830185611527565b6115bc6080830184611566565b9695505050505050565b5f6020820190506115d95f830184611566565b92915050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61161782611013565b61162181856115df565b93506116318185602086016115ef565b61163a816115fd565b840191505092915050565b5f6020820190508181035f83015261165d818461160d565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f611689825161150f565b80915050919050565b5f61169c82611665565b826116a68461166f565b90506116b18161167e565b925060208210156116f1576116ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026110c8565b831692505b5050919050565b5f60408201905061170b5f830185611527565b6117186020830184611527565b9392505050565b5f61172982611125565b915061173483611125565b925082820190508082111561174c5761174b61131c565b5b92915050565b5f6060820190506117655f830186611566565b6117726020830185611527565b61177f6040830184611527565b949350505050565b5f60208201905061179a5f830184611527565b92915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117cf826117a0565b91506117da836117a0565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561180c5761180b61131c565b5b92915050565b5f819050919050565b5f61183561183061182b84611812565b61112e565b611478565b9050919050565b6118458161181b565b82525050565b5f60408201905061185e5f83018561183c565b61186b6020830184611527565b9392505050565b5f61187c826117a0565b9150611887836117a0565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156118b9576118b861131c565b5b92915050565b5f6118c982611125565b91506118d483611125565b92508282039050818111156118ec576118eb61131c565b5b92915050565b5f819050919050565b5f61191561191061190b846118f2565b61112e565b611478565b9050919050565b611925816118fb565b82525050565b5f60408201905061193e5f83018561191c565b61194b6020830184611527565b9392505050565b60805160a05160c05160e051610100516101205161014051613e646119a35f395f61182101525f6117e601525f611c3001525f611c0f01525f61135d01525f6113b301525f6113dc0152613e645ff3fe608060405234801561000f575f80fd5b50600436106101c2575f3560e01c806370a08231116100f75780639ab24eb011610095578063d505accf1161006f578063d505accf1461056c578063d9d98ce414610588578063dd62ed3e146105b8578063f1127ed8146105e8576101c2565b80639ab24eb0146104f0578063a9059cbb14610520578063c3cda52014610550576101c2565b806384b0196e116100d157806384b0196e146104605780638e539e8c1461048457806391ddadf4146104b457806395d89b41146104d2576101c2565b806370a08231146103e457806379cc6790146104145780637ecebe0014610430576101c2565b806342966c68116101645780635c19a95c1161013e5780635c19a95c146103385780635cffe9de14610354578063613255ab146103845780636fcfff45146103b4576101c2565b806342966c68146102ce5780634bf5d7e9146102ea578063587cde1e14610308576101c2565b806323b872dd116101a057806323b872dd14610232578063313ce567146102625780633644e515146102805780633a46b1a81461029e576101c2565b806306fdde03146101c6578063095ea7b3146101e457806318160ddd14610214575b5f80fd5b6101ce610618565b6040516101db9190612f80565b60405180910390f35b6101fe60048036038101906101f99190613035565b6106a8565b60405161020b919061308d565b60405180910390f35b61021c6106ca565b60405161022991906130b5565b60405180910390f35b61024c600480360381019061024791906130ce565b6106d3565b604051610259919061308d565b60405180910390f35b61026a610701565b6040516102779190613139565b60405180910390f35b610288610709565b604051610295919061316a565b60405180910390f35b6102b860048036038101906102b39190613035565b610717565b6040516102c591906130b5565b60405180910390f35b6102e860048036038101906102e39190613183565b6107ed565b005b6102f2610801565b6040516102ff9190612f80565b60405180910390f35b610322600480360381019061031d91906131ae565b610895565b60405161032f91906131e8565b60405180910390f35b610352600480360381019061034d91906131ae565b6108fa565b005b61036e6004803603810190610369919061329d565b610913565b60405161037b919061308d565b60405180910390f35b61039e600480360381019061039991906131ae565b610b08565b6040516103ab91906130b5565b60405180910390f35b6103ce60048036038101906103c991906131ae565b610b7d565b6040516103db919061333f565b60405180910390f35b6103fe60048036038101906103f991906131ae565b610b8e565b60405161040b91906130b5565b60405180910390f35b61042e60048036038101906104299190613035565b610bd3565b005b61044a600480360381019061044591906131ae565b610bf3565b60405161045791906130b5565b60405180910390f35b610468610c04565b60405161047b9796959493929190613449565b60405180910390f35b61049e60048036038101906104999190613183565b610ca9565b6040516104ab91906130b5565b60405180910390f35b6104bc610d43565b6040516104c991906134eb565b60405180910390f35b6104da610d51565b6040516104e79190612f80565b60405180910390f35b61050a600480360381019061050591906131ae565b610de1565b60405161051791906130b5565b60405180910390f35b61053a60048036038101906105359190613035565b610e4a565b604051610547919061308d565b60405180910390f35b61056a60048036038101906105659190613558565b610e6c565b005b610586600480360381019061058191906135e1565b610f31565b005b6105a2600480360381019061059d9190613035565b611076565b6040516105af91906130b5565b60405180910390f35b6105d260048036038101906105cd919061367e565b6110f9565b6040516105df91906130b5565b60405180910390f35b61060260048036038101906105fd91906136e6565b61117b565b60405161060f9190613794565b60405180910390f35b606060038054610627906137da565b80601f0160208091040260200160405190810160405280929190818152602001828054610653906137da565b801561069e5780601f106106755761010080835404028352916020019161069e565b820191905f5260205f20905b81548152906001019060200180831161068157829003601f168201915b5050505050905090565b5f806106b26111bf565b90506106bf8185856111c6565b600191505092915050565b5f600254905090565b5f806106dd6111bf565b90506106ea8582856111d8565b6106f585858561126a565b60019150509392505050565b5f6012905090565b5f61071261135a565b905090565b5f80610721610d43565b90508065ffffffffffff1683106107715782816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161076892919061380a565b60405180910390fd5b6107c861077d84611410565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061146990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b6107fe6107f86111bf565b82611556565b50565b606061080b6115d5565b65ffffffffffff1661081b610d43565b65ffffffffffff161461085a576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f6109036111bf565b905061090f81836115e4565b5050565b5f8061091e86610b08565b90508085111561096557806040517ffd9a760900000000000000000000000000000000000000000000000000000000815260040161095c91906130b5565b60405180910390fd5b5f6109708787611076565b905061097c88876116f4565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98873ffffffffffffffffffffffffffffffffffffffff166323e30c8b6109c16111bf565b8a8a868b8b6040518763ffffffff1660e01b81526004016109e79695949392919061387b565b6020604051808303815f875af1158015610a03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2791906138e9565b14610a6957876040517f678c5b00000000000000000000000000000000000000000000000000000000008152600401610a6091906131e8565b60405180910390fd5b5f610a72611773565b9050610a8a8930848a610a859190613941565b6111d8565b5f821480610ac357505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610ae257610add898389610ad89190613941565b611556565b610af8565b610aec8988611556565b610af789828461126a565b5b6001935050505095945050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b42575f610b76565b610b4a6106ca565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b759190613974565b5b9050919050565b5f610b8782611777565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610be582610bdf6111bf565b836111d8565b610bef8282611556565b5050565b5f610bfd826117cc565b9050919050565b5f6060805f805f6060610c156117dd565b610c1d611818565b46305f801b5f67ffffffffffffffff811115610c3c57610c3b6139a7565b5b604051908082528060200260200182016040528015610c6a5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f80610cb3610d43565b90508065ffffffffffff168310610d035782816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610cfa92919061380a565b60405180910390fd5b610d1f610d0f84611410565b600a61146990919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610d4c6115d5565b905090565b606060048054610d60906137da565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8c906137da565b8015610dd75780601f10610dae57610100808354040283529160200191610dd7565b820191905f5260205f20905b815481529060010190602001808311610dba57829003601f168201915b5050505050905090565b5f610e2760095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611853565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b5f80610e546111bf565b9050610e6181858561126a565b600191505092915050565b83421115610eb157836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610ea891906130b5565b60405180910390fd5b5f610f12610f0a7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610eef94939291906139d4565b604051602081830303815290604052805190602001206118b5565b8585856118ce565b9050610f1e81876118fc565b610f2881886115e4565b50505050505050565b83421115610f7657836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610f6d91906130b5565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610fa48c611953565b89604051602001610fba96959493929190613a17565b6040516020818303038152906040528051906020012090505f610fdc826118b5565b90505f610feb828787876118ce565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461105f57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401611056929190613a76565b60405180910390fd5b61106a8a8a8a6111c6565b50505050505050505050565b5f3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146110e757826040517fb5a7db920000000000000000000000000000000000000000000000000000000081526004016110de91906131e8565b60405180910390fd5b6110f183836119a6565b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611183612ed4565b61118d83836119ad565b905092915050565b5f81836111a29190613a9d565b905092915050565b5f81836111b79190613aea565b905092915050565b5f33905090565b6111d38383836001611a0c565b505050565b5f6111e384846110f9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112645781811015611255578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161124c93929190613b37565b60405180910390fd5b61126384848484035f611a0c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112da575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016112d191906131e8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361134a575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161134191906131e8565b60405180910390fd5b611355838383611bdb565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156113d557507f000000000000000000000000000000000000000000000000000000000000000046145b15611402577f0000000000000000000000000000000000000000000000000000000000000000905061140d565b61140a611beb565b90505b90565b5f65ffffffffffff8016821115611461576030826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611458929190613bae565b60405180910390fd5b819050919050565b5f80835f018054905090505f8082905060058311156114ea575f61148c84611c80565b846114979190613974565b90506114a5875f0182611d76565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156114d8578091506114e8565b6001816114e59190613941565b92505b505b5f6114f9875f01878585611d88565b90505f81146115485761151a875f016001836115159190613974565b611d76565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661154a565b5f5b94505050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016115bd91906131e8565b60405180910390fd5b6115d1825f83611bdb565b5050565b5f6115df43611410565b905090565b5f6115ee83610895565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46116ef81836116ea86611dfd565b611e0e565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611764575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161175b91906131e8565b60405180910390fd5b61176f5f8383611bdb565b5050565b5f90565b5f6117c56117c060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061207e565b61208d565b9050919050565b5f6117d6826120e4565b9050919050565b606061181360057f000000000000000000000000000000000000000000000000000000000000000061212a90919063ffffffff16565b905090565b606061184e60067f000000000000000000000000000000000000000000000000000000000000000061212a90919063ffffffff16565b905090565b5f80825f018054905090505f81146118ab5761187d835f016001836118789190613974565b611d76565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166118ad565b5f5b915050919050565b5f6118c76118c161135a565b836121d7565b9050919050565b5f805f806118de88888888612217565b9250925092506118ee82826122fe565b829350505050949350505050565b5f61190683611953565b905080821461194e5782816040517f752d88c0000000000000000000000000000000000000000000000000000000008152600401611945929190613bd5565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f92915050565b6119b5612ed4565b611a048260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061246090919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a7c575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a7391906131e8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aec575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611ae391906131e8565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611bd5578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bcc91906130b5565b60405180910390a35b50505050565b611be683838361252f565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611c65959493929190613bfc565b60405160208183030381529060405280519060200120905090565b5f808203611c90575f9050611d71565b5f6001611c9c846125dd565b901c6001901b90506001818481611cb657611cb5613c4d565b5b048201901c90506001818481611ccf57611cce613c4d565b5b048201901c90506001818481611ce857611ce7613c4d565b5b048201901c90506001818481611d0157611d00613c4d565b5b048201901c90506001818481611d1a57611d19613c4d565b5b048201901c90506001818481611d3357611d32613c4d565b5b048201901c90506001818481611d4c57611d4b613c4d565b5b048201901c9050611d6d81828581611d6757611d66613c4d565b5b046126b4565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611df2575f611d9d84846126cc565b90508465ffffffffffff16611db28783611d76565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115611ddc57809250611dec565b600181611de99190613941565b93505b50611d8a565b819050949350505050565b5f611e0782610b8e565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e4957505f81115b15612079575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f63575f80611ed460095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206111aa611ecf866126f1565b61275e565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611f58929190613c7a565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612078575f80611fe960095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611195611fe4866126f1565b61275e565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161206d929190613c7a565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff80168211156120dc576020826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016120d3929190613cda565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b83146121465761213f8361279d565b90506121d1565b818054612152906137da565b80601f016020809104026020016040519081016040528092919081815260200182805461217e906137da565b80156121c95780601f106121a0576101008083540402835291602001916121c9565b820191905f5260205f20905b8154815290600101906020018083116121ac57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612253575f6003859250925092506122f4565b5f6001888888886040515f81526020016040526040516122769493929190613d01565b6020604051602081039080840390855afa158015612296573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122e7575f60015f801b935093509350506122f4565b805f805f1b935093509350505b9450945094915050565b5f600381111561231157612310613d44565b5b82600381111561232457612323613d44565b5b031561245c576001600381111561233e5761233d613d44565b5b82600381111561235157612350613d44565b5b03612388576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561239c5761239b613d44565b5b8260038111156123af576123ae613d44565b5b036123f357805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016123ea91906130b5565b60405180910390fd5b60038081111561240657612405613d44565b5b82600381111561241957612418613d44565b5b0361245b57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612452919061316a565b60405180910390fd5b5b5050565b612468612ed4565b825f018263ffffffff168154811061248357612482613d71565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61253a83838361280f565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125cd575f6125766106ca565b90505f612581612a28565b9050808211156125ca5781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016125c1929190613c7a565b60405180910390fd5b50505b6125d8838383612a4b565b505050565b5f805f90505f608084901c11156125fc57608083901c92506080810190505b5f604084901c111561261657604083901c92506040810190505b5f602084901c111561263057602083901c92506020810190505b5f601084901c111561264a57601083901c92506010810190505b5f600884901c111561266457600883901c92506008810190505b5f600484901c111561267e57600483901c92506004810190505b5f600284901c111561269857600283901c92506002810190505b5f600184901c11156126ab576001810190505b80915050919050565b5f8183106126c257816126c4565b825b905092915050565b5f60028284186126dc9190613d9e565b8284166126e99190613941565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156127565760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161274d929190613e07565b60405180910390fd5b819050919050565b5f8061279161276b610d43565b61278161277788611853565b868863ffffffff16565b87612b039092919063ffffffff16565b91509150935093915050565b60605f6127a983612b1e565b90505f602067ffffffffffffffff8111156127c7576127c66139a7565b5b6040519080825280601f01601f1916602001820160405280156127f95781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285f578060025f8282546128539190613941565b9250508190555061292d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156128e8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016128df93929190613b37565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612974578060025f82825403925050819055506129be565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a1b91906130b5565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a9757612a94600a611195612a8f846126f1565b61275e565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ae357612ae0600a6111aa612adb846126f1565b61275e565b50505b612afe612aef84610895565b612af884610895565b83611e0e565b505050565b5f80612b12855f018585612b6c565b91509150935093915050565b5f8060ff835f1c169050601f811115612b63576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612dec575f612b9587600184612b909190613974565b611d76565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115612c80576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603612d025784612cb188600185612cac9190613974565b611d76565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612ddb565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612ecc565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612f5282612f10565b612f5c8185612f1a565b9350612f6c818560208601612f2a565b612f7581612f38565b840191505092915050565b5f6020820190508181035f830152612f988184612f48565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612fd182612fa8565b9050919050565b612fe181612fc7565b8114612feb575f80fd5b50565b5f81359050612ffc81612fd8565b92915050565b5f819050919050565b61301481613002565b811461301e575f80fd5b50565b5f8135905061302f8161300b565b92915050565b5f806040838503121561304b5761304a612fa0565b5b5f61305885828601612fee565b925050602061306985828601613021565b9150509250929050565b5f8115159050919050565b61308781613073565b82525050565b5f6020820190506130a05f83018461307e565b92915050565b6130af81613002565b82525050565b5f6020820190506130c85f8301846130a6565b92915050565b5f805f606084860312156130e5576130e4612fa0565b5b5f6130f286828701612fee565b935050602061310386828701612fee565b925050604061311486828701613021565b9150509250925092565b5f60ff82169050919050565b6131338161311e565b82525050565b5f60208201905061314c5f83018461312a565b92915050565b5f819050919050565b61316481613152565b82525050565b5f60208201905061317d5f83018461315b565b92915050565b5f6020828403121561319857613197612fa0565b5b5f6131a584828501613021565b91505092915050565b5f602082840312156131c3576131c2612fa0565b5b5f6131d084828501612fee565b91505092915050565b6131e281612fc7565b82525050565b5f6020820190506131fb5f8301846131d9565b92915050565b5f61320b82612fc7565b9050919050565b61321b81613201565b8114613225575f80fd5b50565b5f8135905061323681613212565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261325d5761325c61323c565b5b8235905067ffffffffffffffff81111561327a57613279613240565b5b60208301915083600182028301111561329657613295613244565b5b9250929050565b5f805f805f608086880312156132b6576132b5612fa0565b5b5f6132c388828901613228565b95505060206132d488828901612fee565b94505060406132e588828901613021565b935050606086013567ffffffffffffffff81111561330657613305612fa4565b5b61331288828901613248565b92509250509295509295909350565b5f63ffffffff82169050919050565b61333981613321565b82525050565b5f6020820190506133525f830184613330565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61338c81613358565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6133c481613002565b82525050565b5f6133d583836133bb565b60208301905092915050565b5f602082019050919050565b5f6133f782613392565b613401818561339c565b935061340c836133ac565b805f5b8381101561343c57815161342388826133ca565b975061342e836133e1565b92505060018101905061340f565b5085935050505092915050565b5f60e08201905061345c5f83018a613383565b818103602083015261346e8189612f48565b905081810360408301526134828188612f48565b905061349160608301876130a6565b61349e60808301866131d9565b6134ab60a083018561315b565b81810360c08301526134bd81846133ed565b905098975050505050505050565b5f65ffffffffffff82169050919050565b6134e5816134cb565b82525050565b5f6020820190506134fe5f8301846134dc565b92915050565b61350d8161311e565b8114613517575f80fd5b50565b5f8135905061352881613504565b92915050565b61353781613152565b8114613541575f80fd5b50565b5f813590506135528161352e565b92915050565b5f805f805f8060c0878903121561357257613571612fa0565b5b5f61357f89828a01612fee565b965050602061359089828a01613021565b95505060406135a189828a01613021565b94505060606135b289828a0161351a565b93505060806135c389828a01613544565b92505060a06135d489828a01613544565b9150509295509295509295565b5f805f805f805f60e0888a0312156135fc576135fb612fa0565b5b5f6136098a828b01612fee565b975050602061361a8a828b01612fee565b965050604061362b8a828b01613021565b955050606061363c8a828b01613021565b945050608061364d8a828b0161351a565b93505060a061365e8a828b01613544565b92505060c061366f8a828b01613544565b91505092959891949750929550565b5f806040838503121561369457613693612fa0565b5b5f6136a185828601612fee565b92505060206136b285828601612fee565b9150509250929050565b6136c581613321565b81146136cf575f80fd5b50565b5f813590506136e0816136bc565b92915050565b5f80604083850312156136fc576136fb612fa0565b5b5f61370985828601612fee565b925050602061371a858286016136d2565b9150509250929050565b61372d816134cb565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61376181613733565b82525050565b604082015f82015161377b5f850182613724565b50602082015161378e6020850182613758565b50505050565b5f6040820190506137a75f830184613767565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806137f157607f821691505b602082108103613804576138036137ad565b5b50919050565b5f60408201905061381d5f8301856130a6565b61382a60208301846134dc565b9392505050565b5f82825260208201905092915050565b828183375f83830152505050565b5f61385a8385613831565b9350613867838584613841565b61387083612f38565b840190509392505050565b5f60a08201905061388e5f8301896131d9565b61389b60208301886131d9565b6138a860408301876130a6565b6138b560608301866130a6565b81810360808301526138c881848661384f565b9050979650505050505050565b5f815190506138e38161352e565b92915050565b5f602082840312156138fe576138fd612fa0565b5b5f61390b848285016138d5565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61394b82613002565b915061395683613002565b925082820190508082111561396e5761396d613914565b5b92915050565b5f61397e82613002565b915061398983613002565b92508282039050818111156139a1576139a0613914565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6080820190506139e75f83018761315b565b6139f460208301866131d9565b613a0160408301856130a6565b613a0e60608301846130a6565b95945050505050565b5f60c082019050613a2a5f83018961315b565b613a3760208301886131d9565b613a4460408301876131d9565b613a5160608301866130a6565b613a5e60808301856130a6565b613a6b60a08301846130a6565b979650505050505050565b5f604082019050613a895f8301856131d9565b613a9660208301846131d9565b9392505050565b5f613aa782613733565b9150613ab283613733565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613ae457613ae3613914565b5b92915050565b5f613af482613733565b9150613aff83613733565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115613b3157613b30613914565b5b92915050565b5f606082019050613b4a5f8301866131d9565b613b5760208301856130a6565b613b6460408301846130a6565b949350505050565b5f819050919050565b5f819050919050565b5f613b98613b93613b8e84613b6c565b613b75565b61311e565b9050919050565b613ba881613b7e565b82525050565b5f604082019050613bc15f830185613b9f565b613bce60208301846130a6565b9392505050565b5f604082019050613be85f8301856131d9565b613bf560208301846130a6565b9392505050565b5f60a082019050613c0f5f83018861315b565b613c1c602083018761315b565b613c29604083018661315b565b613c3660608301856130a6565b613c4360808301846131d9565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050613c8d5f8301856130a6565b613c9a60208301846130a6565b9392505050565b5f819050919050565b5f613cc4613cbf613cba84613ca1565b613b75565b61311e565b9050919050565b613cd481613caa565b82525050565b5f604082019050613ced5f830185613ccb565b613cfa60208301846130a6565b9392505050565b5f608082019050613d145f83018761315b565b613d21602083018661312a565b613d2e604083018561315b565b613d3b606083018461315b565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613da882613002565b9150613db383613002565b925082613dc357613dc2613c4d565b5b828204905092915050565b5f819050919050565b5f613df1613dec613de784613dce565b613b75565b61311e565b9050919050565b613e0181613dd7565b82525050565b5f604082019050613e1a5f830185613df8565b613e2760208301846130a6565b939250505056fea2646970667358221220352d7a2a8797c2a1fc6bff5b212ecde2357ba13e38faa1171945ebe3408fe4f064736f6c63430008190033