0x608060405234801561001057600080fd5b506004361061023d5760003560e01c8063745541501161013b578063c4b1d38f116100b8578063f2fde38b1161007c578063f2fde38b14610b50578063f3fef3a314610b76578063f957ddba14610ba2578063fd183df714610bc8578063fe87cb8914610c0f5761023d565b8063c4b1d38f1461089c578063da909b09146108d2578063e79faa58146108f8578063f1fd1bce1461099c578063f2380a08146109c25761023d565b80638f32d59b116100ff5780638f32d59b14610776578063917393631461077e5780639555a942146107ba578063961b080c146107f0578063ae1dfbde146107f85761023d565b80637455415014610739578063853828b61461075657806385e3c1d41461075e5780638d928af8146107665780638da5cb5b1461076e5761023d565b80635976f7c5116101c957806368a9674d1161018d57806368a9674d146105ff5780636d70f7ae146106355780636da663551461065b578063715018a6146106ff57806373ebf0d3146107075761023d565b80635976f7c51461051057806359ff52b2146105185780635f5817e31461055257806365a8a037146105aa5780636657bab9146105cd5761023d565b806347e7ef241161021057806347e7ef24146104295780634b1acf39146104555780634ba45a401461047957806354a4c7b2146104a7578063558a7297146104e25761023d565b8063012b1f5f146102425780631f69565f14610270578063273cbaa0146102c65780633aecd0e3146103f1575b600080fd5b61026e6004803603604081101561025857600080fd5b506001600160a01b038135169060200135610c17565b005b6102966004803603602081101561028657600080fd5b50356001600160a01b0316610e36565b6040805194855260208501939093526001600160a01b039091168383015215156060830152519081900360800190f35b6102ce610f1d565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b8381101561031a578181015183820152602001610302565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610359578181015183820152602001610341565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610398578181015183820152602001610380565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156103d75781810151838201526020016103bf565b505050509050019850505050505050505060405180910390f35b6104176004803603602081101561040757600080fd5b50356001600160a01b03166112ba565b60408051918252519081900360200190f35b61026e6004803603604081101561043f57600080fd5b506001600160a01b038135169060200135611384565b61045d611530565b604080516001600160a01b039092168252519081900360200190f35b6104176004803603604081101561048f57600080fd5b506001600160a01b038135811691602001351661153f565b6104c4600480360360208110156104bd57600080fd5b503561162a565b60408051938452602084019290925282820152519081900360600190f35b61026e600480360360408110156104f857600080fd5b506001600160a01b03813516906020013515156116c1565b610417611768565b61053e6004803603602081101561052e57600080fd5b50356001600160a01b03166117de565b604080519115158252519081900360200190f35b61055a611876565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561059657818101518382015260200161057e565b505050509050019250505060405180910390f35b61026e600480360360408110156105c057600080fd5b5080359060200135611b56565b61053e600480360360608110156105e357600080fd5b506001600160a01b038135169060208101359060400135611da0565b61026e6004803603606081101561061557600080fd5b506001600160a01b038135811691602081013590911690604001356121a8565b61053e6004803603602081101561064b57600080fd5b50356001600160a01b0316612402565b61026e6004803603602081101561067157600080fd5b810190602081018135600160201b81111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460018302840111600160201b831117156106be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612417945050505050565b61026e612574565b61026e6004803603606081101561071d57600080fd5b506001600160a01b038135169060208101359060400135612605565b61026e6004803603602081101561074f57600080fd5b50356128f1565b61026e612a68565b61055a612ed3565b61045d612fe4565b61045d612ff3565b61053e613002565b61053e6004803603608081101561079457600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135613026565b61026e600480360360608110156107d057600080fd5b506001600160a01b0381358116916020810135909116906040013561338e565b610417613599565b61053e6004803603602081101561080e57600080fd5b810190602081018135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460018302840111600160201b8311171561085b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506135de945050505050565b61053e600480360360608110156108b257600080fd5b506001600160a01b038135811691602081013590911690604001356135fe565b61026e600480360360208110156108e857600080fd5b50356001600160a01b0316613854565b61026e6004803603602081101561090e57600080fd5b810190602081018135600160201b81111561092857600080fd5b82018360208201111561093a57600080fd5b803590602001918460018302840111600160201b8311171561095b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506138e5945050505050565b610417600480360360208110156109b257600080fd5b50356001600160a01b0316613a00565b6109e8600480360360208110156109d857600080fd5b50356001600160a01b0316613a98565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b83811015610a38578181015183820152602001610a20565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610a77578181015183820152602001610a5f565b50505050905001868103845289818151815260200191508051906020019060200280838360005b83811015610ab6578181015183820152602001610a9e565b50505050905001868103835288818151815260200191508051906020019060200280838360005b83811015610af5578181015183820152602001610add565b50505050905001868103825287818151815260200191508051906020019060200280838360005b83811015610b34578181015183820152602001610b1c565b505050509050019a505050505050505050505060405180910390f35b61026e60048036036020811015610b6657600080fd5b50356001600160a01b0316613fd3565b61026e60048036036040811015610b8c57600080fd5b506001600160a01b038135169060200135614026565b61026e60048036036020811015610bb857600080fd5b50356001600160a01b03166141d3565b610bf660048036036040811015610bde57600080fd5b506001600160a01b03813581169160200135166146e5565b6040805192835290151560208301528051918290030190f35b6104176148ba565b3360009081526004602052604090205460ff16610c6f576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b6040518060400160405280600b81526020016a66697373696f6e46726f6d60a81b8152506003816040518082805190602001908083835b60208310610cc55780518252601f199092019160209182019101610ca6565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610d389050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b038316610d81576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60008211610dc4576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b600154604080516334d723b560e11b81526001600160a01b03868116600483015260248201869052915191909216916369ae476a91604480830192600092919082900301818387803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b50505050505050565b60008080806001600160a01b038516610e84576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60015460408051631f69565f60e01b81526001600160a01b03888116600483015291519190921691631f69565f916024808301926080929190829003018186803b158015610ed157600080fd5b505afa158015610ee5573d6000803e3d6000fd5b505050506040513d6080811015610efb57600080fd5b5080516020820151604083015160609093015191989097509195509350915050565b6060806060806060600160009054906101000a90046001600160a01b03166001600160a01b03166385e3c1d46040518163ffffffff1660e01b815260040160006040518083038186803b158015610f7357600080fd5b505afa158015610f87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610fb057600080fd5b8101908080516040519392919084600160201b821115610fcf57600080fd5b908301906020820185811115610fe457600080fd5b82518660208202830111600160201b8211171561100057600080fd5b82525081516020918201928201910280838360005b8381101561102d578181015183820152602001611015565b5050505090500160405250505090506000815190508067ffffffffffffffff8111801561105957600080fd5b50604051908082528060200260200182016040528015611083578160200160208202803683370190505b5095508067ffffffffffffffff8111801561109d57600080fd5b506040519080825280602002602001820160405280156110c7578160200160208202803683370190505b5092508067ffffffffffffffff811180156110e157600080fd5b5060405190808252806020026020018201604052801561110b578160200160208202803683370190505b5094508067ffffffffffffffff8111801561112557600080fd5b5060405190808252806020026020018201604052801561114f578160200160208202803683370190505b50935060005b82518110156112b157600080600080600160009054906101000a90046001600160a01b03166001600160a01b0316631f69565f88878151811061119457fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060806040518083038186803b1580156111d957600080fd5b505afa1580156111ed573d6000803e3d6000fd5b505050506040513d608081101561120357600080fd5b508051602082015160408301516060909301518e5192975090955091935090915084908c908790811061123257fe5b6020026020010181815250508288868151811061124b57fe5b602002602001018181525050818a868151811061126457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508089868151811061129157fe5b911515602092830291909101909101525050600190920191506111559050565b50505090919293565b60006001600160a01b038216611305576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60015460408051633aecd0e360e01b81526001600160a01b03858116600483015291519190921691633aecd0e3916024808301926020929190829003018186803b15801561135257600080fd5b505afa158015611366573d6000803e3d6000fd5b505050506040513d602081101561137c57600080fd5b505192915050565b6040518060400160405280600781526020016619195c1bdcda5d60ca1b8152506003816040518082805190602001908083835b602083106113d65780518252601f1990920191602091820191016113b7565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506114499050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b038316611492576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b600082116114d5576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b60015460408051638340f54960e01b81523360048201526001600160a01b0386811660248301526044820186905291519190921691638340f54991606480830192600092919082900301818387803b158015610e1957600080fd5b6002546001600160a01b031690565b60006001600160a01b0383161580159061156157506001600160a01b03821615155b6115a0576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b6001546040805163012e916960e61b81526001600160a01b038681166004830152858116602483015291519190921691634ba45a40916044808301926020929190829003018186803b1580156115f557600080fd5b505afa158015611609573d6000803e3d6000fd5b505050506040513d602081101561161f57600080fd5b505190505b92915050565b60015460408051632a5263d960e11b8152600481018490529051600092839283926001600160a01b03909216916354a4c7b291602480820192606092909190829003018186803b15801561167d57600080fd5b505afa158015611691573d6000803e3d6000fd5b505050506040513d60608110156116a757600080fd5b508051602082015160409092015190969195509350915050565b6116c9613002565b611708576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260046020908152604091829020805460ff1916851515908117909155825190815291517f966c160e1c4dbc7df8d69af4ace01e9297c3cf016397b7914971f2fbfa32672d9281900390910190a25050565b60015460408051635976f7c560e01b815290516000926001600160a01b031691635976f7c5916004808301926020929190829003018186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d60208110156117d757600080fd5b5051905090565b60006001600160a01b038216611829576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60015460408051632cffa95960e11b81526001600160a01b038581166004830152915191909216916359ff52b2916024808301926020929190829003018186803b15801561135257600080fd5b606080600160009054906101000a90046001600160a01b03166001600160a01b03166385e3c1d46040518163ffffffff1660e01b815260040160006040518083038186803b1580156118c757600080fd5b505afa1580156118db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561190457600080fd5b8101908080516040519392919084600160201b82111561192357600080fd5b90830190602082018581111561193857600080fd5b82518660208202830111600160201b8211171561195457600080fd5b82525081516020918201928201910280838360005b83811015611981578181015183820152602001611969565b5050505090500160405250505090506000600160009054906101000a90046001600160a01b03166001600160a01b0316638b68e0386040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d6020811015611a0a57600080fd5b5051905060608167ffffffffffffffff81118015611a2757600080fd5b50604051908082528060200260200182016040528015611a51578160200160208202803683370190505b5090506000805b8451811015611b4c57600154855160009182916001600160a01b0390911690631f69565f90899086908110611a8957fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060806040518083038186803b158015611ace57600080fd5b505afa158015611ae2573d6000803e3d6000fd5b505050506040513d6080811015611af857600080fd5b506040810151606090910151909250905080611b425781858580600101965081518110611b2157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050600101611a58565b5090935050505090565b60405180604001604052806006815260200165333ab9b4b7b760d11b8152506003816040518082805190602001908083835b60208310611ba75780518252601f199092019160209182019101611b88565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611c1a9050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b60008311611c5d576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b6001546040805163fe87cb8960e01b815290516000926001600160a01b03169163fe87cb89916004808301926020929190829003018186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d6020811015611ccc57600080fd5b5051905082611ce7612710611ce184886148ff565b9061495f565b1115611d2f576040805162461bcd60e51b815260206004820152601260248201527118189a1d1039b634b83830b3b29037bb32b960711b604482015290519081900360640190fd5b600154604080516369b55f7160e01b81523360048201526024810187905290516001600160a01b03909216916369b55f719160448082019260009290919082900301818387803b158015611d8257600080fd5b505af1158015611d96573d6000803e3d6000fd5b5050505050505050565b600060405180604001604052806011815260200170756e77726170706564576974686472617760781b8152506003816040518082805190602001908083835b60208310611dfe5780518252601f199092019160209182019101611ddf565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611e719050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b60008411611eb4576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b323314611f08576040805162461bcd60e51b815260206004820152601760248201527f3031373a206e6f7420616c6c6f7720636f6e7472616374000000000000000000604482015290519081900360640190fd5b6001546001600160a01b031663d9caed123387611f2588886149a1565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611f7b57600080fd5b505af1158015611f8f573d6000803e3d6000fd5b5050505060006120c1866001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611fd157600080fd5b505afa158015611fe5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561200e57600080fd5b8101908080516040519392919084600160201b82111561202d57600080fd5b90830190602082018581111561204257600080fd5b8251600160201b81118282018810171561205b57600080fd5b82525081516020918201929091019080838360005b83811015612088578181015183820152602001612070565b50505050905090810190601f1680156120b55780820380516001836020036101000a031916815260200191505b506040525050506149fb565b60025460408051639d167f6b60e01b815260048101849052600060248201819052604482018a90526064820189905291519394506001600160a01b0390921692639d167f6b926084808201936020939283900390910190829087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d602081101561215357600080fd5b505161219c576040805162461bcd60e51b81526020600482015260136024820152720c0c4d8e8819985a5b1959081d1bc8195e1a5d606a1b604482015290519081900360640190fd5b50600195945050505050565b3360009081526004602052604090205460ff16612200576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b6040518060400160405280600b81526020016a6465706f73697446726f6d60a81b8152506003816040518082805190602001908083835b602083106122565780518252601f199092019160209182019101612237565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506122c99050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b038416612312576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b6001600160a01b038316612362576040805162461bcd60e51b81526020600482015260126024820152713032303a20746f6b656e206973207a65726f60701b604482015290519081900360640190fd5b600082116123a5576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b60015460408051638340f54960e01b81526001600160a01b03878116600483015286811660248301526044820186905291519190921691638340f54991606480830192600092919082900301818387803b158015611d8257600080fd5b60046020526000908152604090205460ff1681565b61241f613002565b61245e576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b60016003826040518082805190602001908083835b602083106124925780518252601f199092019160209182019101612473565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff191696151596909617909555600184820181905285855286519585019590955285517f22418eff3daf7a7f13540655e76bffddb94cdefaa40ceceea812ea82b7797f679587959094509250829160608301919086019080838360005b8381101561253657818101518382015260200161251e565b50505050905090810190601f1680156125635780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150565b61257c613002565b6125bb576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526004602052604090205460ff1661265d576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b6040518060400160405280600a815260200169667573696f6e46726f6d60b01b8152506003816040518082805190602001908083835b602083106126b25780518252601f199092019160209182019101612693565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506127259050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b03841661276e576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b600083116127b1576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b6001546040805163fe87cb8960e01b815290516000926001600160a01b03169163fe87cb89916004808301926020929190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b5051905082612835612710611ce184886148ff565b111561287d576040805162461bcd60e51b815260206004820152601260248201527118189a1d1039b634b83830b3b29037bb32b960711b604482015290519081900360640190fd5b600154604080516369b55f7160e01b81526001600160a01b03888116600483015260248201889052915191909216916369b55f7191604480830192600092919082900301818387803b1580156128d257600080fd5b505af11580156128e6573d6000803e3d6000fd5b505050505050505050565b604051806040016040528060078152602001663334b9b9b4b7b760c91b8152506003816040518082805190602001908083835b602083106129435780518252601f199092019160209182019101612924565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506129b69050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b600082116129f9576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b600154604080516334d723b560e11b81523360048201526024810185905290516001600160a01b03909216916369ae476a9160448082019260009290919082900301818387803b158015612a4c57600080fd5b505af1158015612a60573d6000803e3d6000fd5b505050505050565b6040518060400160405280600b81526020016a1dda5d1a191c985dd05b1b60aa1b8152506003816040518082805190602001908083835b60208310612abe5780518252601f199092019160209182019101612a9f565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150612b319050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b60015460408051632178f07560e21b815290516060926001600160a01b0316916385e3c1d4916004808301926000929190829003018186803b158015612b7657600080fd5b505afa158015612b8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612bb357600080fd5b8101908080516040519392919084600160201b821115612bd257600080fd5b908301906020820185811115612be757600080fd5b82518660208202830111600160201b82111715612c0357600080fd5b82525081516020918201928201910280838360005b83811015612c30578181015183820152602001612c18565b50505050905001604052505050905060008151905060608167ffffffffffffffff81118015612c5e57600080fd5b50604051908082528060200260200182016040528015612c88578160200160208202803683370190505b50905060005b82811015612e075760015484516000916001600160a01b031690634ba45a40903390889086908110612cbc57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612d1157600080fd5b505afa158015612d25573d6000803e3d6000fd5b505050506040513d6020811015612d3b57600080fd5b505183519091508190849084908110612d5057fe5b60209081029190910101528015612dfe5760015485516001600160a01b039091169063d9caed12903390889086908110612d8657fe5b6020026020010151846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015612de557600080fd5b505af1158015612df9573d6000803e3d6000fd5b505050505b50600101612c8e565b50336001600160a01b03167f8d74e4ddcbb9ca087b377ddf8cc86a1d190850d9dc9289959ac40335839fdc7d8483604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612e79578181015183820152602001612e61565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612eb8578181015183820152602001612ea0565b5050505090500194505050505060405180910390a250505050565b60015460408051632178f07560e21b815290516060926001600160a01b0316916385e3c1d4916004808301926000929190829003018186803b158015612f1857600080fd5b505afa158015612f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612f5557600080fd5b8101908080516040519392919084600160201b821115612f7457600080fd5b908301906020820185811115612f8957600080fd5b82518660208202830111600160201b82111715612fa557600080fd5b82525081516020918201928201910280838360005b83811015612fd2578181015183820152602001612fba565b50505050905001604052505050905090565b6001546001600160a01b031690565b6000546001600160a01b031690565b600080546001600160a01b0316613017614a51565b6001600160a01b031614905090565b3360009081526004602052604081205460ff1661307e576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b60405180604001604052806015815260200174756e77726170706564576974686472617746726f6d60581b8152506003816040518082805190602001908083835b602083106130de5780518252601f1990920191602091820191016130bf565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506131519050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b03861661319a576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b600084116131dd576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b6001546001600160a01b031663d9caed1287876131fa88886149a1565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561325057600080fd5b505af1158015613264573d6000803e3d6000fd5b5050505060006132a6866001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611fd157600080fd5b60025460408051639d167f6b60e01b815260048101849052600060248201819052604482018a90526064820189905291519394506001600160a01b0390921692639d167f6b926084808201936020939283900390910190829087803b15801561330e57600080fd5b505af1158015613322573d6000803e3d6000fd5b505050506040513d602081101561333857600080fd5b5051613381576040805162461bcd60e51b81526020600482015260136024820152720c0c4d8e8819985a5b1959081d1bc8195e1a5d606a1b604482015290519081900360640190fd5b5060019695505050505050565b3360009081526004602052604090205460ff166133e6576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b6040518060400160405280600c81526020016b776974686472617746726f6d60a01b8152506003816040518082805190602001908083835b6020831061343d5780518252601f19909201916020918201910161341e565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506134b09050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b0384166134f9576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b6000821161353c576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b60015460408051636ce5768960e11b81526001600160a01b0387811660048301528681166024830152604482018690529151919092169163d9caed1291606480830192600092919082900301818387803b158015611d8257600080fd5b60015460408051632586c20360e21b815290516000926001600160a01b03169163961b080c916004808301926020929190829003018186803b1580156117ad57600080fd5b805160208183018101805160038252928201919093012091525460ff1681565b6002546000906001600160a01b03163314613655576040805162461bcd60e51b815260206004820152601260248201527118189a9d103737ba1032bc31b430b733b2b960711b604482015290519081900360640190fd5b6040518060400160405280600581526020016472656c617960d81b8152506003816040518082805190602001908083835b602083106136a55780518252601f199092019160209182019101613686565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506137189050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b0385161580159061373857506001600160a01b03841615155b613777576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b600083116137ba576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b6001546040805163db33b6b360e01b81526001600160a01b0388811660048301528781166024830152604482018790529151919092169163db33b6b391606480830192600092919082900301818387803b15801561381757600080fd5b505af115801561382b573d6000803e3d6000fd5b505060015461384992506001600160a01b0387811692501685614a55565b506001949350505050565b61385c613002565b61389b576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f1af34e943bb581f62718acd39caf1a640e9ff89789a197745e259d1f40cd9bd690600090a250565b6138ed613002565b61392c576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b60006003826040518082805190602001908083835b602083106139605780518252601f199092019160209182019101613941565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520805460ff191696151596909617909555600084820181905285855286519585019590955285517f22418eff3daf7a7f13540655e76bffddb94cdefaa40ceceea812ea82b7797f679587959094509250829160608301919086019080838388831561253657818101518382015260200161251e565b60006001600160a01b038216613a4b576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b600154604080516378fe8de760e11b81526001600160a01b0385811660048301529151919092169163f1fd1bce916024808301926020929190829003018186803b15801561135257600080fd5b606080606080606080600160009054906101000a90046001600160a01b03166001600160a01b03166385e3c1d46040518163ffffffff1660e01b815260040160006040518083038186803b158015613aef57600080fd5b505afa158015613b03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613b2c57600080fd5b8101908080516040519392919084600160201b821115613b4b57600080fd5b908301906020820185811115613b6057600080fd5b82518660208202830111600160201b82111715613b7c57600080fd5b82525081516020918201928201910280838360005b83811015613ba9578181015183820152602001613b91565b5050505090500160405250505090506000815190508067ffffffffffffffff81118015613bd557600080fd5b50604051908082528060200260200182016040528015613bff578160200160208202803683370190505b5096508067ffffffffffffffff81118015613c1957600080fd5b50604051908082528060200260200182016040528015613c43578160200160208202803683370190505b5095508067ffffffffffffffff81118015613c5d57600080fd5b50604051908082528060200260200182016040528015613c87578160200160208202803683370190505b5094508067ffffffffffffffff81118015613ca157600080fd5b50604051908082528060200260200182016040528015613ccb578160200160208202803683370190505b5093508067ffffffffffffffff81118015613ce557600080fd5b50604051908082528060200260200182016040528015613d0f578160200160208202803683370190505b5092506000600160009054906101000a90046001600160a01b03166001600160a01b031663fe87cb896040518163ffffffff1660e01b815260040160206040518083038186803b158015613d6257600080fd5b505afa158015613d76573d6000803e3d6000fd5b505050506040513d6020811015613d8c57600080fd5b5051905060005b8351811015613fc657600154845160009182916001600160a01b0390911690631f69565f90889086908110613dc457fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060806040518083038186803b158015613e0957600080fd5b505afa158015613e1d573d6000803e3d6000fd5b505050506040513d6080811015613e3357600080fd5b5080516060909101518c51919350915082908c9085908110613e5157fe5b602090810291909101015260015486516001600160a01b0390911690634ba45a40908e90899087908110613e8157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613ed657600080fd5b505afa158015613eea573d6000803e3d6000fd5b505050506040513d6020811015613f0057600080fd5b50518851899085908110613f1057fe5b602002602001018181525050858381518110613f2857fe5b60200260200101518a8481518110613f3c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505080898481518110613f6957fe5b60200260200101901515908115158152505083888481518110613f8857fe5b60200260200101511015613f9d576000613fa0565b60015b878481518110613fac57fe5b911515602092830291909101909101525050600101613d93565b5050505091939590929450565b613fdb613002565b61401a576040805162461bcd60e51b81526020600482018190526024820152600080516020614e70833981519152604482015290519081900360640190fd5b61402381614aac565b50565b60405180604001604052806008815260200167776974686472617760c01b8152506003816040518082805190602001908083835b602083106140795780518252601f19909201916020918201910161405a565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506140ec9050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b038316614135576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60008211614178576040805162461bcd60e51b81526020600482015260136024820152600080516020614e0f833981519152604482015290519081900360640190fd5b60015460408051636ce5768960e11b81523360048201526001600160a01b038681166024830152604482018690529151919092169163d9caed1291606480830192600092919082900301818387803b158015610e1957600080fd5b3360009081526004602052604090205460ff1661422b576040805162461bcd60e51b815260206004820152601160248201527018189c9d103737ba1037b832b930ba37b960791b604482015290519081900360640190fd5b6040518060400160405280600f81526020016e7769746864726177416c6c46726f6d60881b8152506003816040518082805190602001908083835b602083106142855780518252601f199092019160209182019101614266565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506142f89050576040805162461bcd60e51b81526020600482015260176024820152600080516020614e90833981519152604482015290519081900360640190fd5b6001600160a01b038216614341576040805162461bcd60e51b81526020600482015260146024820152600080516020614e50833981519152604482015290519081900360640190fd5b60015460408051632178f07560e21b815290516060926001600160a01b0316916385e3c1d4916004808301926000929190829003018186803b15801561438657600080fd5b505afa15801561439a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156143c357600080fd5b8101908080516040519392919084600160201b8211156143e257600080fd5b9083019060208201858111156143f757600080fd5b82518660208202830111600160201b8211171561441357600080fd5b82525081516020918201928201910280838360005b83811015614440578181015183820152602001614428565b50505050905001604052505050905060008151905060608167ffffffffffffffff8111801561446e57600080fd5b50604051908082528060200260200182016040528015614498578160200160208202803683370190505b50905060005b83518110156146185760015484516000916001600160a01b031690634ba45a409089908890869081106144cd57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561452257600080fd5b505afa158015614536573d6000803e3d6000fd5b505050506040513d602081101561454c57600080fd5b50518351909150819084908490811061456157fe5b6020908102919091010152801561460f5760015485516001600160a01b039091169063d9caed1290899088908690811061459757fe5b6020026020010151846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156145f657600080fd5b505af115801561460a573d6000803e3d6000fd5b505050505b5060010161449e565b50846001600160a01b03167f8d74e4ddcbb9ca087b377ddf8cc86a1d190850d9dc9289959ac40335839fdc7d8483604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561468a578181015183820152602001614672565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156146c95781810151838201526020016146b1565b5050505090500194505050505060405180910390a25050505050565b60015460408051632cffa95960e11b81526001600160a01b0384811660048301529151600093849316916359ff52b2916024808301926020929190829003018186803b15801561473457600080fd5b505afa158015614748573d6000803e3d6000fd5b505050506040513d602081101561475e57600080fd5b50516147a8576040805162461bcd60e51b81526020600482015260146024820152731818199d103737ba1032bc34b9ba103a37b5b2b760611b604482015290519081900360640190fd5b6001546040805163fe87cb8960e01b815290516000926001600160a01b03169163fe87cb89916004808301926020929190829003018186803b1580156147ed57600080fd5b505afa158015614801573d6000803e3d6000fd5b505050506040513d602081101561481757600080fd5b50516001546040805163012e916960e61b81526001600160a01b03898116600483015288811660248301529151939450911691634ba45a4091604480820192602092909190829003018186803b15801561487057600080fd5b505afa158015614884573d6000803e3d6000fd5b505050506040513d602081101561489a57600080fd5b50519250808310156148ad5760006148b0565b60015b9150509250929050565b6001546040805163fe87cb8960e01b815290516000926001600160a01b03169163fe87cb89916004808301926020929190829003018186803b1580156117ad57600080fd5b60008261490e57506000611624565b8282028284828161491b57fe5b04146149585760405162461bcd60e51b8152600401808060200182810382526021815260200180614e2f6021913960400191505060405180910390fd5b9392505050565b600061495883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b4c565b600082820183811015614958576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000602082511115614a49576040805162461bcd60e51b8152602060048201526012602482015271453a20737472696e6720746f6f206c6f6e6760701b604482015290519081900360640190fd5b506020015190565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052614aa7908490614bee565b505050565b6001600160a01b038116614af15760405162461bcd60e51b8152600401808060200182810382526026815260200180614de96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008183614bd85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614b9d578181015183820152602001614b85565b50505050905090810190601f168015614bca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614be457fe5b0495945050505050565b614c00826001600160a01b0316614dac565b614c51576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310614c8f5780518252601f199092019160209182019101614c70565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614cf1576040519150601f19603f3d011682016040523d82523d6000602084013e614cf6565b606091505b509150915081614d4d576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115614da657808060200190516020811015614d6957600080fd5b5051614da65760405162461bcd60e51b815260040180806020018281038252602a815260200180614eb0602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590614de057508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573733030323a20616d6f756e74206973207a65726f00000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f773030313a2061646472657373206973207a65726f0000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65723031383a2066756e6374696f6e206973207061757365640000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122062ff3e9b4659f1a25fecbcc725bafefeeba9d9001b9d02830c00e5fed83e9fb264736f6c634300060c0033