[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "components": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.Fees", "name": "_fees", "type": "tuple" }, { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "_weights", "type": "uint256[]" }, { "internalType": "address", "name": "_partner", "type": "address" }, { "internalType": "address", "name": "_pairedLpToken", "type": "address" }, { "internalType": "address", "name": "_lpRewardsToken", "type": "address" }, { "internalType": "address", "name": "_v2Router", "type": "address" }, { "internalType": "bool", "name": "_stakeRestriction", "type": "bool" }, { "internalType": "address", "name": "ownerAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountDAI", "type": "uint256" } ], "name": "AddLiquidity", "type": "event" }, { "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": "wallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensBonded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensMinted", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "feesBond", "type": "uint256" } ], "name": "Bond", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "buyFee", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Buy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newIdx", "type": "address" }, { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" } ], "name": "Create", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountDebonded", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "feesDebond", "type": "uint256" } ], "name": "Debond", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "executor", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountLiquidity", "type": "uint256" } ], "name": "RemoveLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "sellFee", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Sell", "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": "BOND_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DAI", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEBOND_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAIRED_LP_TOKEN", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_idxLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_pairedLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_slippage", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "addLiquidityV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_amountMintMin", "type": "uint256" } ], "name": "bond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "created", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint8[]", "name": "", "type": "uint8[]" } ], "name": "debond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "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": [], "name": "fees", "outputs": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAllAssets", "outputs": [ { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.IndexAssetInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getIdxPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sourceToken", "type": "address" }, { "internalType": "uint256", "name": "_sourceAmount", "type": "uint256" }, { "internalType": "address", "name": "_targetToken", "type": "address" } ], "name": "getInitialAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "getTokenPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "indexTokens", "outputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "indexType", "outputs": [ { "internalType": "enum IDecentralizedIndex.IndexType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "isAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpRewardsToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpStakingPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "partner", "outputs": [ { "internalType": "address", "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": [], "name": "processPreSwapFeesAndSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minIdxTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minPairedLpToken", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "removeLiquidityV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "rescueERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rescueETH", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "burn", "type": "uint256" }, { "internalType": "uint256", "name": "bond", "type": "uint256" }, { "internalType": "uint256", "name": "debond", "type": "uint256" }, { "internalType": "uint256", "name": "buy", "type": "uint256" }, { "internalType": "uint256", "name": "sell", "type": "uint256" }, { "internalType": "uint256", "name": "partner", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.Fees", "name": "_fees", "type": "tuple" } ], "name": "setFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_partner", "type": "address" } ], "name": "setPartner", "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": "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6102806040526016805462ffff001916620101001790553480156200002357600080fd5b506040516200b5833803806200b5838339810160408190526200004691620010b7565b8a8a60008b8989898989898a8a80604051806040016040528060018152602001603160f81b8152508d8d8160039081620000819190620012a2565b506004620000908282620012a2565b50620000a29150839050600562000d41565b61012052620000b381600662000d41565b61014052815160208084019190912060e052815190820120610100524660a0526200014160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250620001568162000d7a565b50606462000168612710601462001384565b6200017491906200139e565b87606001511115620001a35760405162461bcd60e51b81526004016200019a90620013c1565b60405180910390fd5b6064620001b4612710601462001384565b620001c091906200139e565b87608001511115620001e65760405162461bcd60e51b81526004016200019a90620013c1565b6064620001f7612710604662001384565b6200020391906200139e565b875111156200023e5760405162461bcd60e51b81526020600482015260066024820152656c746537302560d01b60448201526064016200019a565b60646200024f612710606362001384565b6200025b91906200139e565b87602001511115620002815760405162461bcd60e51b81526004016200019a90620013e1565b606462000292612710606362001384565b6200029e91906200139e565b87604001511115620002c45760405162461bcd60e51b81526004016200019a90620013e1565b6064620002d5612710600562001384565b620002e191906200139e565b8760a0015111156200031e5760405162461bcd60e51b81526020600482015260056024820152646c7465352560d81b60448201526064016200019a565b87600181111562000333576200033362001400565b6101e08160018111156200034b576200034b62001400565b90525042610200528651600b556020870151600c556040870151600d556060870151600e556080870151600f5560a0870151601055600a80546001600160a01b0319166001600160a01b03888116919091179091558481166102405283811661018052600090861615620003c05785620003d6565b7343000000000000000000000000000000000000035b9050806001600160a01b0316610160816001600160a01b0316815250506000846001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a919062001416565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af1158015620004ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d1919062001416565b90508b604051602001620004e691906200143b565b6040516020818303038152906040528b6040516020016200050891906200146c565b60405160208183030381529060405283838988620005285760006200052a565b335b73e3fd8823ab589808cea33a4b05cd3a6d0b35e1d273a51638fe61d1b17942674e9a3b8c21c899c01ee28a604051620005639062000e0f565b6200057799989796959493929190620014c5565b604051809103906000f08015801562000594573d6000803e3d6000fd5b506001600160a01b03908116610220528181166101a052604080516315ab88c960e31b815290519187169163ad5c4648916004808201926020929091908290030181865afa158015620005eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000611919062001416565b6001600160a01b03166101c052604051339030907f96b5b9b8a7193304150caccf9b80d150675fa3d6af57761d8d8ef1d6f9a1a90990600090a3604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d9062000685906002906004016200153d565b6020604051808303816000875af1158015620006a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006cb919062001566565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d9062000706906002906004016200153d565b6020604051808303816000875af115801562000726573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200074c919062001566565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200079d57600080fd5b505af1158015620007b2573d6000803e3d6000fd5b50506040516336b91f2b60e01b8152732536fe9ab3f511540f2f9e2ec2a805005c3dd80092506336b91f2b9150620007ef90869060040162001580565b600060405180830381600087803b1580156200080a57600080fd5b505af11580156200081f573d6000803e3d6000fd5b5050604051631d70c8d360e31b8152734300000000000000000000000000000000000002925063eb86469891506200085c90869060040162001580565b600060405180830381600087803b1580156200087757600080fd5b505af11580156200088c573d6000803e3d6000fd5b50505050505050505050505050505050826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000901919062001416565b6001600160a01b03166102605286518851146200094a5760405162461bcd60e51b81526004016200019a906020808252600490820152631253925560e21b604082015260600190565b60005b885181101562000bcf57601260008a838151811062000970576200097062001594565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620009cc5760405162461bcd60e51b815260206004820152600360248201526204455560ec1b60448201526064016200019a565b6000888281518110620009e357620009e362001594565b60200260200101511162000a235760405162461bcd60e51b81526004016200019a9060208082526004908201526315d5905360e21b604082015260600190565b60116040518060a001604052808b848151811062000a455762000a4562001594565b60200260200101516001600160a01b031681526020018a848151811062000a705762000a7062001594565b602090810291909101810151825260008282018190526040808401829052606093840182905285546001818101885596835291839020855160059093020180546001600160a01b039384166001600160a01b0319918216178255938601519681019690965584015160028601559183015160038501805491909316911617905560800151600490910155875188908290811062000b115762000b1162001594565b60200260200101516017600082825462000b2c9190620015aa565b9250508190555080601360008b848151811062000b4d5762000b4d62001594565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001601260008b848151811062000b945762000b9462001594565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200094d565b5060008760008151811062000be85762000be862001594565b60200260200101516017546c0100000000000000000000000062000c0d919062001384565b62000c1991906200139e565b905060005b895181101562000d2e576017548a828151811062000c405762000c4062001594565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c86573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cac9190620015c0565b62000cb990600a620016e2565b838b848151811062000ccf5762000ccf62001594565b602002602001015162000ce3919062001384565b62000cef919062001384565b62000cfb91906200139e565b6011828154811062000d115762000d1162001594565b600091825260209091206004600590920201015560010162000c1e565b505050505050505050505050506200172d565b600060208351101562000d615762000d598362000dcc565b905062000d74565b8162000d6e8482620012a2565b5060ff90505b92915050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f8151111562000dfa578260405163305a27a960e01b81526004016200019a9190620016f3565b805162000e078262001708565b179392505050565b614de080620067a383390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000e5e5762000e5e62000e1d565b604052919050565b60005b8381101562000e8357818101518382015260200162000e69565b50506000910152565b600082601f83011262000e9e57600080fd5b81516001600160401b0381111562000eba5762000eba62000e1d565b62000ecf601f8201601f191660200162000e33565b81815284602083860101111562000ee557600080fd5b62000ef882602083016020870162000e66565b949350505050565b600060c0828403121562000f1357600080fd5b60405160c081016001600160401b038111828210171562000f385762000f3862000e1d565b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b60006001600160401b0382111562000f995762000f9962000e1d565b5060051b60200190565b80516001600160a01b038116811462000fbb57600080fd5b919050565b600082601f83011262000fd257600080fd5b8151602062000feb62000fe58362000f7d565b62000e33565b8083825260208201915060208460051b8701019350868411156200100e57600080fd5b602086015b848110156200103557620010278162000fa3565b835291830191830162001013565b509695505050505050565b600082601f8301126200105257600080fd5b815160206200106562000fe58362000f7d565b8083825260208201915060208460051b8701019350868411156200108857600080fd5b602086015b848110156200103557805183529183019183016200108d565b8051801515811462000fbb57600080fd5b60008060008060008060008060008060006102008c8e031215620010da57600080fd5b8b516001600160401b03811115620010f157600080fd5b620010ff8e828f0162000e8c565b60208e0151909c5090506001600160401b038111156200111e57600080fd5b6200112c8e828f0162000e8c565b9a50506200113e8d60408e0162000f00565b6101008d01519099506001600160401b038111156200115c57600080fd5b6200116a8e828f0162000fc0565b6101208e015190995090506001600160401b038111156200118a57600080fd5b620011988e828f0162001040565b975050620011aa6101408d0162000fa3565b9550620011bb6101608d0162000fa3565b9450620011cc6101808d0162000fa3565b9350620011dd6101a08d0162000fa3565b9250620011ee6101c08d01620010a6565b9150620011ff6101e08d0162000fa3565b90509295989b509295989b9093969950565b600181811c908216806200122657607f821691505b6020821081036200124757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200129d576000816000526020600020601f850160051c81016020861015620012785750805b601f850160051c820191505b81811015620012995782815560010162001284565b5050505b505050565b81516001600160401b03811115620012be57620012be62000e1d565b620012d681620012cf845462001211565b846200124d565b602080601f8311600181146200130e5760008415620012f55750858301515b600019600386901b1c1916600185901b17855562001299565b600085815260208120601f198616915b828110156200133f578886015182559484019460019091019084016200131e565b50858210156200135e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000d745762000d746200136e565b600082620013bc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600690820152656c746532302560d01b604082015260600190565b6020808252600590820152646c7439392560d81b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156200142957600080fd5b620014348262000fa3565b9392505050565b66029ba30b5b2b2160cd1b8152600082516200145f81600785016020870162000e66565b9190910160070192915050565b607360f81b8152600082516200148a81600185016020870162000e66565b9190910160010192915050565b60008151808452620014b181602086016020860162000e66565b601f01601f19169290920160200192915050565b6000610120808352620014db8184018d62001497565b90508281036020840152620014f1818c62001497565b6001600160a01b039a8b166040850152988a1660608401525050948716608086015292861660a085015290851660c0840152841660e08301529092166101009092019190915292915050565b60208101600383106200156057634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156200157957600080fd5b5051919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052603260045260246000fd5b8082018082111562000d745762000d746200136e565b600060208284031215620015d357600080fd5b815160ff811681146200143457600080fd5b600181815b80851115620016265781600019048211156200160a576200160a6200136e565b808516156200161857918102915b93841c9390800290620015ea565b509250929050565b6000826200163f5750600162000d74565b816200164e5750600062000d74565b8160018114620016675760028114620016725762001692565b600191505062000d74565b60ff8411156200168657620016866200136e565b50506001821b62000d74565b5060208310610133831016604e8410600b8410161715620016b7575081810a62000d74565b620016c38383620015e5565b8060001904821115620016da57620016da6200136e565b029392505050565b60006200143460ff8416836200162e565b60208152600062001434602083018462001497565b80516020808301519190811015620012475760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051614e846200191f6000396000818161296201526135b70152600081816103bc01528181613bff0152613df7015260008181610434015281816117230152613ae80152600081816102b501526130eb015260006103880152600081816129090152818161299101528181612c0701526135ee015260008181611f1a01528181611fd70152818161201401528181612339015281816123b2015281816124020152613391015260008181610e1f01528181610ea801528181610ed70152818161104b015281816110eb01528181612036015281816120c50152818161237501528181613abf01528181613caf0152613d8401526000818161035401528181610d8101528181610e4901528181610e8601528181610eff0152818161101c015281816110c901528181611157015281816111f00152818161127a0152818161207901528181613a6701528181613b6e01528181613c2901528181613c6b01528181613d3801528181613e2101528181613e5301528181613efd0152613f9f01526000610a8101526000610a560152600061269a01526000612672015260006125cd015260006125f7015260006126210152614e846000f3fe608060405234801561001057600080fd5b50600436106102045760003560e01c806306fdde0314610209578063095ea7b31461022757806318160ddd1461024a57806320800a001461025c57806323b872dd1461026657806325e4c443146102795780632acada4d1461028c578063313ce567146102a1578063325a19f1146102b05780633644e515146102d757806339509351146102df57806342966c68146102f25780634a437f88146103055780634f4ce61d1461034f57806353f504471461038357806358f4dcc3146103b757806370a08231146103de578063715018a6146103f15780637ecebe00146103f957806384b0196e1461040c5780638da5cb5b1461042757806394cc699e1461042f57806395b3921e1461045657806395d89b411461046c5780639af1d35a14610474578063a16d5960146104bf578063a457c2d7146104d2578063a9059cbb146104e5578063a9e9c8bc146104f8578063b08d03331461050b578063bb4630271461051e578063bdc8d06014610526578063be10862b1461052e578063c87fa42a14610541578063ccec37161461056d578063d505accf14610580578063d757a9fb14610593578063dd62ed3e146105a6578063e0bab4c4146105b9578063e4b54957146105c7578063ee9c79da146105da578063f2fde38b146105ed578063f682399614610600578063ff140ca614610613575b600080fd5b61021161061b565b60405161021e919061441e565b60405180910390f35b61023a61023536600461444d565b6106ad565b604051901515815260200161021e565b6002545b60405190815260200161021e565b6102646106c7565b005b61023a610274366004614479565b61084e565b610264610287366004614500565b610872565b6102946108a8565b60405161021e9190614579565b6040516012815260200161021e565b61024e7f000000000000000000000000000000000000000000000000000000000000000081565b61024e61093f565b61023a6102ed36600461444d565b61094e565b6102646103003660046145f5565b610970565b6103186103133660046145f5565b6109ae565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a00161021e565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b60405161021e919061460e565b6103aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405161021e9190614638565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b61024e6103ec366004614660565b6109fb565b610264610a16565b61024e610407366004614660565b610a2a565b610414610a48565b60405161021e979695949392919061467d565b610376610ad1565b6103767f000000000000000000000000000000000000000000000000000000000000000081565b61045e610ae0565b60405161021e929190614716565b610211610c35565b600b54600c54600d54600e54600f5460105461049295949392919086565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161021e565b6102646104cd366004614660565b610c44565b61023a6104e036600461444d565b610cb3565b61023a6104f336600461444d565b610d2e565b610264610506366004614724565b610d3c565b610264610519366004614756565b6112fe565b610264611721565b600d5461024e565b600a54610376906001600160a01b031681565b61023a61054f366004614660565b6001600160a01b031660009081526012602052604090205460ff1690565b61026461057b366004614660565b6117f5565b61026461058e36600461479a565b611920565b61024e6105a1366004614660565b611a84565b61024e6105b436600461480b565b611a8f565b6103766003604360981b0181565b61024e6105d5366004614844565b611aba565b6102646105e8366004614921565b611c34565b6102646105fb366004614660565b611e52565b61026461060e366004614724565b611ecb565b600c5461024e565b60606003805461062a906149ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610656906149ed565b80156106a35780601f10610678576101008083540402835291602001916106a3565b820191906000526020600020905b81548152906001019060200180831161068657829003601f168201915b5050505050905090565b6000336106bb818585612196565b60019150505b92915050565b60165462010000900460ff166106f85760405162461bcd60e51b81526004016106ef90614a21565b60405180910390fd5b6016805462ff000019169055476107395760405162461bcd60e51b815260206004820152600560248201526409c9e8aa8960db1b60448201526064016106ef565b600073a51638fe61d1b17942674e9a3b8c21c899c01ee26001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190614a41565b6001600160a01b03164760405160006040518083038185875af1925050503d80600081146107fb576040519150601f19603f3d011682016040523d82523d6000602084013e610800565b606091505b505090508061083a5760405162461bcd60e51b81526004016106ef9060208082526004908201526314d1539560e21b604082015260600190565b506016805462ff0000191662010000179055565b60003361085c8582856122bb565b610867858585612335565b506001949350505050565b61087a612561565b8051600b556020810151600c556040810151600d556060810151600e556080810151600f5560a00151601055565b60606011805480602002602001604051908101604052809291908181526020016000905b828210156109365760008481526020908190206040805160a0810182526005860290920180546001600160a01b03908116845260018083015485870152600283015493850193909352600382015416606084015260040154608083015290835290920191016108cc565b50505050905090565b60006109496125c0565b905090565b6000336106bb8185856109618383611a8f565b61096b9190614a74565b612196565b60165462010000900460ff166109985760405162461bcd60e51b81526004016106ef90614a21565b6016805462ff00001916905561083a33826126eb565b601181815481106109be57600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b6001600160a01b031660009081526020819052604090205490565b610a1e612561565b610a286000612808565b565b6001600160a01b0381166000908152600760205260408120546106c1565b600060608082808083610a7c7f0000000000000000000000000000000000000000000000000000000000000000600561285a565b610aa77f0000000000000000000000000000000000000000000000000000000000000000600661285a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6009546001600160a01b031690565b60008080600160301b815b601154811015610c2857600082610b2d60118481548110610b0e57610b0e614a87565b60009182526020909120600590910201546001600160a01b0316612905565b610b379190614a9d565b90508260118381548110610b4d57610b4d614a87565b6000918252602091829020600590910201546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc49190614abf565b610bcf90600a614bc0565b60118481548110610be257610be2614a87565b90600052602060002090600502016004015483610bff9190614bcf565b610c099190614a9d565b610c139190614a9d565b610c1d9085614a74565b935050600101610aeb565b5060009491935090915050565b60606004805461062a906149ed565b600a546001600160a01b0316336001600160a01b031614610c915760405162461bcd60e51b81526020600482015260076024820152662820a92a2722a960c91b60448201526064016106ef565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610cc18286611a8f565b905083811015610d215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106ef565b6108678286868403612196565b6000336106bb818585612335565b60165462010000900460ff16610d645760405162461bcd60e51b81526004016106ef90614a21565b6016805462ffff00191690556000610d7b306109fb565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610dcb919061460e565b602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c9190614be6565b9050610e19333088612cf2565b610e44307f000000000000000000000000000000000000000000000000000000000000000088612196565b610e797f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333088612e84565b610ecd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087612eef565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8e33700307f000000000000000000000000000000000000000000000000000000000000000089896103e8610f2d8b82614bff565b610f37908e614bcf565b610f419190614a9d565b6103e8610f4e8c82614bff565b610f58908e614bcf565b610f629190614a9d565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e48101869052610104016060604051808303816000875af1158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff9190614c12565b5050604051636eb1769f60e11b8152600091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dd62ed3e906110739030907f000000000000000000000000000000000000000000000000000000000000000090600401614c40565b602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190614be6565b90508015611110576111106001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612f8b565b8261111a306109fb565b111561113e5761113e30338561112f306109fb565b6111399190614bff565b612cf2565b6040516370a0823160e01b815282906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061118c90309060040161460e565b602060405180830381865afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd9190614be6565b11156112a1576112a1336040516370a0823160e01b815284906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061122590309060040161460e565b602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614be6565b6112709190614bff565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190613082565b336001600160a01b03167f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca88886040516112dc929190614716565b60405180910390a250506016805462ffff001916620101001790555050505050565b60165462010000900460ff166113265760405162461bcd60e51b81526004016106ef90614a21565b6016805462ffff00191690556001600160a01b03831660009081526012602052604090205460ff166113895760405162461bcd60e51b815260206004820152600c60248201526b24a72b20a624a22a27a5a2a760a11b60448201526064016106ef565b6001600160a01b0383166000818152601360205260408082205490516370a0823160e01b81529092906370a08231906113c690309060040161460e565b602060405180830381865afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190614be6565b905060006114136130a1565b905060008161143a578261142b600160601b88614bcf565b6114359190614a9d565b611440565b600160601b5b9050600082156114ab576011858154811061145d5761145d614a87565b906000526020600020906005020160040154611477601290565b61148290600a614bc0565b611490600160601b8a614bcf565b61149a9190614bcf565b6114a49190614a9d565b90506114d1565b600160601b826114ba60025490565b6114c49190614bcf565b6114ce9190614a9d565b90505b60006114dc336130b2565b61150057600c54612710906114f19084614bcf565b6114fb9190614a9d565b611503565b60005b9050866115108284614bff565b10156115445760405162461bcd60e51b815260206004820152600360248201526226a4a760e91b60448201526064016106ef565b611557336115528385614bff565b61311c565b801561157057611567308261311c565b611570816131c9565b60005b6011548110156116ae5760008561163557600160601b856011848154811061159d5761159d614a87565b60009182526020909120600590910201546040516370a0823160e01b81526001600160a01b03909116906370a08231906115db90309060040161460e565b602060405180830381865afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190614be6565b6116269190614bcf565b6116309190614a9d565b61166c565b61166c8b8b6011858154811061164d5761164d614a87565b60009182526020909120600590910201546001600160a01b0316611aba565b90506116a56011838154811061168457611684614a87565b60009182526020909120600590910201546001600160a01b03163383613205565b50600101611573565b506116b761333a565b806001600160a01b038a16336001600160a01b03167fa0d4c018dc52dcb9f3edfde940bbcf3dbedee971c90c17295f3a93003d5e77a28b866040516116fd929190614716565b60405180910390a450506016805462ffff0019166201010017905550505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a39190614a41565b6001600160a01b0316336001600160a01b0316146117ed5760405162461bcd60e51b81526020600482015260076024820152665245574152445360c81b60448201526064016106ef565b610a28613368565b60165462010000900460ff1661181d5760405162461bcd60e51b81526004016106ef90614a21565b6016805462ff00001916905560408051638da5cb5b60e01b8152905161083a9173a51638fe61d1b17942674e9a3b8c21c899c01ee291638da5cb5b916004808201926020929091908290030181865afa15801561187e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a29190614a41565b6040516370a0823160e01b81526001600160a01b038416906370a08231906118ce90309060040161460e565b602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f9190614be6565b6001600160a01b0384169190613082565b834211156119705760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016106ef565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861199f8c6134c9565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006119fa826134f1565b90506000611a0a8287878761351e565b9050896001600160a01b0316816001600160a01b031614611a6d5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016106ef565b611a788a8a8a612196565b50505050505050505050565b60006106c182612905565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260136020908152604080832054948616835280832054815163313ce56760e01b815291519395949093909263313ce56792600480820193918290030181865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190614abf565b611b4a90600a614bc0565b60118381548110611b5d57611b5d614a87565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190614abf565b611bdc90600a614bc0565b60118481548110611bef57611bef614a87565b90600052602060002090600502016001015488611c0c9190614bcf565b611c169190614bcf565b611c209190614a9d565b611c2a9190614a9d565b9695505050505050565b60165462010000900460ff16611c5c5760405162461bcd60e51b81526004016106ef90614a21565b6016805462ffff00191690556000611c7384613548565b611ca157600d5461271090611c889082614bff565b611c929086614bcf565b611c9c9190614a9d565b611ca3565b835b90506000611cb060025490565b611cbe600160601b84614bcf565b611cc89190614a9d565b9050611cd5333087612335565b611cdf30836126eb565b611cf1611cec8387614bff565b6131c9565b60005b601154811015611dfa57600060118281548110611d1357611d13614a87565b60009182526020909120600590910201546040516370a0823160e01b81526001600160a01b03909116906370a0823190611d5190309060040161460e565b602060405180830381865afa158015611d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d929190614be6565b90506000600160601b611da58584614bcf565b611daf9190614a9d565b90508015611df057611df0338260118681548110611dcf57611dcf614a87565b60009182526020909120600590910201546001600160a01b03169190613082565b5050600101611cf4565b50611e058286614bff565b60405186815233907feb4e1f68c885fce0dc37cc7eecbff0d11209b7580c2a5d336015497b20af895f9060200160405180910390a350506016805462ffff00191662010100179055505050565b611e5a612561565b6001600160a01b038116611ebf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106ef565b611ec881612808565b50565b60165462010000900460ff16611ef35760405162461bcd60e51b81526004016106ef90614a21565b6016805462ffff00191690558315611f0b5783611f98565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190611f5790339060040161460e565b602060405180830381865afa158015611f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f989190614be6565b935060008411611fd25760405162461bcd60e51b81526020600482015260056024820152644c5052454d60d81b60448201526064016106ef565b6120077f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333087612e84565b61205b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000086612eef565b60408051635d5155ef60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820187905260648201869052608482018590523360a483015260c4820184905282517f00000000000000000000000000000000000000000000000000000000000000009091169263baa2abde9260e4808201939182900301816000875af1158015612110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121349190614c5a565b505061213d3390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f28560405161217791815260200190565b60405180910390a250506016805462ffff001916620101001790555050565b6001600160a01b0383166121f85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106ef565b6001600160a01b0382166122595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106ef565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006122c78484611a8f565b9050600019811461232f57818110156123225760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106ef565b61232f8484848403612196565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156123aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b6016549091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908516149060009060ff161580156123fb5750601654610100900460ff165b15612541577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161461244157612441613368565b82801561244f5750600e5415155b156124c157600e54612710906124659086614bcf565b61246f9190614a9d565b905061247c863083612cf2565b80336001600160a01b03167fa76261e4127b2ebc809716d704216602fdaee4ae5b72745ed9aec0d7bd73b75d30876040516124b8929190614c7e565b60405180910390a35b8180156124cf5750600f5415155b1561254157600f54612710906124e59086614bcf565b6124ef9190614a9d565b90506124fc863083612cf2565b80336001600160a01b03167f463904c4b0359ad674399537c3d4e4e44acc0b0dd259453d17329fd9b4be52c03087604051612538929190614c7e565b60405180910390a35b61254a816131c9565b61255986866111398488614bff565b505050505050565b3361256a610ad1565b6001600160a01b031614610a285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106ef565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561261957507f000000000000000000000000000000000000000000000000000000000000000046145b1561264357507f000000000000000000000000000000000000000000000000000000000000000090565b610949604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821661274b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106ef565b6001600160a01b038216600090815260208190526040902054818110156127bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106ef565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020614e2f83398151915291016122ae565b505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff83146128745761286d83613573565b90506106c1565b818054612880906149ed565b80601f01602080910402602001604051908101604052809291908181526020018280546128ac906149ed565b80156128f95780601f106128ce576101008083540402835291602001916128f9565b820191906000526020600020905b8154815290600101906020018083116128dc57829003601f168201915b505050505090506106c1565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612948576106c16135b2565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a43905906129b99086907f000000000000000000000000000000000000000000000000000000000000000090600401614c40565b602060405180830381865afa1580156129d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129fa9190614a41565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a609190614a41565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac69190614abf565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2c9190614a41565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8d9190614abf565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf49190614cb3565b50915091506000612c036135b2565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614612c9457612c4984600a614bc0565b6001600160701b038416612c5e87600a614bc0565b612c716001600160701b03861685614bcf565b612c7b9190614bcf565b612c859190614a9d565b612c8f9190614a9d565b612ce5565b612c9f85600a614bc0565b6001600160701b038316612cb486600a614bc0565b612cc76001600160701b03871685614bcf565b612cd19190614bcf565b612cdb9190614a9d565b612ce59190614a9d565b9998505050505050505050565b6001600160a01b038316612d565760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106ef565b6001600160a01b038216612db85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106ef565b6001600160a01b03831660009081526020819052604090205481811015612e305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106ef565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020614e2f833981519152910160405180910390a361232f565b6040516001600160a01b038085166024830152831660448201526064810182905261232f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261393b565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e90612f209030908790600401614c40565b602060405180830381865afa158015612f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f619190614be6565b905061232f8463095ea7b360e01b85612f7a8686614a74565b604051602401612eb8929190614c7e565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e90612fbc9030908790600401614c40565b602060405180830381865afa158015612fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffd9190614be6565b9050818110156130615760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b60648201526084016106ef565b61232f8463095ea7b360e01b85858503604051602401612eb8929190614c7e565b6128038363a9059cbb60e01b8484604051602401612eb8929190614c7e565b60006130ac60025490565b15919050565b60006130bc6130a1565b806106c15750600a546001600160a01b0383811691161480156130df5750601454155b80156106c157506131137f000000000000000000000000000000000000000000000000000000000000000062093a80614a74565b42111592915050565b6001600160a01b0382166131725760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106ef565b80600260008282546131849190614a74565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020614e2f833981519152910160405180910390a35050565b8015806131d65750600b54155b156131de5750565b611ec830612710600b60000154846131f69190614bcf565b6132009190614a9d565b6126eb565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061323490309060040161460e565b602060405180830381865afa158015613251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132759190614be6565b905061328c6001600160a01b038516843085612e84565b6132968282614a74565b6040516370a0823160e01b81526001600160a01b038616906370a08231906132c290309060040161460e565b602060405180830381865afa1580156132df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133039190614be6565b101561232f5760405162461bcd60e51b815260206004820152600660248201526515119495905360d21b60448201526064016106ef565b60145415801561335d5750600a546001600160a01b0316336001600160a01b0316145b15610a285742601455565b600060146015546133799190614a74565b421190506000613388306109fb565b905060006133b57f00000000000000000000000000000000000000000000000000000000000000006109fb565b9050600060646133c6836001614bcf565b6133d09190614a9d565b90508380156133df5750808310155b80156133eb5750600082115b1561232f576016805460ff1916600117905542601555600061340e826019614bcf565b84101561343d5761342082600a614bcf565b84101561342d5781613448565b61343882600a614bcf565b613448565b613448826019614bcf565b9050600080600b6005015411801561346a5750600a546001600160a01b031615155b156134a557601054612710906134809084614bcf565b61348a9190614a9d565b600a549091506134a59030906001600160a01b031683612cf2565b6134b76134b28284614bff565b613a10565b50506016805460ff1916905550505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60006106c16134fe6125c0565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061352f87878787614084565b9150915061353c8161413e565b5090505b949350505050565b6000606461355560025490565b613560906062614bcf565b61356a9190614a9d565b90911015919050565b6060600061358083614283565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439056003604360981b017f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161362a929190614c40565b602060405180830381865afa158015613647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366b9190614a41565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d19190614a41565b9050600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137389190614abf565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379a9190614a41565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fb9190614abf565b91509150600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138649190614cb3565b5090925090506001600160a01b0385166003604360981b01146138db5761388c83600a614bc0565b6001600160701b0383166138a186600a614bc0565b6138b86001600160701b038516600160601b614bcf565b6138c29190614bcf565b6138cc9190614a9d565b6138d69190614a9d565b613930565b6138e684600a614bc0565b6001600160701b0382166138fb85600a614bc0565b6139126001600160701b038616600160601b614bcf565b61391c9190614bcf565b6139269190614a9d565b6139309190614a9d565b965050505050505090565b6000613990826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142ab9092919063ffffffff16565b90508051600014806139b15750808060200190518101906139b19190614cf8565b6128035760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ef565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a4557613a45614a87565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613a9957613a99614a87565b60200260200101906001600160a01b031690816001600160a01b031681525050613ae4307f000000000000000000000000000000000000000000000000000000000000000084612196565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b689190614a41565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613bb8919061460e565b602060405180830381865afa158015613bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf99190614be6565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613c5c5782613c5e565b305b90506002604360981b01197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601613d36576040516338ed173960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338ed173990613ced908890600090899087904290600401614d1a565b6000604051808303816000875af1158015613d0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d349190810190614d8d565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166003604360981b0114613df557604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590613dc2908890600090899087904290600401614d1a565b600060405180830381600087803b158015613ddc57600080fd5b505af1158015613df0573d6000803e3d6000fd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603613f85576000827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613e9d919061460e565b602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190614be6565b613ee89190614bff565b90508015613f7f57613f246001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168583612eef565b6040516345efb3f960e11b8152600481018290526001600160a01b03851690638bdf67f290602401600060405180830381600087803b158015613f6657600080fd5b505af1158015613f7a573d6000803e3d6000fd5b505050505b5061407d565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190613fd490879060040161460e565b602060405180830381865afa158015613ff1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140159190614be6565b111561407d576040516370b9f1f960e01b81526001600160a01b038416906370b9f1f99061404a906000908190600401614716565b600060405180830381600087803b15801561406457600080fd5b505af1158015614078573d6000803e3d6000fd5b505050505b5050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038311156140b15750600090506003614135565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614105573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661412e57600060019250925050614135565b9150600090505b94509492505050565b600081600481111561415257614152614622565b0361415a5750565b600181600481111561416e5761416e614622565b036141b65760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016106ef565b60028160048111156141ca576141ca614622565b036142175760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106ef565b600381600481111561422b5761422b614622565b03611ec85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106ef565b600060ff8216601f8111156106c157604051632cd44ac360e21b815260040160405180910390fd5b6060613540848460008585600080866001600160a01b031685876040516142d29190614e12565b60006040518083038185875af1925050503d806000811461430f576040519150601f19603f3d011682016040523d82523d6000602084013e614314565b606091505b509150915061432587838387614330565b979650505050505050565b6060831561439f578251600003614398576001600160a01b0385163b6143985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ef565b5081613540565b61354083838151156143b45781518083602001fd5b8060405162461bcd60e51b81526004016106ef919061441e565b60005b838110156143e95781810151838201526020016143d1565b50506000910152565b6000815180845261440a8160208601602086016143ce565b601f01601f19169290920160200192915050565b60208152600061443160208301846143f2565b9392505050565b6001600160a01b0381168114611ec857600080fd5b6000806040838503121561446057600080fd5b823561446b81614438565b946020939093013593505050565b60008060006060848603121561448e57600080fd5b833561449981614438565b925060208401356144a981614438565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156144f8576144f86144ba565b604052919050565b600060c0828403121561451257600080fd5b60405160c081016001600160401b0381118282101715614534576145346144ba565b8060405250823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201528091505092915050565b602080825282518282018190526000919060409081850190868401855b828110156145e857815180516001600160a01b03908116865287820151888701528682015187870152606080830151909116908601526080908101519085015260a09093019290850190600101614596565b5091979650505050505050565b60006020828403121561460757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052602160045260246000fd5b602081016002831061465a57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561467257600080fd5b813561443181614438565b60ff60f81b881681526000602060e0602084015261469e60e084018a6143f2565b83810360408501526146b0818a6143f2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015614704578351835292840192918401916001016146e8565b50909c9b505050505050505050505050565b918252602082015260400190565b6000806000806080858703121561473a57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561476b57600080fd5b833561477681614438565b95602085013595506040909401359392505050565b60ff81168114611ec857600080fd5b600080600080600080600060e0888a0312156147b557600080fd5b87356147c081614438565b965060208801356147d081614438565b9550604088013594506060880135935060808801356147ee8161478b565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561481e57600080fd5b823561482981614438565b9150602083013561483981614438565b809150509250929050565b60008060006060848603121561485957600080fd5b833561486481614438565b925060208401359150604084013561487b81614438565b809150509250925092565b60006001600160401b0382111561489f5761489f6144ba565b5060051b60200190565b600082601f8301126148ba57600080fd5b813560206148cf6148ca83614886565b6144d0565b8083825260208201915060208460051b8701019350868411156148f157600080fd5b602086015b848110156149165780356149098161478b565b83529183019183016148f6565b509695505050505050565b60008060006060848603121561493657600080fd5b833592506020808501356001600160401b038082111561495557600080fd5b818701915087601f83011261496957600080fd5b81356149776148ca82614886565b81815260059190911b8301840190848101908a83111561499657600080fd5b938501935b828510156149bd5784356149ae81614438565b8252938501939085019061499b565b9650505060408701359250808311156149d557600080fd5b50506149e3868287016148a9565b9150509250925092565b600181811c90821680614a0157607f821691505b6020821081036134eb57634e487b7160e01b600052602260045260246000fd5b6020808252600690820152651313d0d2d15160d21b604082015260600190565b600060208284031215614a5357600080fd5b815161443181614438565b634e487b7160e01b600052601160045260246000fd5b808201808211156106c1576106c1614a5e565b634e487b7160e01b600052603260045260246000fd5b600082614aba57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614ad157600080fd5b81516144318161478b565b600181815b80851115614b17578160001904821115614afd57614afd614a5e565b80851615614b0a57918102915b93841c9390800290614ae1565b509250929050565b600082614b2e575060016106c1565b81614b3b575060006106c1565b8160018114614b515760028114614b5b57614b77565b60019150506106c1565b60ff841115614b6c57614b6c614a5e565b50506001821b6106c1565b5060208310610133831016604e8410600b8410161715614b9a575081810a6106c1565b614ba48383614adc565b8060001904821115614bb857614bb8614a5e565b029392505050565b600061443160ff841683614b1f565b80820281158282048414176106c1576106c1614a5e565b600060208284031215614bf857600080fd5b5051919050565b818103818111156106c1576106c1614a5e565b600080600060608486031215614c2757600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0392831681529116602082015260400190565b60008060408385031215614c6d57600080fd5b505080516020909101519092909150565b6001600160a01b03929092168252602082015260400190565b80516001600160701b0381168114614cae57600080fd5b919050565b600080600060608486031215614cc857600080fd5b614cd184614c97565b9250614cdf60208501614c97565b9150604084015163ffffffff8116811461487b57600080fd5b600060208284031215614d0a57600080fd5b8151801515811461443157600080fd5b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015614d6c5784516001600160a01b031683529383019391830191600101614d47565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215614da057600080fd5b82516001600160401b03811115614db657600080fd5b8301601f81018513614dc757600080fd5b8051614dd56148ca82614886565b81815260059190911b82018301908381019087831115614df457600080fd5b928401925b8284101561432557835182529284019290840190614df9565b60008251614e248184602087016143ce565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220233a83f0cda7033f3a084161fc1e40255969c83eec595578cff2c239dee0624564736f6c6343000818003360e06040523480156200001157600080fd5b5060405162004de038038062004de0833981016040819052620000349162000452565b8089896003620000458382620005d5565b506004620000548282620005d5565b5050506200006881620002ff60201b60201c565b503360808190526001600160a01b0387811660a052600680546001600160a01b031916918716919091179055604051849184918a9030908a908790620000ae9062000351565b6001600160a01b03978816815295871660208701529386166040860152918516606085015284166080840152831660a083015290911660c082015260e001604051809103906000f08015801562000109573d6000803e3d6000fd5b506001600160a01b031660c052604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d906200015090600290600401620006a1565b6020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620006ca565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d90620001d190600290600401620006a1565b6020604051808303816000875af1158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002179190620006ca565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200026857600080fd5b505af11580156200027d573d6000803e3d6000fd5b5050604051631d70c8d360e31b81526001600160a01b0384166004820152734300000000000000000000000000000000000002925063eb8646989150602401600060405180830381600087803b158015620002d757600080fd5b505af1158015620002ec573d6000803e3d6000fd5b50505050505050505050505050620006e4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6131798062001c6783390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200038757600080fd5b81516001600160401b0380821115620003a457620003a46200035f565b604051601f8301601f19908116603f01168101908282118183101715620003cf57620003cf6200035f565b8160405283815260209250866020858801011115620003ed57600080fd5b600091505b83821015620004115785820183015181830184015290820190620003f2565b6000602085830101528094505050505092915050565b6001600160a01b03811681146200043d57600080fd5b50565b80516200044d8162000427565b919050565b60008060008060008060008060006101208a8c0312156200047257600080fd5b89516001600160401b03808211156200048a57600080fd5b620004988d838e0162000375565b9a5060208c0151915080821115620004af57600080fd5b50620004be8c828d0162000375565b98505060408a0151620004d18162000427565b60608b0151909750620004e48162000427565b9550620004f460808b0162000440565b94506200050460a08b0162000440565b93506200051460c08b0162000440565b92506200052460e08b0162000440565b9150620005356101008b0162000440565b90509295985092959850929598565b600181811c908216806200055957607f821691505b6020821081036200057a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005d0576000816000526020600020601f850160051c81016020861015620005ab5750805b601f850160051c820191505b81811015620005cc57828155600101620005b7565b5050505b505050565b81516001600160401b03811115620005f157620005f16200035f565b620006098162000602845462000544565b8462000580565b602080601f831160018114620006415760008415620006285750858301515b600019600386901b1c1916600185901b178555620005cc565b600085815260208120601f198616915b82811015620006725788860151825594840194600190910190840162000651565b5085821015620006915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020810160038310620006c457634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620006dd57600080fd5b5051919050565b60805160a05160c051611537620007306000396000818161028f01528181610ed80152610f84015260008181610268015281816104750152610647015260006102be01526115376000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c806306fdde031461014e578063095ea7b31461016c57806318160ddd1461018f57806323b872dd146101a15780632e17de78146101b4578063313ce567146101c957806331a0edec146101d857806339509351146101fe57806359b36693146102115780635fc3ea0b1461021f57806370a0823114610232578063715018a61461025b57806372f702f3146102635780638bc6beb21461028a5780638da5cb5b146102b157806390eb3911146102b957806395d89b41146102e057806397d75776146102e8578063a457c2d7146102f6578063a9059cbb14610309578063adc9772e1461031c578063c56e0ad81461032f578063ce56c45414610337578063da0e1dab1461034a578063dba802d91461035d578063dd62ed3e14610370578063f2fde38b14610383575b600080fd5b610156610396565b604051610163919061127e565b60405180910390f35b61017f61017a3660046112cd565b610428565b6040519015158152602001610163565b6002545b604051908152602001610163565b61017f6101af3660046112f7565b610442565b6101c76101c2366004611333565b610466565b005b60405160128152602001610163565b6101e66003604360981b0181565b6040516001600160a01b039091168152602001610163565b61017f61020c3660046112cd565b6104dc565b6101e66004604360981b0181565b6101c761022d36600461134c565b6104fe565b610193610240366004611388565b6001600160a01b031660009081526020819052604090205490565b6101c761051f565b6101e67f000000000000000000000000000000000000000000000000000000000000000081565b6101e67f000000000000000000000000000000000000000000000000000000000000000081565b6101e6610533565b6101e67f000000000000000000000000000000000000000000000000000000000000000081565b610156610542565b6101e66002604360981b0181565b61017f6103043660046112cd565b610551565b61017f6103173660046112cd565b6105d1565b6101c761032a3660046112cd565b6105df565b6101c76106bb565b6101c76103453660046113aa565b610700565b6006546101e6906001600160a01b031681565b6101c761036b366004611388565b61073e565b61019361037e3660046113d6565b610793565b6101c7610391366004611388565b6107be565b6060600380546103a590611400565b80601f01602080910402602001604051908101604052809291908181526020018280546103d190611400565b801561041e5780601f106103f35761010080835404028352916020019161041e565b820191906000526020600020905b81548152906001019060200180831161040157829003601f168201915b5050505050905090565b600033610436818585610837565b60019150505b92915050565b60003361045085828561095b565b61045b8585856109d5565b506001949350505050565b6104703382610b6d565b6104a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383610c94565b60405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a250565b6000336104368185856104ef8383610793565b6104f9919061143a565b610837565b610506610cf7565b61051a6001600160a01b0384168284610c94565b505050565b610527610cf7565b6105316000610d56565b565b6005546001600160a01b031690565b6060600480546103a590611400565b6000338161055f8286610793565b9050838110156105c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61045b8286868403610837565b6000336104368185856109d5565b6006546001600160a01b031615610638576006546001600160a01b038381169116146106385760405162461bcd60e51b8152602060048201526008602482015267149154d5149250d560c21b60448201526064016105bb565b6106428282610da8565b6106777f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333084610e61565b6040518181526001600160a01b0383169033907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a35050565b6006546001600160a01b0316336001600160a01b0316146106ee5760405162461bcd60e51b81526004016105bb9061145b565b600680546001600160a01b0319169055565b610708610cf7565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561051a573d6000803e3d6000fd5b6006546001600160a01b0316336001600160a01b0316146107715760405162461bcd60e51b81526004016105bb9061145b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6107c6610cf7565b6001600160a01b03811661082b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105bb565b61083481610d56565b50565b6001600160a01b0383166108995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105bb565b6001600160a01b0382166108fa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105bb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006109678484610793565b905060001981146109cf57818110156109c25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105bb565b6109cf8484848403610837565b50505050565b6001600160a01b038316610a395760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105bb565b6001600160a01b038216610a9b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105bb565b6001600160a01b03831660009081526020819052604090205481811015610b135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105bb565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290926000805160206114e2833981519152910160405180910390a36109cf848484610e99565b6001600160a01b038216610bcd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105bb565b6001600160a01b03821660009081526020819052604090205481811015610c415760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105bb565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192916000805160206114e2833981519152910160405180910390a361051a83600084610e99565b6040516001600160a01b03831660248201526044810182905261051a90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610ff5565b33610d00610533565b6001600160a01b0316146105315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105bb565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610dfe5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105bb565b8060026000828254610e10919061143a565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481526000805160206114e2833981519152910160405180910390a3610e5d60008383610e99565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526109cf9085906323b872dd60e01b90608401610cc0565b6001600160a01b03831615801590610ebc57506001600160a01b03831661dead14155b15610f455760405163d6460b4b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90610f129086908590600190600401611480565b600060405180830381600087803b158015610f2c57600080fd5b505af1158015610f40573d6000803e3d6000fd5b505050505b6001600160a01b03821615801590610f6857506001600160a01b03821661dead14155b1561051a5760405163d6460b4b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90610fbe9085908590600090600401611480565b600060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b50505050505050565b600061104a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110ca9092919063ffffffff16565b905080516000148061106b57508080602001905181019061106b91906114a3565b61051a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105bb565b60606110d984846000856110e1565b949350505050565b6060824710156111425760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105bb565b600080866001600160a01b0316858760405161115e91906114c5565b60006040518083038185875af1925050503d806000811461119b576040519150601f19603f3d011682016040523d82523d6000602084013e6111a0565b606091505b50915091506111b1878383876111bc565b979650505050505050565b6060831561122b578251600003611224576001600160a01b0385163b6112245760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105bb565b50816110d9565b6110d983838151156112405781518083602001fd5b8060405162461bcd60e51b81526004016105bb919061127e565b60005b8381101561127557818101518382015260200161125d565b50506000910152565b602081526000825180602084015261129d81604085016020870161125a565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146112c857600080fd5b919050565b600080604083850312156112e057600080fd5b6112e9836112b1565b946020939093013593505050565b60008060006060848603121561130c57600080fd5b611315846112b1565b9250611323602085016112b1565b9150604084013590509250925092565b60006020828403121561134557600080fd5b5035919050565b60008060006060848603121561136157600080fd5b61136a846112b1565b92506020840135915061137f604085016112b1565b90509250925092565b60006020828403121561139a57600080fd5b6113a3826112b1565b9392505050565b600080604083850312156113bd57600080fd5b823591506113cd602084016112b1565b90509250929050565b600080604083850312156113e957600080fd5b6113f2836112b1565b91506113cd602084016112b1565b600181811c9082168061141457607f821691505b60208210810361143457634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561043c57634e487b7160e01b600052601160045260246000fd5b6020808252600b908201526a0a48aa6aaa68aa482aaa8960ab1b604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b6000602082840312156114b557600080fd5b815180151581146113a357600080fd5b600082516114d781846020870161125a565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201d0340d32a119c06e6aa89ec8b93d9452b444da0e7f63c5271bce5178d0ede0764736f6c63430008180033610140604052600a600555600a6006553480156200001c57600080fd5b5060405162003179380380620031798339810160408190526200003f9162000332565b806200004b81620002c9565b506001600160a01b0380881660c05286811660e05285811660805284811660a05283811661010052821661012052604051631a33757d60e01b815273430000000000000000000000000000000000000390631a33757d90620000b390600290600401620003dd565b6020604051808303816000875af1158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f9919062000406565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d906200013490600290600401620003dd565b6020604051808303816000875af115801562000154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017a919062000406565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001cb57600080fd5b505af1158015620001e0573d6000803e3d6000fd5b505050507343000000000000000000000000000000000000026001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200023457600080fd5b505af115801562000249573d6000803e3d6000fd5b5050604051631d70c8d360e31b81526001600160a01b0384166004820152734300000000000000000000000000000000000002925063eb8646989150602401600060405180830381600087803b158015620002a357600080fd5b505af1158015620002b8573d6000803e3d6000fd5b505050505050505050505062000420565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200032f57600080fd5b50565b600080600080600080600060e0888a0312156200034e57600080fd5b87516200035b8162000319565b60208901519097506200036e8162000319565b6040890151909650620003818162000319565b6060890151909550620003948162000319565b6080890151909450620003a78162000319565b60a0890151909350620003ba8162000319565b60c0890151909250620003cd8162000319565b8091505092959891949750929550565b60208101600383106200040057634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156200041957600080fd5b5051919050565b60805160a05160c05160e0516101005161012051612c6162000518600039600081816102ad0152818161041d01528181610cc801528181610d4501528181610d7b015281816113ce015281816114820152818161195001528181611e5c01528181611eca01526121060152600081816102400152610efb01526000610b110152600081816105ca015281816110dd0152611616015260008181610447015281816104b801528181610502015281816106db01528181610723015281816107660152818161079f0152818161096801528181610a0201528181610b9b015281816120dc0152612151015260006120690152612c616000f3fe608060405234801561001057600080fd5b50600436106101125760003560e01c80630700037d146101175780631869ebda146101585780633a98ef391461016d5780635a61aa1d146101845780635fc3ea0b1461019757806370b9f1f9146101aa578063715018a6146101bd57806386989038146101c557806389d96917146101ce5780638bdf67f2146101e15780638da5cb5b146101f45780639c1454d414610209578063a95ae7eb14610212578063ba32722e1461021b578063bde308181461023b578063ce56c45414610262578063ce7c2ac214610275578063d076eabc14610295578063d1af0c7d146102a8578063d279c191146102cf578063d6460b4b146102e2578063f2fde38b146102f5575b600080fd5b61013e610125366004612541565b6004602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61016b61016636600461255e565b610308565b005b61017660015481565b60405190815260200161014f565b61017661019236600461258a565b610386565b61016b6101a53660046125c3565b6103ff565b61016b6101b8366004612605565b61041b565b61016b610bda565b61017660025481565b6101766101dc366004612541565b610bee565b61016b6101ef366004612627565b610c76565b6101fc610e19565b60405161014f9190612640565b61017660085481565b61017660095481565b610176610229366004612627565b600a6020526000908152604090205481565b6101fc7f000000000000000000000000000000000000000000000000000000000000000081565b61016b610270366004612654565b610e28565b610176610283366004612541565b60036020526000908152604090205481565b6101766102a3366004612627565b610e66565b6101fc7f000000000000000000000000000000000000000000000000000000000000000081565b61016b6102dd366004612541565b610eb8565b61016b6102f0366004612687565b610ef8565b61016b610303366004612541565b610f6a565b610310610fe3565b604051635569f64b60e11b81526001600160a01b0383169063aad3ec969061033e90339085906004016126be565b6020604051808303816000875af115801561035d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038191906126d7565b505050565b60405163e12f3a6160e01b81526000906001600160a01b0384169063e12f3a61906103b5908590600401612640565b602060405180830381865afa1580156103d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f691906126d7565b90505b92915050565b610407610fe3565b6103816001600160a01b0384168284611042565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036104ad5760405162461bcd60e51b81526020600482015260096024820152684c5052455753414d4560b81b60448201526064015b60405180910390fd5b81156104e8576104e87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333085611098565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610537903090600401612640565b602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057891906126d7565b9050600081116105b45760405162461bcd60e51b81526020600482015260076024820152662722a2a22a25a760c91b60448201526064016104a4565b6000806105bf6110d6565b50905080156106ce577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a91906126f0565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab91906126d7565b6106b58285612723565b6106bf9190612750565b91506106cb8284612764565b92505b6107166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167398994a9a7a2570367554589189dc9772241650f68561123c565b60006002604360981b01197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601610764576107616003604360981b01856112d8565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166003604360981b0114610bc95760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632acada4d6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108239190810190612808565b905060008160008151811061083a5761083a6128f0565b6020026020010151600001516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016108719190612640565b602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906126d7565b60408051600180825281830190925291925060009190602080830190803683370190505090506000816000815181106108ed576108ed6128f0565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905060008160008151811061093f5761093f6128f0565b60ff9092166020928302919091019091015260405163774e3ced60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ee9c79da906109a1908b908690869060040161294b565b600060405180830381600087803b1580156109bb57600080fd5b505af19250505080156109cc575060015b610a42576101f460055410156109f557600a600560008282546109ef91906129ab565b90915550505b610a3d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167398994a9a7a2570367554589189dc9772241650f68a6114e9565b610bc4565b600084600081518110610a5757610a576128f0565b6020026020010151600001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610a8e9190612640565b602060405180830381865afa158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf91906126d7565b9050610b0485600081518110610ae757610ae76128f0565b6020026020010151600001518583610aff9190612764565b6112d8565b95508715610bc257610bc27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9191906126f0565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908a611042565b505b505050505b610bd2816115e0565b505050505050565b610be2610fe3565b610bec60006117e9565b565b6001600160a01b0381166000908152600360205260408120548103610c1557506000919050565b6001600160a01b038216600090815260036020526040812054610c3790611839565b6001600160a01b038416600090815260046020526040902054909150808211610c64575060009392505050565b610c6e8183612764565b949350505050565b60008111610cae5760405162461bcd60e51b8152602060048201526005602482015264444550414d60d81b60448201526064016104a4565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610cfd903090600401612640565b602060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e91906126d7565b9050610d757f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333085611098565b610e15817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610dc59190612640565b602060405180830381865afa158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906126d7565b610e109190612764565b6115e0565b5050565b6000546001600160a01b031690565b610e30610fe3565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610381573d6000803e3d6000fd5b600080610e7283611862565b925050506201518083610e8591906129be565b610e90600183612764565b610e9d9062015180612723565b610ea79085612764565b610eb19190612764565b9392505050565b610ec181611888565b6040516001600160a01b038216907f63e32091e4445d16e29c33a6b264577c2d86694021aa4e6f4dd590048f5792e890600090a250565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610f5f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016104a4565b6103818383836119be565b610f72610fe3565b6001600160a01b038116610fd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104a4565b610fe0816117e9565b50565b33610fec610e19565b6001600160a01b031614610bec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a4565b6103818363a9059cbb60e01b84846040516024016110619291906126be565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a56565b6040516001600160a01b03808516602483015283166044820152606481018290526110d09085906323b872dd60e01b90608401611061565b50505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d91906126f0565b90506001600160a01b0381161561123757806001600160a01b031663676011556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d091906126d7565b9250806001600160a01b0316630389ed176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611210573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123491906126d7565b91505b509091565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061126d90309087906004016129d2565b602060405180830381865afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae91906126d7565b90506110d08463095ea7b360e01b856112c786866129ab565b6040516024016110619291906126be565b6040805160028082526060820183526000928392919060208301908036833701905050905060006001600160a01b0385166004604360981b011461142d57848260008151811061132a5761132a6128f0565b60200260200101906001600160a01b031690816001600160a01b0316815250506004604360981b0182600181518110611365576113656128f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061138f8285611b2b565b90506004604360981b01826000815181106113ac576113ac6128f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000082600181518110611400576114006128f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061142a8282611b2b565b92505b6003604360981b01196001600160a01b038616016114e1576004604360981b0182600081518110611460576114606128f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000826001815181106114b4576114b46128f0565b60200260200101906001600160a01b031690816001600160a01b0316815250506114de8285611b2b565b92505b505092915050565b604051636eb1769f60e11b81526000906001600160a01b0385169063dd62ed3e9061151a90309087906004016129d2565b602060405180830381865afa158015611537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155b91906126d7565b9050818110156115bf5760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b60648201526084016104a4565b6110d08463095ea7b360e01b858585036040516024016110619291906126be565b806000036115eb5750565b6001546000036115fe57610fe081611e46565b8060006116096110d6565b915050801561172b5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169691906126f0565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f791906126d7565b6117018386612723565b61170b9190612750565b905080156117295761171c81611e46565b6117268184612764565b92505b505b816009600082825461173d91906129ab565b90915550829050600a600061175142610e66565b8152602001908152602001600020600082825461176e91906129ab565b909155505060015461178e836a0c097ce7bc90715b34b9f160241b612723565b6117989190612750565b600760008282546117a991906129ab565b909155505060405182815233907fb9ad861b752f80117b35bea6dec99933d8a5ae360f2839ee8784b750d5613409906020015b60405180910390a2505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006a0c097ce7bc90715b34b9f160241b600754836118589190612723565b6103f99190612750565b6000808061187b6118766201518086612750565b611ef3565b9196909550909350915050565b6001600160a01b03811660009081526003602052604081205490036118aa5750565b60006118b582610bee565b6001600160a01b0383166000908152600460205260408120600101805492935083929091906118e59084906129ab565b90915550506001600160a01b03821660009081526003602052604090205461190c90611839565b6001600160a01b0383166000908152600460205260409020558015610e1557806008600082825461193d91906129ab565b9091555061197790506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611042565b816001600160a01b03167fe8b160e373db99a103e0a2abfa029b9c3fc8b328984a1ead8a65ae68ae646db7826040516119b291815260200190565b60405180910390a25050565b6119c6612067565b8015611a11576119d683836121d9565b826001600160a01b03167fae0577e1c96b26fbc0b9df702431f5470979d001d24f136eded791b8b6521d6f836040516117dc91815260200190565b611a1b8383612311565b826001600160a01b03167fba8f3777cf908803bf1f3dd58e7f4b7d3de4dbe3c234c4ccab0975d98f7cd388836040516117dc91815260200190565b6000611aab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124199092919063ffffffff16565b9050805160001480611acc575080806020019051810190611acc91906129ec565b6103815760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104a4565b60008083600181518110611b4157611b416128f0565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611b749190612640565b602060405180830381865afa158015611b91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb591906126d7565b60405163d06ca61f60e01b81529091506000907398994a9a7a2570367554589189dc9772241650f69063d06ca61f90611bf49087908990600401612a09565b600060405180830381865afa158015611c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c399190810190612a22565b9050600060646006546064611c4e9190612764565b83600181518110611c6157611c616128f0565b6020026020010151611c739190612723565b611c7d9190612750565b905085600081518110611c9257611c926128f0565b60200260200101516001600160a01b031663095ea7b37398994a9a7a2570367554589189dc9772241650f6876040518363ffffffff1660e01b8152600401611cdb9291906126be565b6020604051808303816000875af1158015611cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1e91906129ec565b506040516338ed173960e01b81527398994a9a7a2570367554589189dc9772241650f6906338ed173990611d5e90889085908b9030904290600401612aa7565b6000604051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611da59190810190612a22565b50600086600181518110611dbb57611dbb6128f0565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611dee9190612640565b602060405180830381865afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f91906126d7565b9050611e3b8482612764565b979650505050505050565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611ea857600080fd5b505af1925050508015611eb9575060015b610fe057610fe06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661dead83611042565b60008080838162253d8c611f0a8362010bd9612ae3565b611f149190612ae3565b9050600062023ab1611f27836004612b03565b611f319190612b33565b90506004611f428262023ab1612b03565b611f4d906003612ae3565b611f579190612b33565b611f619083612b61565b9150600062164b09611f74846001612ae3565b611f8090610fa0612b03565b611f8a9190612b33565b90506004611f9a826105b5612b03565b611fa49190612b33565b611fae9084612b61565b611fb990601f612ae3565b9250600061098f611fcb856050612b03565b611fd59190612b33565b905060006050611fe78361098f612b03565b611ff19190612b33565b611ffb9086612b61565b9050612008600b83612b33565b945061201585600c612b03565b612020836002612ae3565b61202a9190612b61565b91508483612039603187612b61565b612044906064612b03565b61204e9190612ae3565b6120589190612ae3565b9a919950975095505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb4630276040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580156121c957506040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190612186903090600401612640565b602060405180830381865afa1580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c791906126d7565b115b15610bec57610bec60008061041b565b6001600160a01b0382166000908152600360205260409020541580159061221857506001600160a01b0382166000908152600360205260409020548111155b61224d5760405162461bcd60e51b815260206004820152600660248201526552454d4f564560d01b60448201526064016104a4565b61225682611888565b80600160008282546122689190612764565b90915550506001600160a01b03821660009081526003602052604081208054839290612295908490612764565b90915550506001600160a01b03821660009081526003602052604081205490036122cf57600280549060006122c983612b88565b91905055505b6001600160a01b0382166000908152600360205260409020546122f190611839565b6001600160a01b0390921660009081526004602052604090209190915550565b6001600160a01b038216600090815260036020526040902054156123385761233882611888565b6001600160a01b03821660009081526003602052604081205460018054919284926123649084906129ab565b90915550506001600160a01b038316600090815260036020526040812080548492906123919084906129ab565b9091555050801580156123bb57506001600160a01b03831660009081526003602052604090205415155b156123d657600280549060006123d083612b9f565b91905055505b6001600160a01b0383166000908152600360205260409020546123f890611839565b6001600160a01b039093166000908152600460205260409020929092555050565b6060610c6e848460008585600080866001600160a01b031685876040516124409190612bdc565b60006040518083038185875af1925050503d806000811461247d576040519150601f19603f3d011682016040523d82523d6000602084013e612482565b606091505b5091509150611e3b87838387606083156124fd5782516000036124f6576001600160a01b0385163b6124f65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104a4565b5081610c6e565b610c6e83838151156125125781518083602001fd5b8060405162461bcd60e51b81526004016104a49190612bf8565b6001600160a01b0381168114610fe057600080fd5b60006020828403121561255357600080fd5b8135610eb18161252c565b6000806040838503121561257157600080fd5b823561257c8161252c565b946020939093013593505050565b6000806040838503121561259d57600080fd5b82356125a88161252c565b915060208301356125b88161252c565b809150509250929050565b6000806000606084860312156125d857600080fd5b83356125e38161252c565b92506020840135915060408401356125fa8161252c565b809150509250925092565b6000806040838503121561261857600080fd5b50508035926020909101359150565b60006020828403121561263957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561266757600080fd5b8235915060208301356125b88161252c565b8015158114610fe057600080fd5b60008060006060848603121561269c57600080fd5b83356126a78161252c565b92506020840135915060408401356125fa81612679565b6001600160a01b03929092168252602082015260400190565b6000602082840312156126e957600080fd5b5051919050565b60006020828403121561270257600080fd5b8151610eb18161252c565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103f9576103f961270d565b634e487b7160e01b600052601260045260246000fd5b60008261275f5761275f61273a565b500490565b818103818111156103f9576103f961270d565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156127af576127af612777565b60405290565b604051601f8201601f191681016001600160401b03811182821017156127dd576127dd612777565b604052919050565b60006001600160401b038211156127fe576127fe612777565b5060051b60200190565b6000602080838503121561281b57600080fd5b82516001600160401b0381111561283157600080fd5b8301601f8101851361284257600080fd5b8051612855612850826127e5565b6127b5565b81815260a0918202830184019184820191908884111561287457600080fd5b938501935b838510156128e45780858a0312156128915760008081fd5b61289961278d565b85516128a48161252c565b81528587015187820152604080870151908201526060808701516128c78161252c565b908201526080868101519082015283529384019391850191612879565b50979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60008151808452602080850194506020840160005b838110156129405781516001600160a01b03168752958201959082019060010161291b565b509495945050505050565b83815260006020606060208401526129666060840186612906565b83810360408501528451808252602080870192019060005b8181101561299d57835160ff168352928401929184019160010161297e565b509098975050505050505050565b808201808211156103f9576103f961270d565b6000826129cd576129cd61273a565b500690565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156129fe57600080fd5b8151610eb181612679565b828152604060208201526000610c6e6040830184612906565b60006020808385031215612a3557600080fd5b82516001600160401b03811115612a4b57600080fd5b8301601f81018513612a5c57600080fd5b8051612a6a612850826127e5565b81815260059190911b82018301908381019087831115612a8957600080fd5b928401925b82841015611e3b57835182529284019290840190612a8e565b85815284602082015260a060408201526000612ac660a0830186612906565b6001600160a01b0394909416606083015250608001529392505050565b80820182811260008312801582168215821617156114e1576114e161270d565b80820260008212600160ff1b84141615612b1f57612b1f61270d565b81810583148215176103f9576103f961270d565b600082612b4257612b4261273a565b600160ff1b821460001984141615612b5c57612b5c61270d565b500590565b8181036000831280158383131683831282161715612b8157612b8161270d565b5092915050565b600081612b9757612b9761270d565b506000190190565b600060018201612bb157612bb161270d565b5060010190565b60005b83811015612bd3578181015183820152602001612bbb565b50506000910152565b60008251612bee818460208701612bb8565b9190910192915050565b6020815260008251806020840152612c17816040850160208701612bb8565b601f01601f1916919091016040019291505056fea2646970667358221220842ffb1bd7baf622cd274f314b352764231063d796317be53e94fa6d4e440e1064736f6c634300081800330000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000795a85cd543d0e2d29f7e11e33a20a38a4b5121e000000000000000000000000949185d3be66775ea648f4a306740ea9eff9c56700000000000000000000000098994a9a7a2570367554589189dc9772241650f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000007ed6fd046ef71e2a71092d1597bcebe578a57a76000000000000000000000000000000000000000000000000000000000000000a6c69717569642d59454c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046c59454c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000949185d3be66775ea648f4a306740ea9eff9c56700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000