60806040523480156200001157600080fd5b50604051620011a4380380620011a4833981016040819052620000349162000128565b80604051806040016040528060078152602001665265667567656560c81b8152506040518060400160405280600381526020016252464760e81b8152508160039081620000829190620001ff565b506004620000918282620001ff565b5050506001600160a01b038116620000c357604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ce81620000d6565b5050620002cb565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200013b57600080fd5b81516001600160a01b03811681146200015357600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018557607f821691505b602082108103620001a657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001fa57600081815260208120601f850160051c81016020861015620001d55750805b601f850160051c820191505b81811015620001f657828155600101620001e1565b5050505b505050565b81516001600160401b038111156200021b576200021b6200015a565b62000233816200022c845462000170565b84620001ac565b602080601f8311600181146200026b5760008415620002525750858301515b600019600386901b1c1916600185901b178555620001f6565b600085815260208120601f198616915b828110156200029c578886015182559484019460019091019084016200027b565b5085821015620002bb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610ec980620002db6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063810bf024116100c3578063cf456ae71161007c578063cf456ae7146102a9578063cfa9554b146102bc578063dd62ed3e146102c4578063f2fde38b146102fd578063f46eccc414610310578063f82ee7561461033357600080fd5b8063810bf0241461024e5780638965fb6e146102575780638da5cb5b1461026057806395d89b411461027b578063a44b47f714610283578063a9059cbb1461029657600080fd5b806340c10f191161011557806340c10f19146101e7578063439de419146101fa57806346c7b2981461020d57806370a0823114610215578063715018a61461023e578063803871a21461024657600080fd5b806306fdde031461015d578063095ea7b31461017b5780630acbdb5f1461019e57806318160ddd146101b357806323b872dd146101c5578063313ce567146101d8575b600080fd5b61016561033c565b6040516101729190610c5f565b60405180910390f35b61018e610189366004610cc9565b6103ce565b6040519015158152602001610172565b6101b16101ac366004610cc9565b6103e8565b005b6002545b604051908152602001610172565b61018e6101d3366004610cf3565b610507565b60405160128152602001610172565b6101b16101f5366004610cc9565b61052b565b6101b1610208366004610cc9565b610644565b6101b761074e565b6101b7610223366004610d2f565b6001600160a01b031660009081526020819052604090205490565b6101b1610774565b6101b7610788565b6101b760075481565b6101b760085481565b6005546040516001600160a01b039091168152602001610172565b6101656107a1565b6101b7680a18f07d736b90be55601d1b81565b61018e6102a4366004610cc9565b6107b0565b6101b16102b7366004610d51565b6107be565b6101b7610865565b6101b76102d2366004610d8d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101b161030b366004610d2f565b61087e565b61018e61031e366004610d2f565b60066020526000908152604090205460ff1681565b6101b760095481565b60606003805461034b90610dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461037790610dc0565b80156103c45780601f10610399576101008083540402835291602001916103c4565b820191906000526020600020905b8154815290600101906020018083116103a757829003601f168201915b5050505050905090565b6000336103dc8185856108bc565b60019150505b92915050565b6103f06108ce565b6001600160a01b03821661041f5760405162461bcd60e51b815260040161041690610dfa565b60405180910390fd5b600a610438680a18f07d736b90be55601d1b6001610e47565b6104429190610e5e565b816008546104509190610e80565b111561049e5760405162461bcd60e51b815260206004820152601b60248201527f5246473a2061697264726f7020706f6f6c2065786861757374656400000000006044820152606401610416565b80600860008282546104b09190610e80565b909155506104c0905082826108fb565b816001600160a01b03167f38c8c17876268e5b06c271b7cda4e391a326d934ed2d97e0a1bd00e64135ec4d826040516104fb91815260200190565b60405180910390a25050565b600033610515858285610931565b6105208585856109af565b506001949350505050565b3360009081526006602052604090205460ff166105795760405162461bcd60e51b815260206004820152600c60248201526b6f6e6c79206d696e7465727360a01b6044820152606401610416565b6001600160a01b03821661059f5760405162461bcd60e51b815260040161041690610dfa565b600a6105b8680a18f07d736b90be55601d1b6006610e47565b6105c29190610e5e565b816007546105d09190610e80565b111561061e5760405162461bcd60e51b815260206004820152601a60248201527f5246473a206d696e696e6720706f6f6c206578686175737465640000000000006044820152606401610416565b80600760008282546106309190610e80565b90915550610640905082826108fb565b5050565b61064c6108ce565b6001600160a01b0382166106725760405162461bcd60e51b815260040161041690610dfa565b600a61068b680a18f07d736b90be55601d1b6003610e47565b6106959190610e5e565b816009546106a39190610e80565b11156106f15760405162461bcd60e51b815260206004820152601d60248201527f5246473a206c697175696469747920706f6f6c206578686175737465640000006044820152606401610416565b80600960008282546107039190610e80565b90915550610713905082826108fb565b816001600160a01b03167f4a4c5f2dd702d2000740cccf71da029c75cf722b2cf2e3b1d50524c1820b2b82826040516104fb91815260200190565b600a610767680a18f07d736b90be55601d1b6001610e47565b6107719190610e5e565b81565b61077c6108ce565b6107866000610a0e565b565b600a610767680a18f07d736b90be55601d1b6006610e47565b60606004805461034b90610dc0565b6000336103dc8185856109af565b6107c66108ce565b6001600160a01b03821661080d5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21036b4b73a32b960911b6044820152606401610416565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f583b0aa0e528532caf4b907c11d7a8158a122fe2a6fb80cd9b09776ebea8d92d91016104fb565b600a610767680a18f07d736b90be55601d1b6003610e47565b6108866108ce565b6001600160a01b0381166108b057604051631e4fbdf760e01b815260006004820152602401610416565b6108b981610a0e565b50565b6108c98383836001610a60565b505050565b6005546001600160a01b031633146107865760405163118cdaa760e01b8152336004820152602401610416565b6001600160a01b0382166109255760405163ec442f0560e01b815260006004820152602401610416565b61064060008383610b35565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146109a9578181101561099a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610416565b6109a984848484036000610a60565b50505050565b6001600160a01b0383166109d957604051634b637e8f60e11b815260006004820152602401610416565b6001600160a01b038216610a035760405163ec442f0560e01b815260006004820152602401610416565b6108c9838383610b35565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416610a8a5760405163e602df0560e01b815260006004820152602401610416565b6001600160a01b038316610ab457604051634a1406b160e11b815260006004820152602401610416565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156109a957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2791815260200190565b60405180910390a350505050565b6001600160a01b038316610b60578060026000828254610b559190610e80565b90915550610bd29050565b6001600160a01b03831660009081526020819052604090205481811015610bb35760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610416565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610bee57600280548290039055610c0d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c5291815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610c8c57858101830151858201604001528201610c70565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cc457600080fd5b919050565b60008060408385031215610cdc57600080fd5b610ce583610cad565b946020939093013593505050565b600080600060608486031215610d0857600080fd5b610d1184610cad565b9250610d1f60208501610cad565b9150604084013590509250925092565b600060208284031215610d4157600080fd5b610d4a82610cad565b9392505050565b60008060408385031215610d6457600080fd5b610d6d83610cad565b915060208301358015158114610d8257600080fd5b809150509250929050565b60008060408385031215610da057600080fd5b610da983610cad565b9150610db760208401610cad565b90509250929050565b600181811c90821680610dd457607f821691505b602082108103610df457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526017908201527f5246473a20696e76616c696420746f2061646472657373000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103e2576103e2610e31565b600082610e7b57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103e2576103e2610e3156fea26469706673582212207fbfda0c5933112cff0598c1ef0681392fb1855e199f47e0bf43458b4095161d64736f6c63430008140033000000000000000000000000138961927caf740115357b4d80ed6282cf8c0d6c