60806040526007805461ff0019166112001790553480156200002057600080fd5b5060405162001f4d38038062001f4d8339810160408190526200004391620004cd565b604080518082018252600a8152690546573742045524332360b41b602080830191825283518085019094526004845263151154d560e21b90840152815191929183918391620000959160059162000427565b508051620000ab90600690602084019062000427565b50506007805460ff1916905550620000c560003362000133565b620000f17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000133565b6200011d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000133565b506200012c9050338262000143565b506200054b565b6200013f82826200023a565b5050565b6001600160a01b0382166200019f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620001ad600083836200027d565b8060046000828254620001c19190620004e7565b90915550506001600160a01b03821660009081526002602052604081208054839290620001f0908490620004e7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6200025182826200029560201b62000aa41760201c565b60008281526001602090815260409091206200027891839062000b2862000335821b17901c565b505050565b620002788383836200035560201b62000b3d1760201c565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200013f576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002f13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200034c836001600160a01b038416620003d5565b90505b92915050565b6200036d8383836200027860201b620006341760201c565b60075460ff1615620002785760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b606482015260840162000196565b60008181526001830160205260408120546200041e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200034f565b5060006200034f565b82805462000435906200050e565b90600052602060002090601f016020900481019282620004595760008555620004a4565b82601f106200047457805160ff1916838001178555620004a4565b82800160010185558215620004a4579182015b82811115620004a457825182559160200191906001019062000487565b50620004b2929150620004b6565b5090565b5b80821115620004b25760008155600101620004b7565b600060208284031215620004e057600080fd5b5051919050565b600082198211156200050957634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200052357607f821691505b602082108114156200054557634e487b7160e01b600052602260045260246000fd5b50919050565b6119f2806200055b6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a217fddf116100a2578063d539139311610071578063d5391393146103f2578063d547741f14610419578063dd62ed3e1461042c578063e63ab1e91461046557600080fd5b8063a217fddf146103b1578063a457c2d7146103b9578063a9059cbb146103cc578063ca15c873146103df57600080fd5b80638456cb59116100de5780638456cb59146103635780639010d07c1461036b57806391d148541461039657806395d89b41146103a957600080fd5b806370a08231146102fd57806379cc6790146103265780637a1395aa1461033957600080fd5b8063313ce567116101715780633f4ba83a1161014b5780633f4ba83a146102c457806340c10f19146102cc57806342966c68146102df5780635c975abb146102f257600080fd5b8063313ce5671461028157806336568abe1461029e57806339509351146102b157600080fd5b806318160ddd116101ad57806318160ddd1461022457806323b872dd14610236578063248a9ca3146102495780632f2ff15d1461026c57600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063095ea7b314610211575b600080fd5b6101e76101e2366004611675565b61048c565b60405190151581526020015b60405180910390f35b6102046104b7565b6040516101f391906116cb565b6101e761021f36600461171a565b610549565b6004545b6040519081526020016101f3565b6101e7610244366004611744565b61055f565b610228610257366004611780565b60009081526020819052604090206001015490565b61027f61027a366004611799565b61060e565b005b600754610100900460ff1660405160ff90911681526020016101f3565b61027f6102ac366004611799565b610639565b6101e76102bf36600461171a565b6106b7565b61027f6106f3565b61027f6102da36600461171a565b610799565b61027f6102ed366004611780565b610838565b60075460ff166101e7565b61022861030b3660046117c5565b6001600160a01b031660009081526002602052604090205490565b61027f61033436600461171a565b610845565b61027f6103473660046117e0565b6007805460ff9092166101000261ff0019909216919091179055565b61027f6108c6565b61037e610379366004611803565b61096a565b6040516001600160a01b0390911681526020016101f3565b6101e76103a4366004611799565b610989565b6102046109b2565b610228600081565b6101e76103c736600461171a565b6109c1565b6101e76103da36600461171a565b610a5a565b6102286103ed366004611780565b610a67565b6102287f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61027f610427366004611799565b610a7e565b61022861043a366004611825565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6102287f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60006001600160e01b03198216635a05180f60e01b14806104b157506104b182610ba3565b92915050565b6060600580546104c69061184f565b80601f01602080910402602001604051908101604052809291908181526020018280546104f29061184f565b801561053f5780601f106105145761010080835404028352916020019161053f565b820191906000526020600020905b81548152906001019060200180831161052257829003601f168201915b5050505050905090565b6000610556338484610bd8565b50600192915050565b600061056c848484610cfc565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156105f65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106038533858403610bd8565b506001949350505050565b60008281526020819052604090206001015461062a8133610ed7565b6106348383610f3b565b505050565b6001600160a01b03811633146106a95760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105ed565b6106b38282610f5d565b5050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916105569185906106ee9086906118a0565b610bd8565b61071d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610989565b61078f5760405162461bcd60e51b815260206004820152603960248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20756e70617573650000000000000060648201526084016105ed565b610797610f7f565b565b6107c37f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610989565b61082e5760405162461bcd60e51b815260206004820152603660248201527f45524332305072657365744d696e7465725061757365723a206d7573742068616044820152751d99481b5a5b9d195c881c9bdb19481d1bc81b5a5b9d60521b60648201526084016105ed565b6106b38282611012565b61084233826110fd565b50565b6000610851833361043a565b9050818110156108af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b60648201526084016105ed565b6108bc8333848403610bd8565b61063483836110fd565b6108f07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610989565b6109625760405162461bcd60e51b815260206004820152603760248201527f45524332305072657365744d696e7465725061757365723a206d75737420686160448201527f76652070617573657220726f6c6520746f20706175736500000000000000000060648201526084016105ed565b610797611257565b600082815260016020526040812061098290836112d2565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600680546104c69061184f565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015610a435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ed565b610a503385858403610bd8565b5060019392505050565b6000610556338484610cfc565b60008181526001602052604081206104b1906112de565b600082815260208190526040902060010154610a9a8133610ed7565b6106348383610f5d565b610aae8282610989565b6106b3576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610ae43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610982836001600160a01b0384166112e8565b60075460ff16156106345760405162461bcd60e51b815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e736665722077686044820152691a5b19481c185d5cd95960b21b60648201526084016105ed565b60006001600160e01b03198216637965db0b60e01b14806104b157506301ffc9a760e01b6001600160e01b03198316146104b1565b6001600160a01b038316610c3a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ed565b6001600160a01b038216610c9b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ed565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610d605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ed565b6001600160a01b038216610dc25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ed565b610dcd838383611337565b6001600160a01b03831660009081526002602052604090205481811015610e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ed565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290610e7c9084906118a0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ec891815260200190565b60405180910390a35b50505050565b610ee18282610989565b6106b357610ef9816001600160a01b03166014611342565b610f04836020611342565b604051602001610f159291906118b8565b60408051601f198184030181529082905262461bcd60e51b82526105ed916004016116cb565b610f458282610aa4565b60008281526001602052604090206106349082610b28565b610f6782826114de565b60008281526001602052604090206106349082611543565b60075460ff16610fc85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ed565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166110685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ed565b61107460008383611337565b806004600082825461108691906118a0565b90915550506001600160a01b038216600090815260026020526040812080548392906110b39084906118a0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03821661115d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ed565b61116982600083611337565b6001600160a01b038216600090815260026020526040902054818110156111dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ed565b6001600160a01b038316600090815260026020526040812083830390556004805484929061120c90849061192d565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60075460ff161561129d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ed565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ff53390565b60006109828383611558565b60006104b1825490565b600081815260018301602052604081205461132f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104b1565b5060006104b1565b610634838383610b3d565b60606000611351836002611944565b61135c9060026118a0565b67ffffffffffffffff81111561137457611374611963565b6040519080825280601f01601f19166020018201604052801561139e576020820181803683370190505b509050600360fc1b816000815181106113b9576113b9611979565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113e8576113e8611979565b60200101906001600160f81b031916908160001a905350600061140c846002611944565b6114179060016118a0565b90505b600181111561148f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061144b5761144b611979565b1a60f81b82828151811061146157611461611979565b60200101906001600160f81b031916908160001a90535060049490941c936114888161198f565b905061141a565b5083156109825760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ed565b6114e88282610989565b156106b3576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610982836001600160a01b038416611582565b600082600001828154811061156f5761156f611979565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561166b5760006115a660018361192d565b85549091506000906115ba9060019061192d565b905081811461161f5760008660000182815481106115da576115da611979565b90600052602060002001549050808760000184815481106115fd576115fd611979565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611630576116306119a6565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104b1565b60009150506104b1565b60006020828403121561168757600080fd5b81356001600160e01b03198116811461098257600080fd5b60005b838110156116ba5781810151838201526020016116a2565b83811115610ed15750506000910152565b60208152600082518060208401526116ea81604085016020870161169f565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461171557600080fd5b919050565b6000806040838503121561172d57600080fd5b611736836116fe565b946020939093013593505050565b60008060006060848603121561175957600080fd5b611762846116fe565b9250611770602085016116fe565b9150604084013590509250925092565b60006020828403121561179257600080fd5b5035919050565b600080604083850312156117ac57600080fd5b823591506117bc602084016116fe565b90509250929050565b6000602082840312156117d757600080fd5b610982826116fe565b6000602082840312156117f257600080fd5b813560ff8116811461098257600080fd5b6000806040838503121561181657600080fd5b50508035926020909101359150565b6000806040838503121561183857600080fd5b611841836116fe565b91506117bc602084016116fe565b600181811c9082168061186357607f821691505b6020821081141561188457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156118b3576118b361188a565b500190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118f081601785016020880161169f565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161192181602884016020880161169f565b01602801949350505050565b60008282101561193f5761193f61188a565b500390565b600081600019048311821515161561195e5761195e61188a565b500290565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008161199e5761199e61188a565b506000190190565b634e487b7160e01b600052603160045260246000fdfea264697066735822122092b2af6408cc864de269ce4afe1a185a301ded0ce6a4096fec5e9f2d26aa516d64736f6c6343000809003300000000000000000000000000000000000000000000d3c21bcecceda1000000