0x608060405234801561001057600080fd5b50611397806100206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063afcff50f1161007c578063afcff50f14610286578063b2a02ff1146102b1578063d2593329146102c4578063dd62ed3e146102cc578063de7ea79d146102f7578063ffa1ad741461030a57600080fd5b806370a082311461022557806395d89b41146102455780639dc29fac1461024d578063a457c2d714610260578063a9059cbb1461027357600080fd5b806323b872dd116100ff57806323b872dd146101bd5780632ab4d052146101d0578063313ce567146101d957806339509351146101ff57806340c10f191461021257600080fd5b806306fdde031461013c578063095ea7b31461015a578063172f50a41461017d57806318160ddd1461019257806322f3e2d4146101a9575b600080fd5b61014461032e565b604051610151919061108d565b60405180910390f35b61016d6101683660046110fa565b6103bc565b6040519015158152602001610151565b61019061018b366004611126565b6103d2565b005b61019b60055481565b604051908152602001610151565b60075461016d90600160a01b900460ff1681565b61016d6101cb36600461113f565b6104ec565b61019b60065481565b6007546101ed90600160a81b900460ff1681565b60405160ff9091168152602001610151565b61016d61020d3660046110fa565b61055f565b6101906102203660046110fa565b61059b565b61019b610233366004611180565b60036020526000908152604090205481565b6101446105e1565b61019061025b3660046110fa565b6105ee565b61016d61026e3660046110fa565b610630565b61016d6102813660046110fa565b61068c565b600754610299906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b6101906102bf36600461113f565b610699565b6101906106e0565b61019b6102da3660046111a4565b600460209081526000928352604080842090915290825290205481565b610190610305366004611226565b6107f8565b610144604051806040016040528060058152602001640312e302e360dc1b81525081565b6001805461033b906112c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610367906112c1565b80156103b45780601f10610389576101008083540402835291602001916103b4565b820191906000526020600020905b81548152906001019060200180831161039757829003601f168201915b505050505081565b60006103c933848461099c565b50600192915050565b600760009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045891906112fc565b6001600160a01b0316336001600160a01b03161461048957604051634b98449160e11b815260040160405180910390fd5b600654818114156104ad57604051630333a68160e41b815260040160405180910390fd5b60408051828152602081018490527fc58cd6132bb46df23d468939c03dd023b74b509aaa6b04c39d5a6461c65963bd910160405180910390a150600655565b60006104f9848484610a4c565b6001600160a01b038416600090815260046020908152604080832033845290915290205460001981146105545782811015610547576040516303814af160e61b815260040160405180910390fd5b610554853385840361099c565b506001949350505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916103c9918590610596908690611319565b61099c565b6105a3610b42565b1580156105b557506105b3610c38565b155b156105d35760405163168504c160e21b815260040160405180910390fd5b6105dd8282610e3c565b5050565b6002805461033b906112c1565b6105f6610b42565b1580156106085750610606610c38565b155b156106265760405163848003b560e01b815260040160405180910390fd5b6105dd8282610f3b565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156106755760405163189dd6af60e31b815260040160405180910390fd5b610682338585840361099c565b5060019392505050565b60006103c9338484610a4c565b6106a1610b42565b1580156106b357506106b1610c38565b155b156106d0576040516249987f60e01b815260040160405180910390fd5b6106db838383610a4c565b505050565b600760009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801561072e57600080fd5b505afa158015610742573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076691906112fc565b6001600160a01b0316336001600160a01b03161461079757604051634b98449160e11b815260040160405180910390fd5b600754604051600160a01b90910460ff1615808252907f79e35d0afb37464963b458a448d257d695a4dc4406dc45df01e4c7b38e2732cb9060200160405180910390a160078054911515600160a01b0260ff60a01b19909216919091179055565b600054610100900460ff1680610811575060005460ff16155b6108785760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff1615801561089a576000805461ffff19166101011790555b856108b857604051636e83f50760e01b815260040160405180910390fd5b836108d6576040516330507cff60e11b815260040160405180910390fd5b60ff83166108f757604051634dc4784160e11b815260040160405180910390fd5b6001600160a01b03821661091e57604051637cb62f2b60e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b03841617905561094560018888610ff4565b5061095260028686610ff4565b506007805460ff60a01b1960ff8616600160a81b021661ffff60a01b1990911617600160a01b1790556000196006558015610993576000805461ff00191690555b50505050505050565b6001600160a01b0383166109c3576040516356fdae6560e11b815260040160405180910390fd5b6001600160a01b0382166109ea5760405163b2fa1ef360e01b815260040160405180910390fd5b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610a7357604051630240531760e41b815260040160405180910390fd5b6001600160a01b038216610a9a5760405163671d1add60e11b815260040160405180910390fd5b6001600160a01b03831660009081526003602052604090205481811015610ad457604051635dd58b8b60e01b815260040160405180910390fd5b6001600160a01b0380851660008181526003602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b349086815260200190565b60405180910390a350505050565b60075460405163c673bdaf60e01b81523360048201526000916001600160a01b03169063c673bdaf9060240160206040518083038186803b158015610b8657600080fd5b505afa158015610b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbe919061133f565b8015610c335750604051631a0dd00b60e01b81523060048201523390631a0dd00b9060240160206040518083038186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c33919061133f565b905090565b600080336001600160a01b03166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7457600080fd5b505afa158015610c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cac91906112fc565b60075460405163c673bdaf60e01b81526001600160a01b03808416600483015292935091169063c673bdaf9060240160206040518083038186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2b919061133f565b8015610da957506040516308a00b1f60e31b81523360048201526001600160a01b0382169063450058f89060240160206040518083038186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da9919061133f565b8015610e365750306001600160a01b0316336001600160a01b0316638230ecd66040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b91906112fc565b6001600160a01b0316145b91505090565b600754600160a01b900460ff16610e66576040516303127d9160e31b815260040160405180910390fd5b6001600160a01b038216610e8d5760405163c96c2a0b60e01b815260040160405180910390fd5b8060056000828254610e9f9190611319565b90915550506006546005541115610ec9576040516309e0f0fd60e31b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604081208054839290610ef1908490611319565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610f62576040516304fca6bd60e41b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090205481811015610f9c57604051630bba337f60e11b815260040160405180910390fd5b6001600160a01b03831660008181526003602090815260408083208686039055600580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a3f565b828054611000906112c1565b90600052602060002090601f0160209004810192826110225760008555611068565b82601f1061103b5782800160ff19823516178555611068565b82800160010185558215611068579182015b8281111561106857823582559160200191906001019061104d565b50611074929150611078565b5090565b5b808211156110745760008155600101611079565b600060208083528351808285015260005b818110156110ba5785810183015185820160400152820161109e565b818111156110cc576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146110f757600080fd5b50565b6000806040838503121561110d57600080fd5b8235611118816110e2565b946020939093013593505050565b60006020828403121561113857600080fd5b5035919050565b60008060006060848603121561115457600080fd5b833561115f816110e2565b9250602084013561116f816110e2565b929592945050506040919091013590565b60006020828403121561119257600080fd5b813561119d816110e2565b9392505050565b600080604083850312156111b757600080fd5b82356111c2816110e2565b915060208301356111d2816110e2565b809150509250929050565b60008083601f8401126111ef57600080fd5b50813567ffffffffffffffff81111561120757600080fd5b60208301915083602082850101111561121f57600080fd5b9250929050565b6000806000806000806080878903121561123f57600080fd5b863567ffffffffffffffff8082111561125757600080fd5b6112638a838b016111dd565b9098509650602089013591508082111561127c57600080fd5b5061128989828a016111dd565b909550935050604087013560ff811681146112a357600080fd5b915060608701356112b3816110e2565b809150509295509295509295565b600181811c908216806112d557607f821691505b602082108114156112f657634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561130e57600080fd5b815161119d816110e2565b6000821982111561133a57634e487b7160e01b600052601160045260246000fd5b500190565b60006020828403121561135157600080fd5b8151801515811461119d57600080fdfea2646970667358221220ee16ec22d5fd4b9f64f98c01b75b422ee79f5872d4109ade609577b3ea408d4164736f6c63430008090033