60806040526000600855600060095534801561001a57600080fd5b50604051611968380380611968833981810160405260a081101561003d57600080fd5b508051602082015160408301516060840151608090940151929391929091908080836100706001600160e01b0361017616565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600480546001600160a01b0319166001600160a01b03928316179055811661012b576040805162461bcd60e51b815260206004820152601e60248201527f6e65772073746f726167652073686f756c646e277420626520656d7074790000604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b03938416179091556006805482169883169890981790975560008054909716951694909417909455506007555061017a9050565b3390565b6117df806101896000396000f3fe608060405234801561001057600080fd5b506004361061019e5760003560e01c80638b876347116100f4578063cd3daf9d116100a2578063f2fde38b11610071578063f2fde38b146103a2578063f77c4791146103c8578063f7c618c1146103d0578063fa9389a2146103d85761019e565b8063cd3daf9d14610382578063df136d651461038a578063e9fad8ee14610392578063ebe2b12b1461039a5761019e565b80638b876347146102e55780638da5cb5b1461030b5780638f32d59b146103135780639137c1a71461032f578063975057e714610355578063a694fc3a1461035d578063c8f33c911461037a5761019e565b80633d18b912116101515780633d18b912146102735780635aa6e6751461027b5780635fcbd2851461029f57806370a08231146102a7578063715018a6146102cd5780637b0a47ee146102d557806380faa57d146102dd5761019e565b80628cc262146101a35780630700037d146101db5780630d68b761146102015780630fb5a6b41461022957806318160ddd146102315780632e1a7d4d146102395780633c6b16ab14610256575b600080fd5b6101c9600480360360208110156101b957600080fd5b50356001600160a01b03166103fe565b60408051918252519081900360200190f35b6101c9600480360360208110156101f157600080fd5b50356001600160a01b0316610484565b6102276004803603602081101561021757600080fd5b50356001600160a01b0316610496565b005b6101c9610511565b6101c9610517565b6102276004803603602081101561024f57600080fd5b503561051e565b6102276004803603602081101561026c57600080fd5b5035610605565b610227610781565b61028361092c565b604080516001600160a01b039092168252519081900360200190f35b6102836109a2565b6101c9600480360360208110156102bd57600080fd5b50356001600160a01b03166109b1565b6102276109cc565b6101c9610a6f565b6101c9610a75565b6101c9600480360360208110156102fb57600080fd5b50356001600160a01b0316610a88565b610283610a9a565b61031b610aa9565b604080519115158252519081900360200190f35b6102276004803603602081101561034557600080fd5b50356001600160a01b0316610acf565b610283610c05565b6102276004803603602081101561037357600080fd5b5035610c14565b6101c9610cf8565b6101c9610cfe565b6101c9610d52565b610227610d58565b6101c9610d73565b610227600480360360208110156103b857600080fd5b50356001600160a01b0316610d79565b610283610dde565b610283610e23565b610227600480360360208110156103ee57600080fd5b50356001600160a01b0316610e32565b6001600160a01b0381166000908152600d6020908152604080832054600c90925282205461047e919061047290670de0b6b3a7640000906104669061045190610445610cfe565b9063ffffffff6110ba16565b61045a886109b1565b9063ffffffff61110316565b9063ffffffff61115c16565b9063ffffffff61119e16565b92915050565b600d6020526000908152604090205481565b61049e610aa9565b6104ef576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60075481565b6001545b90565b33610527610cfe565b600b55610532610a75565b600a556001600160a01b038116156105795761054d816103fe565b6001600160a01b0382166000908152600d6020908152604080832093909355600b54600c909152919020555b600082116105c2576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6105cb826111f8565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6004546001600160a01b0316610619611259565b6001600160a01b03161461065e5760405162461bcd60e51b81526004018080602001828103825260218152602001806117606021913960400191505060405180910390fd5b6000610668610cfe565b600b55610673610a75565b600a556001600160a01b038116156106ba5761068e816103fe565b6001600160a01b0382166000908152600d6020908152604080832093909355600b54600c909152919020555b60085442106106df576007546106d790839063ffffffff61115c16565b60095561072e565b6008546000906106f5904263ffffffff6110ba16565b9050600061070e6009548361110390919063ffffffff16565b60075490915061072890610466868463ffffffff61119e16565b60095550505b42600a819055600754610747919063ffffffff61119e16565b6008556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3361078a610cfe565b600b55610795610a75565b600a556001600160a01b038116156107dc576107b0816103fe565b6001600160a01b0382166000908152600d6020908152604080832093909355600b54600c909152919020555b60006107e7336103fe565b9050801561092857336000818152600d6020526040812055321480610894575061080f610dde565b6001600160a01b03166330e412ad336040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561086657600080fd5b505af115801561087a573d6000803e3d6000fd5b505050506040513d602081101561089057600080fd5b5051155b156108f1576006546108b6906001600160a01b0316338363ffffffff61125d16565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a2610928565b60408051828152905133917f3c053e6b7030f90e85c5a23cdadc6806d9e2fc865df1be2a1261580a1ecd1da9919081900360200190a25b5050565b60055460408051635aa6e67560e01b815290516000926001600160a01b031691635aa6e675916004808301926020929190829003018186803b15801561097157600080fd5b505afa158015610985573d6000803e3d6000fd5b505050506040513d602081101561099b57600080fd5b5051905090565b6000546001600160a01b031681565b6001600160a01b031660009081526002602052604090205490565b6109d4610aa9565b610a25576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b60095481565b6000610a83426008546112af565b905090565b600c6020526000908152604090205481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610ac0611259565b6001600160a01b031614905090565b600554604080516337b87c3960e21b815233600482015290516001600160a01b039092169163dee1f0e491602480820192602092909190829003018186803b158015610b1a57600080fd5b505afa158015610b2e573d6000803e3d6000fd5b505050506040513d6020811015610b4457600080fd5b5051610b88576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6001600160a01b038116610be3576040805162461bcd60e51b815260206004820152601e60248201527f6e65772073746f726167652073686f756c646e277420626520656d7074790000604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b33610c1d610cfe565b600b55610c28610a75565b600a556001600160a01b03811615610c6f57610c43816103fe565b6001600160a01b0382166000908152600d6020908152604080832093909355600b54600c909152919020555b60008211610cb5576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b610cbe826112c5565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b600a5481565b6000610d08610517565b610d155750600b5461051b565b610a83610d43610d23610517565b610466670de0b6b3a764000061045a60095461045a600a54610445610a75565b600b549063ffffffff61119e16565b600b5481565b610d69610d64336109b1565b61051e565b610d71610781565b565b60085481565b610d81610aa9565b610dd2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ddb81611327565b50565b6005546040805163f77c479160e01b815290516000926001600160a01b03169163f77c4791916004808301926020929190829003018186803b15801561097157600080fd5b6006546001600160a01b031681565b80610e3b610cfe565b600b55610e46610a75565b600a556001600160a01b03811615610e8d57610e61816103fe565b6001600160a01b0382166000908152600d6020908152604080832093909355600b54600c909152919020555b600554604080516337b87c3960e21b815233600482015290516001600160a01b039092169163dee1f0e491602480820192602092909190829003018186803b158015610ed857600080fd5b505afa158015610eec573d6000803e3d6000fd5b505050506040513d6020811015610f0257600080fd5b5051610f46576040805162461bcd60e51b815260206004820152600e60248201526d4e6f7420676f7665726e616e636560901b604482015290519081900360640190fd5b6000610f51836103fe565b905080156110b5576001600160a01b0383166000818152600d6020526040812055610f7b906113c8565b158061100f5750610f8a610dde565b6001600160a01b03166330e412ad846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b5051155b1561107557600654611031906001600160a01b0316848363ffffffff61125d16565b6040805182815290516001600160a01b038516917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a26110b5565b6040805182815290516001600160a01b038516917f3c053e6b7030f90e85c5a23cdadc6806d9e2fc865df1be2a1261580a1ecd1da9919081900360200190a25b505050565b60006110fc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611404565b9392505050565b6000826111125750600061047e565b8282028284828161111f57fe5b04146110fc5760405162461bcd60e51b815260040180806020018281038252602181526020018061173f6021913960400191505060405180910390fd5b60006110fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061149b565b6000828201838110156110fc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60015461120b908263ffffffff6110ba16565b6001553360009081526002602052604090205461122e908263ffffffff6110ba16565b336000818152600260205260408120929092559054610ddb916001600160a01b03909116908361125d565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110b5908490611500565b60008183106112be57816110fc565b5090919050565b6001546112d8908263ffffffff61119e16565b600155336000908152600260205260409020546112fb908263ffffffff61119e16565b336000818152600260205260408120929092559054610ddb916001600160a01b039091169030846116be565b6001600160a01b03811661136c5760405162461bcd60e51b81526004018080602001828103825260268152602001806117196026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906113fc5750808214155b949350505050565b600081848411156114935760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611458578181015183820152602001611440565b50505050905090810190601f1680156114855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836114ea5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611458578181015183820152602001611440565b5060008385816114f657fe5b0495945050505050565b611512826001600160a01b03166113c8565b611563576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106115a15780518252601f199092019160209182019101611582565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611603576040519150601f19603f3d011682016040523d82523d6000602084013e611608565b606091505b50915091508161165f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156116b85780806020019051602081101561167b57600080fd5b50516116b85760405162461bcd60e51b815260040180806020018281038252602a815260200180611781602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526116b890859061150056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158209d4858b87ea823c49b38cb5d67029cb2c1b85e01e040f650bab415ca6297eade64736f6c63430005100032000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d000000000000000000000000c3f7ffb5d5869b3ade9448d094d81b0521e8326f0000000000000000000000000000000000000000000000000000000000093a80000000000000000000000000f00dd244228f51547f0563e60bca65a30fbf5f7f000000000000000000000000c95cbe4ca30055c787cb784be99d6a8494d0d197