60806040523480156200001157600080fd5b50604080518082018252600c81526b4c656e64657865204e46547360a01b6020808301919091528251808401909352600683526554696572494960d01b90830152908181620000706301ffc9a760e01b6001600160e01b03620000f716565b6200008b6380ac58cd60e01b6001600160e01b03620000f716565b620000a663780e9d6360e01b6001600160e01b03620000f716565b8151620000bb9060099060208501906200017c565b508051620000d190600a9060208401906200017c565b50620000ed635b5e139f60e01b6001600160e01b03620000f716565b5050505062000221565b6001600160e01b0319808216141562000157576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001bf57805160ff1916838001178555620001ef565b82800160010185558215620001ef579182015b82811115620001ef578251825591602001919060010190620001d2565b50620001fd92915062000201565b5090565b6200021e91905b80821115620001fd576000815560010162000208565b90565b61196080620002316000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063a22cb46511610071578063a22cb4651461038d578063b88d4fde146103bb578063c87b56dd14610481578063e985e9c51461049e578063eb93406b146104cc57610121565b80636352211e146103145780636c0360eb1461033157806370a082311461033957806375f6288f1461035f57806395d89b411461038557610121565b806318160ddd116100f457806318160ddd1461024557806323b872dd1461025f5780632f745c591461029557806342842e0e146102c15780634f6ccce7146102f757610121565b806301ffc9a71461012657806306fdde0314610161578063081812fc146101de578063095ea7b314610217575b600080fd5b61014d6004803603602081101561013c57600080fd5b50356001600160e01b0319166104d4565b604080519115158252519081900360200190f35b6101696104f7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a357818101518382015260200161018b565b50505050905090810190601f1680156101d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fb600480360360208110156101f457600080fd5b503561058e565b604080516001600160a01b039092168252519081900360200190f35b6102436004803603604081101561022d57600080fd5b506001600160a01b0381351690602001356105f0565b005b61024d610718565b60408051918252519081900360200190f35b6102436004803603606081101561027557600080fd5b506001600160a01b0381358116916020810135909116906040013561071e565b61024d600480360360408110156102ab57600080fd5b506001600160a01b03813516906020013561077a565b610243600480360360608110156102d757600080fd5b506001600160a01b038135811691602081013590911690604001356107f9565b61024d6004803603602081101561030d57600080fd5b5035610814565b6101fb6004803603602081101561032a57600080fd5b503561087a565b6101696108d4565b61024d6004803603602081101561034f57600080fd5b50356001600160a01b0316610935565b6102436004803603602081101561037557600080fd5b50356001600160a01b031661099d565b6101696109bf565b610243600480360360408110156103a357600080fd5b506001600160a01b0381351690602001351515610a20565b610243600480360360808110156103d157600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561040c57600080fd5b82018360208201111561041e57600080fd5b8035906020019184600183028401116401000000008311171561044057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b25945050505050565b6101696004803603602081101561049757600080fd5b5035610b83565b61014d600480360360408110156104b457600080fd5b506001600160a01b0381358116916020013516610d4f565b61024d610d7d565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105835780601f1061055857610100808354040283529160200191610583565b820191906000526020600020905b81548152906001019060200180831161056657829003601f168201915b505050505090505b90565b600061059982610dbc565b6105d45760405162461bcd60e51b815260040180806020018281038252602c81526020018061182a602c913960400191505060405180910390fd5b506000908152600260205260409020546001600160a01b031690565b60006105fb8261087a565b9050806001600160a01b0316836001600160a01b0316141561064e5760405162461bcd60e51b81526004018080602001828103825260218152602001806118ae6021913960400191505060405180910390fd5b806001600160a01b0316610660610dd9565b6001600160a01b0316148061068157506106818161067c610dd9565b610d4f565b6106bc5760405162461bcd60e51b815260040180806020018281038252603881526020018061179f6038913960400191505060405180910390fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60075490565b61072f610729610dd9565b82610ddd565b61076a5760405162461bcd60e51b81526004018080602001828103825260318152602001806118cf6031913960400191505060405180910390fd5b610775838383610e81565b505050565b600061078583610935565b82106107c25760405162461bcd60e51b815260040180806020018281038252602b8152602001806116f2602b913960400191505060405180910390fd5b6001600160a01b03831660009081526005602052604090208054839081106107e657fe5b9060005260206000200154905092915050565b61077583838360405180602001604052806000815250610b25565b600061081e610718565b821061085b5760405162461bcd60e51b815260040180806020018281038252602c815260200180611900602c913960400191505060405180910390fd5b6007828154811061086857fe5b90600052602060002001549050919050565b6000818152600160205260408120546001600160a01b0316806108ce5760405162461bcd60e51b81526004018080602001828103825260298152602001806118016029913960400191505060405180910390fd5b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105835780601f1061055857610100808354040283529160200191610583565b60006001600160a01b03821661097c5760405162461bcd60e51b815260040180806020018281038252602a8152602001806117d7602a913960400191505060405180910390fd5b6001600160a01b03821660009081526003602052604090206108ce90610ea0565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105835780601f1061055857610100808354040283529160200191610583565b610a28610dd9565b6001600160a01b0316826001600160a01b03161415610a8e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060046000610a9b610dd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610adf610dd9565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b610b36610b30610dd9565b83610ddd565b610b715760405162461bcd60e51b81526004018080602001828103825260318152602001806118cf6031913960400191505060405180910390fd5b610b7d84848484610ea4565b50505050565b6060610b8e82610dbc565b610bc95760405162461bcd60e51b815260040180806020018281038252602f81526020018061187f602f913960400191505060405180910390fd5b6000828152600c602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b50505050509050805160001415610c855750506040805160208101909152600081526104f2565b600b816040516020018083805460018160011615610100020316600290048015610ce65780601f10610cc4576101008083540402835291820191610ce6565b820191906000526020600020905b815481529060010190602001808311610cd2575b5050825160208401908083835b60208310610d125780518252601f199092019160209182019101610cf3565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150506104f2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600080610d8a600d610ea0565b9050610d963382610ef6565b610da0600d610f17565b600e54610db7906001600160a01b03166001610a20565b905090565b6000908152600160205260409020546001600160a01b0316151590565b3390565b6000610de882610dbc565b610e235760405162461bcd60e51b815260040180806020018281038252602c815260200180611773602c913960400191505060405180910390fd5b6000610e2e8361087a565b9050806001600160a01b0316846001600160a01b03161480610e695750836001600160a01b0316610e5e8461058e565b6001600160a01b0316145b80610e795750610e798185610d4f565b949350505050565b610e8c838383610f20565b610e968382611064565b6107758282611159565b5490565b610eaf848484610e81565b610ebb84848484611197565b610b7d5760405162461bcd60e51b815260040180806020018281038252603281526020018061171d6032913960400191505060405180910390fd5b610f0082826113d2565b610f0a8282611159565b610f1381611503565b5050565b80546001019055565b826001600160a01b0316610f338261087a565b6001600160a01b031614610f785760405162461bcd60e51b81526004018080602001828103825260298152602001806118566029913960400191505060405180910390fd5b6001600160a01b038216610fbd5760405162461bcd60e51b815260040180806020018281038252602481526020018061174f6024913960400191505060405180910390fd5b610fc681611547565b6001600160a01b0383166000908152600360205260409020610fe790611584565b6001600160a01b038216600090815260036020526040902061100890610f17565b60008181526001602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821660009081526005602052604081205461108e90600163ffffffff61159b16565b600083815260066020526040902054909150808214611129576001600160a01b03841660009081526005602052604081208054849081106110cb57fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061110957fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906111529060001983016116b4565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b60006111ab846001600160a01b03166115e4565b6111b757506001610e79565b600060606001600160a01b038616630a85bd0160e11b6111d5610dd9565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561124e578181015183820152602001611236565b50505050905090810190601f16801561127b5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b602083106112e35780518252601f1990920191602091820191016112c4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611345576040519150601f19603f3d011682016040523d82523d6000602084013e61134a565b606091505b50915091508161139b578051156113645780518082602001fd5b60405162461bcd60e51b815260040180806020018281038252603281526020018061171d6032913960400191505060405180910390fd5b60008180602001905160208110156113b257600080fd5b50516001600160e01b031916630a85bd0160e11b149350610e7992505050565b6001600160a01b03821661142d576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b61143681610dbc565b15611488576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b600081815260016020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600390915290206114c790610f17565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b6000818152600260205260409020546001600160a01b03161561158157600081815260026020526040902080546001600160a01b03191690555b50565b805461159790600163ffffffff61159b16565b9055565b60006115dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061161d565b9392505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610e79575050151592915050565b600081848411156116ac5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611671578181015183820152602001611659565b50505050905090810190601f16801561169e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b8154818355818111156107755760008381526020902061077591810190830161058b91905b808211156116ed57600081556001016116d9565b509056fe455243373231456e756d657261626c653a206f776e657220696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243373231456e756d657261626c653a20676c6f62616c20696e646578206f7574206f6620626f756e6473a265627a7a72315820d1d635801922406017b664107757ee87a350901a7651a90c3f67e09bbc5ccb8a64736f6c63430005110032