60806040526100106012600a61031b565b61001e9063478860c0610330565b60045561002d6012600a61031b565b61003b906307273ce0610330565b60055561004a6012600a61031b565b610058906307273ce0610330565b6006555f6008556005600955600f805460ff60a01b1916905534801561007c575f5ffd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c805473a91d34fbdc6e2c762f3015a19463bd285ec660bc6001600160a01b03199182168117909255600d8054821683179055600e8054821683179055600f805490911690911790556101136012600a61031b565b61012290640165a9e3c0610330565b335f9081526001602081815260408084209490945560039052828220819055308252828220819055600c546001600160a01b039081168352838320829055600d5481168352838320829055600e5481168352838320829055600f5416825291812082905573a91d34fbdc6e2c762f3015a19463bd285ec660bc90527fbb2e5c81979d55f60add7ad5e08a816dda7e51a357882a606f1c9ad40aa56314556101c63390565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6101fd6012600a61031b565b61020c90640165a9e3c0610330565b60405190815260200160405180910390a3610347565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156102715780850481111561025557610255610222565b600184161561026357908102905b60019390931c92800261023a565b935093915050565b5f8261028757506001610315565b8161029357505f610315565b81600181146102a957600281146102b3576102cf565b6001915050610315565b60ff8411156102c4576102c4610222565b50506001821b610315565b5060208310610133831016604e8410600b84101617156102f2575081810a610315565b6102fe5f198484610236565b805f190482111561031157610311610222565b0290505b92915050565b5f61032960ff841683610279565b9392505050565b808202811582820484141761031557610315610222565b611aed806103545f395ff3fe60806040526004361061014a575f3560e01c80638da5cb5b116100b3578063dd62ed3e1161006d578063dd62ed3e146103d1578063e0515dd914610415578063e139bc8014610434578063f2fde38b14610453578063f601646314610472578063f8b45b0514610491575f5ffd5b80638da5cb5b1461032357806395d89b411461033f578063a9059cbb1461036a578063b2c6bf1c14610389578063bcc32008146103a8578063c8c8ebe4146103bc575f5ffd5b8063313ce56711610104578063313ce5671461024b5780633304391a1461026657806349bd5a5e146102855780634e12cac2146102bc57806370a08231146102db578063715018a61461030f575f5ffd5b806301339c211461015557806306fdde031461016b578063095ea7b3146101b4578063111b3835146101e357806318160ddd1461020a57806323b872dd1461022c575f5ffd5b3661015157005b5f5ffd5b348015610160575f5ffd5b506101696104a6565b005b348015610176575f5ffd5b5060408051808201909152600f81526e466972737420537061636520446f6760881b60208201525b6040516101ab91906116de565b60405180910390f35b3480156101bf575f5ffd5b506101d36101ce366004611727565b61087c565b60405190151581526020016101ab565b3480156101ee575f5ffd5b50600854600954604080519283526020830191909152016101ab565b348015610215575f5ffd5b5061021e610892565b6040519081526020016101ab565b348015610237575f5ffd5b506101d3610246366004611751565b6108b3565b348015610256575f5ffd5b50604051601281526020016101ab565b348015610271575f5ffd5b5061016961028036600461178f565b610963565b348015610290575f5ffd5b50600b546102a4906001600160a01b031681565b6040516001600160a01b0390911681526020016101ab565b3480156102c7575f5ffd5b506101696102d63660046117b1565b6109d4565b3480156102e6575f5ffd5b5061021e6102f536600461178f565b6001600160a01b03165f9081526001602052604090205490565b34801561031a575f5ffd5b50610169610a47565b34801561032e575f5ffd5b505f546001600160a01b03166102a4565b34801561034a575f5ffd5b5060408051808201909152600381526212d55160ea1b602082015261019e565b348015610375575f5ffd5b506101d3610384366004611727565b610ab8565b348015610394575f5ffd5b506101696103a336600461178f565b610ac4565b3480156103b3575f5ffd5b50610169610b35565b3480156103c7575f5ffd5b5061021e60055481565b3480156103dc575f5ffd5b5061021e6103eb3660046117d1565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610420575f5ffd5b5061016961042f36600461178f565b610bf5565b34801561043f575f5ffd5b5061016961044e36600461178f565b610c66565b34801561045e575f5ffd5b5061016961046d36600461178f565b610cd7565b34801561047d575f5ffd5b5061016961048c366004611727565b610d09565b34801561049c575f5ffd5b5061021e60065481565b5f546001600160a01b031633146104d85760405162461bcd60e51b81526004016104cf90611808565b60405180910390fd5b600f54600160a01b900460ff16156105325760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016104cf565b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610594573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b8919061183d565b6001600160a01b031663c9c6539630600a5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610617573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b919061183d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610685573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a9919061183d565b600b80546001600160a01b0319166001600160a01b03928316179055600a80546106f29230929116906106de9060129061194f565b6106ed90640165a9e3c061195d565b610d4d565b600a546001600160a01b031663f305d7194730610723816001600160a01b03165f9081526001602052604090205490565b5f5f6107365f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561079c573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107c19190611974565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061199f565b50600f805460ff60a01b1916600160a01b179055436007556040517fe6828bb76e5e605316fe477efc63489f83854cebef07e4ad004ef24270c269e3905f90a1565b5f610888338484610d4d565b5060015b92915050565b5f61089f6012600a61194f565b6108ae90640165a9e3c061195d565b905090565b5f6108bf848484610e70565b6001600160a01b0384165f9081526002602090815260408083203384529091529020545f198114610958578281101561094b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016104cf565b6109588533858403610d4d565b506001949350505050565b5f546001600160a01b0316331461098c5760405162461bcd60e51b81526004016104cf90611808565b6001600160a01b0381166109b25760405162461bcd60e51b81526004016104cf906119be565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146109fd5760405162461bcd60e51b81526004016104cf90611808565b60088290556009819055610a136012600a61194f565b610a2290640165a9e3c061195d565b600555610a316012600a61194f565b610a4090640165a9e3c061195d565b6006555050565b5f546001600160a01b03163314610a705760405162461bcd60e51b81526004016104cf90611808565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f610888338484610e70565b5f546001600160a01b03163314610aed5760405162461bcd60e51b81526004016104cf90611808565b6001600160a01b038116610b135760405162461bcd60e51b81526004016104cf906119be565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016104cf90611808565b5f80546040516001600160a01b039091169047908381818185875af1925050503d805f8114610ba8576040519150601f19603f3d011682016040523d82523d5f602084013e610bad565b606091505b5050905080610bf25760405162461bcd60e51b815260206004820152601160248201527014995cd8dd59481155120819985a5b1959607a1b60448201526064016104cf565b50565b5f546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016104cf90611808565b6001600160a01b038116610c445760405162461bcd60e51b81526004016104cf906119be565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610c8f5760405162461bcd60e51b81526004016104cf90611808565b6001600160a01b038116610cb55760405162461bcd60e51b81526004016104cf906119be565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610d005760405162461bcd60e51b81526004016104cf90611808565b610bf2816111d6565b5f546001600160a01b03163314610d325760405162461bcd60e51b81526004016104cf90611808565b6001600160a01b039091165f90815260036020526040902055565b6001600160a01b038316610daf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104cf565b6001600160a01b038216610e105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104cf565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ed45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104cf565b5f8111610f3c5760405162461bcd60e51b815260206004820152603060248201527f45524332303a207472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016104cf565b6001600160a01b0383165f90815260036020526040812054158015610f7657506001600160a01b0383165f90815260036020526040902054155b156111c457600f54600160a01b900460ff16610fd45760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420656e61626c65642079657400000000000060448201526064016104cf565b60055482111561103b5760405162461bcd60e51b815260206004820152602c60248201527f5472616e73616374696f6e20616d6f756e74206578636565647320746865206d60448201526b185e1a5b5d5b481b1a5b5a5d60a21b60648201526084016104cf565b600b546001600160a01b0384811691161480159061106457506001600160a01b03831661dead14155b156110f6576006548261108b856001600160a01b03165f9081526001602052604090205490565b61109591906119ee565b11156110f65760405162461bcd60e51b815260206004820152602a60248201527f526563697069656e742077616c6c6574206578636565647320746865206d61786044820152691a5b5d5b481b1a5b5a5d60b21b60648201526084016104cf565b6007546111049060096119ee565b43101561113457600b546001600160a01b0385811691161461112757606361112a565b60635b60ff1690506111c4565b600b546001600160a01b039081169085160361115357506008546111c4565b600b546001600160a01b03908116908416036111c457305f908152600160205260409020546111846012600a61194f565b6111919062b71fb061195d565b8111156111be57600454838211156111a7578391505b808211156111b3578091505b6111bc82611294565b505b50506009545b6111d0848484846115e3565b50505050565b6001600160a01b03811661123b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104cf565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106112c7576112c7611a01565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561131e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611342919061183d565b8160018151811061135557611355611a01565b6001600160a01b039283166020918202929092010152600a5461137b9130911684610d4d565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906113b39085905f90869030904290600401611a15565b5f604051808303815f87803b1580156113ca575f5ffd5b505af11580156113dc573d5f5f3e3d5ffd5b504792505f9150606490506113f283600a61195d565b6113fc9190611a85565b90505f606461140c84601e61195d565b6114169190611a85565b90505f606461142685601e61195d565b6114309190611a85565b90505f606461144086601e61195d565b61144a9190611a85565b600c546040519192505f916001600160a01b039091169086908381818185875af1925050503d805f8114611499576040519150601f19603f3d011682016040523d82523d5f602084013e61149e565b606091505b5050600d546040519192506001600160a01b03169085905f81818185875af1925050503d805f81146114eb576040519150601f19603f3d011682016040523d82523d5f602084013e6114f0565b606091505b5050600e546040519192506001600160a01b03169084905f81818185875af1925050503d805f811461153d576040519150601f19603f3d011682016040523d82523d5f602084013e611542565b606091505b5050600f546040519192506001600160a01b03169083905f81818185875af1925050503d805f811461158f576040519150601f19603f3d011682016040523d82523d5f602084013e611594565b606091505b505080915050806115d95760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016104cf565b5050505050505050565b5f60646115f0838561195d565b6115fa9190611a85565b90505f6116078285611aa4565b6001600160a01b0387165f90815260016020526040812080549293508692909190611633908490611aa4565b90915550506001600160a01b0385165f908152600160205260408120805483929061165f9084906119ee565b9091555050305f90815260016020526040812080548492906116829084906119ee565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116ce91815260200190565b60405180910390a3505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610bf2575f5ffd5b5f5f60408385031215611738575f5ffd5b823561174381611713565b946020939093013593505050565b5f5f5f60608486031215611763575f5ffd5b833561176e81611713565b9250602084013561177e81611713565b929592945050506040919091013590565b5f6020828403121561179f575f5ffd5b81356117aa81611713565b9392505050565b5f5f604083850312156117c2575f5ffd5b50508035926020909101359150565b5f5f604083850312156117e2575f5ffd5b82356117ed81611713565b915060208301356117fd81611713565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561184d575f5ffd5b81516117aa81611713565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156118a75780850481111561188b5761188b611858565b600184161561189957908102905b60019390931c928002611870565b935093915050565b5f826118bd5750600161088c565b816118c957505f61088c565b81600181146118df57600281146118e957611905565b600191505061088c565b60ff8411156118fa576118fa611858565b50506001821b61088c565b5060208310610133831016604e8410600b8410161715611928575081810a61088c565b6119345f19848461186c565b805f190482111561194757611947611858565b029392505050565b5f6117aa60ff8416836118af565b808202811582820484141761088c5761088c611858565b5f5f5f60608486031215611986575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156119af575f5ffd5b815180151581146117aa575f5ffd5b602080825260169082015275416464726573732063616e6e6f74206265207a65726f60501b604082015260600190565b8082018082111561088c5761088c611858565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015611a655783516001600160a01b0316835260209384019390920191600101611a3e565b50506001600160a01b039590951660608401525050608001529392505050565b5f82611a9f57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561088c5761088c61185856fea2646970667358221220da01dc59c560ba2829a7c492da7a1dd99fd33e8c21450c4ea8f317ef543964cf64736f6c634300081b0033