60806040526000600c556000600d553480156200001b57600080fd5b506040516200234638038062002346833981810160405260a08110156200004157600080fd5b508051602082015160408301516060840151608090940151600080546001600160a01b0319166001600160a01b03851617905592939192909190338080620000ba576040805162461bcd60e51b8152602060048201526007602482015266041646d696e20360cc1b604482015290519081900360640190fd5b600380546001600160a01b03199081166001600160a01b039384161790915560098890556008805490911691861691909117905550600a829055600b819055620001108362000131602090811b6200211f17901c565b62000126846200013160201b6200211f1760201c565b505050505062000155565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6121e180620001656000396000f3fe608060405234801561001057600080fd5b50600436106102255760003560e01c80637acb77571161012a578063ac8a584a116100bd578063df136d651161008c578063ebe2b12b11610071578063ebe2b12b14610550578063f851a44014610558578063fce880001461056057610225565b8063df136d6514610540578063e9fad8ee1461054857610225565b8063ac8a584a146104de578063c8f33c9114610504578063cd3daf9d1461050c578063ce56c4541461051457610225565b80638b876347116100f95780638b876347146104645780638da588971461048a5780639870d7fe146104925780639e5914da146104b857610225565b80637acb7757146104025780637acc86781461042e5780637b0a47ee1461045457806380faa57d1461045c57610225565b80633c6b16ab116101bd57806353220a421161018c57806370a082311161017157806370a08231146103ae57806375829def146103d457806377f50f97146103fa57610225565b806353220a421461039e5780635be4d800146103a657610225565b80633c6b16ab1461033b5780633ccdbb28146103585780633d18b9121461038e57806351ed6a301461039657610225565b806318160ddd116101f957806318160ddd146102b457806326782247146102bc57806327a099d8146102c45780632e1a7d4d1461031c57610225565b80628cc2621461022a5780630700037d146102625780630fb5a6b4146102885780631441a5a914610290575b600080fd5b6102506004803603602081101561024057600080fd5b50356001600160a01b0316610568565b60408051918252519081900360200190f35b6102506004803603602081101561027857600080fd5b50356001600160a01b031661059b565b6102506105ad565b6102986105b3565b604080516001600160a01b039092168252519081900360200190f35b6102506105c2565b6102986105c9565b6102cc6105d8565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b6103396004803603602081101561033257600080fd5b503561063a565b005b6103396004803603602081101561035157600080fd5b503561077c565b6103396004803603606081101561036e57600080fd5b506001600160a01b038135811691602081013591604090910135166108a3565b610339610a4b565b610298610d02565b610250610d11565b610250610d16565b610250600480360360208110156103c457600080fd5b50356001600160a01b0316610d1c565b610339600480360360208110156103ea57600080fd5b50356001600160a01b0316610d37565b610339610e67565b6103396004803603604081101561041857600080fd5b50803590602001356001600160a01b0316610f51565b6103396004803603602081101561044457600080fd5b50356001600160a01b031661101c565b610250611194565b61025061119a565b6102506004803603602081101561047a57600080fd5b50356001600160a01b03166111ad565b6102506111bf565b610339600480360360208110156104a857600080fd5b50356001600160a01b03166111c5565b610339600480360360208110156104ce57600080fd5b50356001600160a01b03166113c9565b610339600480360360208110156104f457600080fd5b50356001600160a01b0316611462565b6102506116e5565b6102506116eb565b6103396004803603604081101561052a57600080fd5b50803590602001356001600160a01b0316611745565b61025061184a565b610339611850565b61025061186b565b610298611871565b610298611880565b60006105956064610589606361057d8661188f565b9063ffffffff61190716565b9063ffffffff61196716565b92915050565b60116020526000908152604090205481565b600b5481565b6012546001600160a01b031681565b6001545b90565b6004546001600160a01b031681565b6060600680548060200260200160405190810160405280929190818152602001828054801561063057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610612575b5050505050905090565b336106436116eb565b600f5561064e61119a565b600e556001600160a01b038116156106955761066981610568565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a544210156106ec576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008211610741576040805162461bcd60e51b815260206004820152601160248201527f43616e6e6f742077697468647261772030000000000000000000000000000000604482015290519081900360640190fd5b61074a826119a9565b610753336119f2565b600054610770906001600160a01b0316338463ffffffff611a6316565b610778610a4b565b5050565b6003546001600160a01b031633146107db576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006107e56116eb565b600f556107f061119a565b600e556001600160a01b038116156108375761080b81610568565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600b5461084b90839063ffffffff61196716565b600d55600a54600e819055600b54610869919063ffffffff611ae316565b600c556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b6003546001600160a01b03163314610902576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff1615610970576040805162461bcd60e51b815260206004820152601d60248201527f666f7262696420746f207769746864726177207468617420746f6b656e000000604482015290519081900360640190fd5b826001600160a01b031663a9059cbb82846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156109d057600080fd5b505af11580156109e4573d6000803e3d6000fd5b505050506040513d60208110156109fa57600080fd5b5050604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b33610a546116eb565b600f55610a5f61119a565b600e556001600160a01b03811615610aa657610a7a81610568565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a54421015610afd576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b083361188f565b9050801561077857336000908152601160205260408120819055610b38606461058984606363ffffffff61190716565b90506000610b4c838363ffffffff611b3d16565b600854909150610b6c906001600160a01b0316338563ffffffff611a6316565b60408051848152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a26012546000906001600160a01b031615610c4957601254604080517f4a9fefc700000000000000000000000000000000000000000000000000000000815233600482015290516001600160a01b0390921691634a9fefc791602480820192602092909190829003018186803b158015610c1a57600080fd5b505afa158015610c2e573d6000803e3d6000fd5b505050506040513d6020811015610c4457600080fd5b505190505b6001600160a01b03811615610c7a57600854610c75906001600160a01b0316828463ffffffff611a6316565b610cfb565b600854604080517f42966c680000000000000000000000000000000000000000000000000000000081526004810185905290516001600160a01b039092169182916342966c6891602480830192600092919082900301818387803b158015610ce157600080fd5b505af1158015610cf5573d6000803e3d6000fd5b50505050505b5050505050565b6000546001600160a01b031681565b600181565b60095481565b6001600160a01b031660009081526002602052604090205490565b6003546001600160a01b03163314610d96576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610df1576040805162461bcd60e51b815260206004820152600b60248201527f4e65772061646d696e2030000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6004546001600160a01b03163314610ec6576040805162461bcd60e51b815260206004820152600b60248201527f6e6f742070656e64696e67000000000000000000000000000000000000000000604482015290519081900360640190fd5b600454600354604080516001600160a01b03938416815292909116602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a160048054600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b33610f5a6116eb565b600f55610f6561119a565b600e556001600160a01b03811615610fac57610f8081610568565b6001600160a01b038216600090815260116020908152604080832093909355600f546010909152919020555b600a54421015611003576040805162461bcd60e51b815260206004820152600960248201527f6e6f742073746172740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61100d8333611b7f565b6110178383611c02565b505050565b6003546001600160a01b0316331461107b576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166110d6576040805162461bcd60e51b815260206004820152600760248201527f41646d696e203000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038316815290517f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc409181900360200190a1600354604080516001600160a01b038085168252909216602083015280517f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed9281900390910190a1600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600d5481565b60006111a842600c54611d37565b905090565b60106020526000908152604090205481565b600a5481565b6003546001600160a01b03163314611224576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1615611292576040805162461bcd60e51b815260206004820152600f60248201527f4f70657261746f72206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6006546032116112e9576040805162461bcd60e51b815260206004820152600d60248201527f4d6178206f70657261746f727300000000000000000000000000000000000000604482015290519081900360640190fd5b604080516001600160a01b03831681526001602082015281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a16001600160a01b0316600081815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b6003546001600160a01b03163314611428576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546001600160a01b031633146114c1576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205460ff1661152e576040805162461bcd60e51b815260206004820152600c60248201527f4e6f74206f70657261746f720000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b60065481101561077857816001600160a01b03166006828154811061158e57fe5b6000918252602090912001546001600160a01b031614156116dd57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106115d957fe5b600091825260209091200154600680546001600160a01b0390921691839081106115ff57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600680548061163857fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909201909255604080516001600160a01b03861681529182019290925281517f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b929181900390910190a1610778565b60010161156d565b600e5481565b6000601354600014156117015750600f546105c6565b6111a8611736601354610589670de0b6b3a764000061057d600d5461057d600e5461172a61119a565b9063ffffffff611b3d16565b600f549063ffffffff611ae316565b6003546001600160a01b031633146117a4576040805162461bcd60e51b815260206004820152600a60248201527f4f6e6c792061646d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d80600081146117ef576040519150601f19603f3d011682016040523d82523d6000602084013e6117f4565b606091505b505090508061180257600080fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b600f5481565b61186161185c33610d1c565b61063a565b611869610a4b565b565b600c5481565b6003546001600160a01b031681565b6008546001600160a01b031681565b6001600160a01b038116600090815260116020908152604080832054601090925282205461059591906118fb90670de0b6b3a764000090610589906118d69061172a6116eb565b6001600160a01b0388166000908152601460205260409020549063ffffffff61190716565b9063ffffffff611ae316565b60008261191657506000610595565b8282028284828161192357fe5b04146119605760405162461bcd60e51b81526004018080602001828103825260218152602001806121626021913960400191505060405180910390fd5b9392505050565b600061196083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d4d565b6001546119bc908263ffffffff611b3d16565b600155336000908152600260205260409020546119df908263ffffffff611b3d16565b3360009081526002602052604090205550565b6001600160a01b038116600090815260146020526040902054601354611a1d9163ffffffff611b3d16565b6013556000611a2b82610d1c565b6001600160a01b0383166000908152601460205260409020819055601354909150611a5c908263ffffffff611ae316565b6013555050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611017908490611def565b600082820183811015611960576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061196083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fcb565b600954611b8f836118fb84610d1c565b111580611bb15750600a54611bad9062093a8063ffffffff611ae316565b4210155b610778576040805162461bcd60e51b815260206004820152601260248201527f746f6b656e206361702065786365656465640000000000000000000000000000604482015290519081900360640190fd5b60008211611c57576040805162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b652030000000000000000000000000000000000000604482015290519081900360640190fd5b611c6082612025565b611c69336119f2565b600054611c87906001600160a01b031633308563ffffffff61205b16565b6012546001600160a01b031615801590611ca957506001600160a01b03811615155b1561077857601254604080517fbbddaca30000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0384811660248301529151919092169163bbddaca391604480830192600092919082900301818387803b158015611d1b57600080fd5b505af1158015611d2f573d6000803e3d6000fd5b505050505050565b6000818310611d465781611960565b5090919050565b60008183611dd95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d9e578181015183820152602001611d86565b50505050905090810190601f168015611dcb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611de557fe5b0495945050505050565b611e01826001600160a01b03166120e3565b611e52576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611eae57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611e71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f10576040519150601f19603f3d011682016040523d82523d6000602084013e611f15565b606091505b509150915081611f6c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611fc557808060200190516020811015611f8857600080fd5b5051611fc55760405162461bcd60e51b815260040180806020018281038252602a815260200180612183602a913960400191505060405180910390fd5b50505050565b6000818484111561201d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d9e578181015183820152602001611d86565b505050900390565b600154612038908263ffffffff611ae316565b600155336000908152600260205260409020546119df908263ffffffff611ae316565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611fc5908590611def565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061211757508115155b949350505050565b6001600160a01b0316600090815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905556fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820786f801545ea316257ff645e39c77dc903523968c6848e7b3f8e8f98bfaa831264736f6c6343000511003200000000000000000000000000000000000000000000008cf23f909c0fa00000000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f000000000000000000000000db78f97b26757330bedc2b4d9729c3e4c4560736000000000000000000000000000000000000000000000000000000005f9819d00000000000000000000000000000000000000000000000000000000000093a80