0x608060405261271060025560fa6004556005805464ffffffffff191664ce77acc30017905534801561003057600080fd5b50600160005561003f33610044565b610096565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612ab5806100a56000396000f3fe6080604052600436106100e85760003560e01c80637f089d8f1161008a578063a3f0939b11610059578063a3f0939b14610241578063ad4b9cfb14610261578063f2fde38b14610322578063fb6064ae1461034257600080fd5b80637f089d8f146101c65780638da5cb5b146101e65780638de932221461020e57806398590ef91461022157600080fd5b80636b3fc31a116100c65780636b3fc31a146101695780636d343495146101895780636ea8bc101461019c578063715018a6146101b157600080fd5b806312e8e2c3146100ed57806350ab3f811461010f5780635c8177a214610145575b600080fd5b3480156100f957600080fd5b5061010d6101083660046127b3565b610362565b005b34801561011b57600080fd5b5061012f61012a3660046125b8565b610449565b60405161013c919061283b565b60405180910390f35b34801561015157600080fd5b5061015b60025481565b60405190815260200161013c565b34801561017557600080fd5b5061010d61018436600461277b565b610675565b61010d610197366004612622565b610700565b3480156101a857600080fd5b5060045461015b565b3480156101bd57600080fd5b5061010d610ec3565b3480156101d257600080fd5b5061010d6101e13660046125b8565b610f29565b3480156101f257600080fd5b506001546040516001600160a01b03909116815260200161013c565b61010d61021c3660046125f7565b611038565b34801561022d57600080fd5b5061010d61023c3660046125f7565b611a7b565b34801561024d57600080fd5b5061010d61025c366004612683565b611dfe565b34801561026d57600080fd5b5061031561027c3660046127b3565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260066020908152604091829020825160c0810184528154815260018201546001600160a01b0390811693820193909352600282015493810193909352600381015482166060840152600481015490911660808301526005015460a082015290565b60405161013c91906128cf565b34801561032e57600080fd5b5061010d61033d3660046125b8565b6120e8565b34801561034e57600080fd5b5061010d61035d366004612683565b6121ca565b6001546001600160a01b031633146103c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600280546103cf91906129bf565b8111156104445760405162461bcd60e51b815260206004820152603260248201527f736574506c6174666f726d4665653a206665652073686f756c64206265206c6560448201527f7373206f7220657175616c20746f20353025000000000000000000000000000060648201526084016103b8565b600455565b6060600061045660035490565b905060008060005b838110156104c2576001600160a01b0386166006600061047f8460016129a7565b81526020810191909152604001600020600301546001600160a01b031614156104b0576104ad6001846129a7565b92505b806104ba81612a15565b91505061045e565b5060008267ffffffffffffffff8111156104ec57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561054c57816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a0820152825260001990920191018161050a5790505b50905060005b8481101561066b576001600160a01b038716600660006105738460016129a7565b81526020810191909152604001600020600301546001600160a01b031614156106595760006006816105a68460016129a7565b815260208082019290925260409081016000908120548082526006845290829020825160c0810184528154815260018201546001600160a01b039081169582019590955260028201549381019390935260038101548416606084015260048101549093166080830152600583015460a0830152855190935085908790811061063e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526106546001866129a7565b945050505b8061066381612a15565b915050610552565b5095945050505050565b6001546001600160a01b031633146106cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600260005414156107535760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103b8565b600260005560055460ff16156107ab5760405162461bcd60e51b815260206004820152601f60248201527f6c697374466f7253616c653a206d61726b65742069732064697361626c65640060448201526064016103b8565b6001600160a01b0384166108275760405162461bcd60e51b815260206004820152603060248201527f6c697374466f7253616c653a206e667420636f6e74726163742061646472657360448201527f732063616e277420626520656d7074790000000000000000000000000000000060648201526084016103b8565b6000831161089d5760405162461bcd60e51b815260206004820152602a60248201527f6c697374466f7253616c653a20746f6b656e4964206d7573742062652068696760448201527f686572207468616e20300000000000000000000000000000000000000000000060648201526084016103b8565b600082116109135760405162461bcd60e51b815260206004820152602960248201527f6c697374466f7253616c653a207072696365206d757374206265206174206c6560448201527f617374203120776569000000000000000000000000000000000000000000000060648201526084016103b8565b6040517ffb6064ae000000000000000000000000000000000000000000000000000000008152309063fb6064ae9061094f9084906004016127e3565b60006040518083038186803b15801561096757600080fd5b505afa15801561097b573d6000803e3d6000fd5b50506005546040517f01ffc9a700000000000000000000000000000000000000000000000000000000815261010090910460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166004820152600092506001600160a01b03871691506301ffc9a79060240160206040518083038186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190612797565b905060018115151415610c6f576040517f1af9cf49000000000000000000000000000000000000000000000000000000008152600481018590526000906001600160a01b03871690631af9cf499060240160206040518083038186803b158015610aa857600080fd5b505afa158015610abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae091906127cb565b905060028054610af091906129bf565b811115610b655760405162461bcd60e51b815260206004820152603060248201527f6c697374466f7253616c653a20726f79616c74792073686f756c64206265206c60448201527f657373206f7220657175616c203530250000000000000000000000000000000060648201526084016103b8565b6040517f5092e130000000000000000000000000000000000000000000000000000000008152600481018690526000906001600160a01b03881690635092e1309060240160006040518083038186803b158015610bc157600080fd5b505afa158015610bd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bfd91908101906126be565b6040517fa3f0939b000000000000000000000000000000000000000000000000000000008152909150309063a3f0939b90610c3c9084906004016127e3565b60006040518083038186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b5050505050505b610c7d600380546001019055565b6000610c8860035490565b6040805160c0810182528281526001600160a01b03808a1660208084019182528385018b8152336060860190815260006080870181815260a088018e81528a835260069095529781209651875593516001870180549187167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055915160028701555160038601805491861691831691909117905594516004850180549190941695169490941790915591516005909101559091505b8351811015610dee5760008281526007602052604090208451859083908110610d7b57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117815591015191015580610de681612a15565b915050610d42565b506040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b038716906323b872dd90606401600060405180830381600087803b158015610e5657600080fd5b505af1158015610e6a573d6000803e3d6000fd5b505060408051338152602081018890528893506001600160a01b038a16925084917f6c768f237d15b0eedb46b2f49918dc5109839c2d232c382d377c40fabeeec92d910160405180910390a45050600160005550505050565b6001546001600160a01b03163314610f1d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b610f2760006124b4565b565b6001546001600160a01b03163314610f835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038116610fff5760405162461bcd60e51b815260206004820152602d60248201527f7769746864726177616c506c6174666f726d4665653a2061646472657373206360448201527f616e277420626520656d7074790000000000000000000000000000000000000060648201526084016103b8565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611034573d6000803e3d6000fd5b5050565b6002600054141561108b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103b8565b60026000556001600160a01b03821661110c5760405162461bcd60e51b815260206004820152602d60248201527f70757263686173653a206e667420636f6e74726163742061646472657373206360448201527f616e277420626520656d7074790000000000000000000000000000000000000060648201526084016103b8565b600081116111825760405162461bcd60e51b815260206004820152602660248201527f70757263686173653a206974656d4964206d757374206265206869676865722060448201527f7468616e2030000000000000000000000000000000000000000000000000000060648201526084016103b8565b6000818152600660205260409020600401546001600160a01b0316156111ea5760405162461bcd60e51b815260206004820152601d60248201527f70757263686173653a206e6674206973206e6f7420666f722073616c6500000060448201526064016103b8565b6005546040517f01ffc9a700000000000000000000000000000000000000000000000000000000815261010090910460e01b7fffffffff000000000000000000000000000000000000000000000000000000001660048201526000906001600160a01b038416906301ffc9a79060240160206040518083038186803b15801561127257600080fd5b505afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612797565b600083815260066020908152604080832060058101546002909101546007845282852080548451818702810187019095528085529697509195909493606093859390929091849084015b8282101561133c576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016112f4565b50506040517ffb6064ae000000000000000000000000000000000000000000000000000000008152929350309263fb6064ae925061137f915084906004016127e3565b60006040518083038186803b15801561139757600080fd5b505afa1580156113ab573d6000803e3d6000fd5b50505050851515600114156115d5576040517f1af9cf49000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03891690631af9cf499060240160206040518083038186803b15801561141357600080fd5b505afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b91906127cb565b92506002805461145b91906129bf565b8311156114d05760405162461bcd60e51b815260206004820152602d60248201527f70757263686173653a20726f79616c74792073686f756c64206265206c65737360448201527f206f7220657175616c203530250000000000000000000000000000000000000060648201526084016103b8565b6040517f5092e130000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03891690635092e1309060240160006040518083038186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261156591908101906126be565b6040517fa3f0939b000000000000000000000000000000000000000000000000000000008152909250309063a3f0939b906115a49085906004016127e3565b60006040518083038186803b1580156115bc57600080fd5b505afa1580156115d0573d6000803e3d6000fd5b505050505b8434146116705760405162461bcd60e51b815260206004820152605060248201527f70757263686173653a20506c65617365207375626d697420746865206578616360448201527f742061736b696e6720707269636520696e206f7264657220746f20636f6d706c60648201527f6574652074686520707572636861736500000000000000000000000000000000608482015260a4016103b8565b600254600454349160009161168590846129df565b61168f91906129bf565b9050600060025486846116a291906129df565b6116ac91906129bf565b9050806116b983856129fe565b6116c391906129fe565b92506001891515141561196a576040517fd48e638a000000000000000000000000000000000000000000000000000000008152600481018890526000906001600160a01b038d169063d48e638a9060240160206040518083038186803b15801561172c57600080fd5b505afa158015611740573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176491906125db565b90508115611886578160005b875181101561184c57600060025489838151811061179e57634e487b7160e01b600052603260045260246000fd5b602002602001015160200151866117b591906129df565b6117bf91906129bf565b90506117cb81846129fe565b925060008983815181106117ef57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001519050806001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611836573d6000803e3d6000fd5b505050808061184490612a15565b915050611770565b506040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611883573d6000803e3d6000fd5b50505b8360005b86518110156119665760006002548883815181106118b857634e487b7160e01b600052603260045260246000fd5b602002602001015160200151846118cf91906129df565b6118d991906129bf565b90506118e581886129fe565b9650600088838151811061190957634e487b7160e01b600052603260045260246000fd5b6020026020010151600001519050806001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611950573d6000803e3d6000fd5b505050808061195e90612a15565b91505061188a565b5050505b60008a8152600660205260408082206003015490516001600160a01b039091169185156108fc02918691818181858888f193505050501580156119b1573d6000803e3d6000fd5b506040517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018890526001600160a01b038c16906323b872dd90606401600060405180830381600087803b158015611a1957600080fd5b505af1158015611a2d573d6000803e3d6000fd5b50505060009a8b525050600660205250506040872060040180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055505060019094555050505050565b60026000541415611ace5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103b8565b60026000556001600160a01b038216611b4f5760405162461bcd60e51b815260206004820152602b60248201527f63616e63656c3a206e667420636f6e747261637420616464726573732063616e60448201527f277420626520656d70747900000000000000000000000000000000000000000060648201526084016103b8565b60008111611bc45760405162461bcd60e51b8152602060048201526024808201527f63616e63656c3a206974656d4964206d7573742062652068696768657220746860448201527f616e20300000000000000000000000000000000000000000000000000000000060648201526084016103b8565b6000818152600660205260409020600381015460028201546004909201546001600160a01b0391821692911615611c3d5760405162461bcd60e51b815260206004820152601b60248201527f63616e63656c3a206e6674206973206e6f7420666f722073616c65000000000060448201526064016103b8565b6001600160a01b038216331480611c6d575033611c626001546001600160a01b031690565b6001600160a01b0316145b611cdf5760405162461bcd60e51b815260206004820152602760248201527f63616e63656c3a206f6e6c792073656c6c6572206f72206f776e65722063616e60448201527f2063616e63656c0000000000000000000000000000000000000000000000000060648201526084016103b8565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290526001600160a01b038516906323b872dd90606401600060405180830381600087803b158015611d4657600080fd5b505af1158015611d5a573d6000803e3d6000fd5b5050506000848152600660205260408082208281556001810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560028201849055600382018054821690556004820180549091169055600501829055518392506001600160a01b0387169186917fabead962fe6a13a6163dd3ce47d987d4317fc1997498cac1e1f55932380acf519190a4505060016000555050565b600a81511115611e9c5760405162461bcd60e51b815260206004820152604360248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7273206c60448201527f656e6774682073686f756c64206265206c657373206f7220657175616c20746f60648201527f2031300000000000000000000000000000000000000000000000000000000000608482015260a4016103b8565b6000805b82518110156120495760006001600160a01b0316838281518110611ed457634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516001600160a01b03161415611f5d5760405162461bcd60e51b815260206004820152603c60248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7220616460448201527f647265737320616464726573732063616e277420626520656d7074790000000060648201526084016103b8565b6000838281518110611f7f57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015111611ffe5760405162461bcd60e51b815260206004820152603960248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7220766160448201527f6c7565206d75737420626520686967686572207468616e20300000000000000060648201526084016103b8565b82818151811061201e57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001518261203591906129a7565b91508061204181612a15565b915050611ea0565b506002548111156110345760405162461bcd60e51b815260206004820152604260248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7273207360448201527f756d2073686f756c64206265206c657373206f7220657175616c20746f20313060648201527f3025000000000000000000000000000000000000000000000000000000000000608482015260a4016103b8565b6001546001600160a01b031633146121425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b0381166121be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103b8565b6121c7816124b4565b50565b600a815111156122685760405162461bcd60e51b815260206004820152604360248201527f76616c6964617465416666696c69617465733a20616666696c6961746573206c60448201527f656e6774682073686f756c64206265206c657373206f7220657175616c20746f60648201527f2031300000000000000000000000000000000000000000000000000000000000608482015260a4016103b8565b6000805b82518110156124155760006001600160a01b03168382815181106122a057634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516001600160a01b031614156123295760405162461bcd60e51b815260206004820152603c60248201527f76616c6964617465416666696c69617465733a20616666696c6961746520616460448201527f647265737320616464726573732063616e277420626520656d7074790000000060648201526084016103b8565b600083828151811061234b57634e487b7160e01b600052603260045260246000fd5b602002602001015160200151116123ca5760405162461bcd60e51b815260206004820152603960248201527f76616c6964617465416666696c69617465733a20616666696c6961746520766160448201527f6c7565206d75737420626520686967686572207468616e20300000000000000060648201526084016103b8565b8281815181106123ea57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001518261240191906129a7565b91508061240d81612a15565b91505061226c565b506002548111156110345760405162461bcd60e51b815260206004820152604260248201527f76616c6964617465416666696c69617465733a20616666696c6961746573207360448201527f756d2073686f756c64206265206c657373206f7220657175616c20746f20313060648201527f3025000000000000000000000000000000000000000000000000000000000000608482015260a4016103b8565b600180546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082601f83011261252e578081fd5b8135602061254361253e83612983565b612952565b80838252828201915082860187848660061b8901011115612562578586fd5b855b858110156125ab57604080838b03121561257c578788fd5b612584612929565b833561258f81612a5c565b8152838701358782015285529385019390910190600101612564565b5090979650505050505050565b6000602082840312156125c9578081fd5b81356125d481612a5c565b9392505050565b6000602082840312156125ec578081fd5b81516125d481612a5c565b60008060408385031215612609578081fd5b823561261481612a5c565b946020939093013593505050565b60008060008060808587031215612637578182fd5b843561264281612a5c565b93506020850135925060408501359150606085013567ffffffffffffffff81111561266b578182fd5b6126778782880161251e565b91505092959194509250565b600060208284031215612694578081fd5b813567ffffffffffffffff8111156126aa578182fd5b6126b68482850161251e565b949350505050565b600060208083850312156126d0578182fd5b825167ffffffffffffffff8111156126e6578283fd5b8301601f810185136126f6578283fd5b805161270461253e82612983565b80828252848201915084840188868560061b8701011115612723578687fd5b8694505b8385101561276f57604080828b03121561273f578788fd5b612747612929565b825161275281612a5c565b815282880151888201528452600195909501949286019201612727565b50979650505050505050565b60006020828403121561278c578081fd5b81356125d481612a71565b6000602082840312156127a8578081fd5b81516125d481612a71565b6000602082840312156127c4578081fd5b5035919050565b6000602082840312156127dc578081fd5b5051919050565b602080825282518282018190526000919060409081850190868401855b8281101561282e57815180516001600160a01b03168552860151868501529284019290850190600101612800565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156128c3576128b08385518051825260208101516001600160a01b03808216602085015260408301516040850152806060840151166060850152806080840151166080850152505060a081015160a08301525050565b9284019260c09290920191600101612857565b50909695505050505050565b60c0810161292382848051825260208101516001600160a01b03808216602085015260408301516040850152806060840151166060850152806080840151166080850152505060a081015160a08301525050565b92915050565b6040805190810167ffffffffffffffff8111828210171561294c5761294c612a46565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561297b5761297b612a46565b604052919050565b600067ffffffffffffffff82111561299d5761299d612a46565b5060051b60200190565b600082198211156129ba576129ba612a30565b500190565b6000826129da57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156129f9576129f9612a30565b500290565b600082821015612a1057612a10612a30565b500390565b6000600019821415612a2957612a29612a30565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146121c757600080fd5b80151581146121c757600080fdfea2646970667358221220174549e22713265e54cee0143edd8bf782096e17c0df4b218f586e94fb8e25af64736f6c63430008040033