60806040526000805460ff191690556005805460ff60a01b191690553480156200002857600080fd5b506200003c6001600160e01b036200005516565b6200004f6001600160e01b036200010e16565b62000262565b60005460ff1615620000c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b60048054336001600160a01b031991821681179092556005805482169055600680548216905560006002819055600880549092169092179055805460ff19166001179055565b6004546001600160a01b031633146200018857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156200021357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f616c7265616479205f7061757365640000000000000000000000000000000000604482015290519081900360640190fd5b6005805460ff60a01b1916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b611e0a80620002726000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a0712d68116100a2578063d051665011610071578063d051665014610588578063d153b60c146105ae578063dd62ed3e146105b6578063e2f72f03146105e4576101f0565b8063a0712d68146104ed578063a457c2d71461050a578063a9059cbb14610536578063b5ed298a14610562576101f0565b80638456cb59116100de5780638456cb59146104af5780638d1fdf2f146104b75780638da5cb5b146104dd57806395d89b41146104e5576101f0565b806370a082311461042f57806379cc6790146104555780638129fc1c1461048157806382ac5a0d14610489576101f0565b80633f4ba83a116101875780634e71e0c8116101565780634e71e0c8146103f1578063519dd153146103f957806355cc4e57146104015780635c975abb14610427576101f0565b80633f4ba83a1461037a57806342966c6814610382578063449a52f81461039f57806345c8b1a6146103cb576101f0565b80631d143848116101c35780631d143848146102d657806323b872dd146102fa578063313ce56714610330578063395093511461034e576101f0565b806303acb448146101f557806306fdde03146101ff578063095ea7b31461027c57806318160ddd146102bc575b600080fd5b6101fd61060a565b005b610207610711565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610241578181015183820152602001610229565b50505050905090810190601f16801561026e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a86004803603604081101561029257600080fd5b506001600160a01b038135169060200135610735565b604080519115158252519081900360200190f35b6102c461079b565b60408051918252519081900360200190f35b6102de6107a1565b604080516001600160a01b039092168252519081900360200190f35b6102a86004803603606081101561031057600080fd5b506001600160a01b038135811691602081013590911690604001356107b0565b6103386108e0565b6040805160ff9092168252519081900360200190f35b6102a86004803603604081101561036457600080fd5b506001600160a01b0381351690602001356108e5565b6101fd610926565b6102a86004803603602081101561039857600080fd5b50356109fb565b6102a8600480360360408110156103b557600080fd5b506001600160a01b038135169060200135610abc565b6101fd600480360360208110156103e157600080fd5b50356001600160a01b0316610b15565b6101fd610c1f565b6102de610cd2565b6101fd6004803603602081101561041757600080fd5b50356001600160a01b0316610ce1565b6102a8610dcd565b6102c46004803603602081101561044557600080fd5b50356001600160a01b0316610ddd565b6102a86004803603604081101561046b57600080fd5b506001600160a01b038135169060200135610df8565b6101fd610fb1565b6101fd6004803603602081101561049f57600080fd5b50356001600160a01b0316611045565b6101fd611115565b6101fd600480360360208110156104cd57600080fd5b50356001600160a01b03166111ef565b6102de6112f6565b610207611305565b6102a86004803603602081101561050357600080fd5b5035611323565b6102a86004803603604081101561052057600080fd5b506001600160a01b038135169060200135611388565b6102a86004803603604081101561054c57600080fd5b506001600160a01b0381351690602001356113c4565b6101fd6004803603602081101561057857600080fd5b50356001600160a01b0316611421565b6102a86004803603602081101561059e57600080fd5b50356001600160a01b0316611566565b6102de611584565b6102c4600480360360408110156105cc57600080fd5b506001600160a01b0381358116916020013516611593565b6101fd600480360360208110156105fa57600080fd5b50356001600160a01b03166115be565b6005546001600160a01b031633148061062d57506004546001600160a01b031633145b61067e576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b6005546001600160a01b03166106c55760405162461bcd60e51b815260040180806020018281038252603b815260200180611d9b603b913960400191505060405180910390fd5b600580546001600160a01b031981169091556040516001600160a01b039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b60408051808201909152600a81526912da5d18dbc811dbdb1960b21b602082015290565b600554600090600160a01b900460ff1615610787576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6107923384846116d2565b50600192915050565b60025490565b6008546001600160a01b031690565b600554600090600160a01b900460ff1615610802576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600360209081526040808320338452909152902054821115610873576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b604482015290519081900360640190fd5b6001600160a01b03841660009081526003602090815260408083203384529091529020546108a7908363ffffffff6117fd16565b6001600160a01b03851660009081526003602090815260408083203384529091529020556108d6848484611812565b5060019392505050565b601290565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610792918590610921908663ffffffff611a0d16565b6116d2565b6004546001600160a01b03163314610971576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b600554600160a01b900460ff166109c3576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481d5b97dc185d5cd959607a1b604482015290519081900360640190fd5b6005805460ff60a01b191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b3360009081526007602052604081205460ff1615610a51576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b33600090815260016020526040902054821115610aaa576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b610ab43383611a26565b506001919050565b6008546000906001600160a01b03163314610b0b576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b6107928383611afc565b6006546001600160a01b03163314610b69576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610bd6576040805162461bcd60e51b815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055517f150465b020dfc06a59269da94ed66db9b65a516cf4fdd5f583b0f12752339bbe9190a250565b6005546001600160a01b03163314610c72576040805162461bcd60e51b815260206004820152601160248201527037b7363ca83937b837b9b2b227bbb732b960791b604482015290519081900360640190fd5b60048054600580546001600160a01b03198084166001600160a01b038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6006546001600160a01b031690565b6004546001600160a01b03163314610d2c576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b038116610d715760405162461bcd60e51b8152600401808060200182810382526021815260200180611d516021913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907ff7189b85d7899f5a32d733e6584c4f1dcdff0274f09d969d186c1797673ede1190600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b600554600160a01b900460ff1690565b6001600160a01b031660009081526001602052604090205490565b6001600160a01b03821660009081526007602052604081205460ff16158015610e3157503360009081526007602052604090205460ff16155b610e73576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054821115610ed5576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6001600160a01b0383166000908152600360209081526040808320338452909152902054821115610f46576040805162461bcd60e51b8152602060048201526016602482015275696e73756666696369656e7420616c6c6f77616e636560501b604482015290519081900360640190fd5b610f508383611a26565b6001600160a01b0383166000908152600360209081526040808320338452909152902054610f84908363ffffffff6117fd16565b6001600160a01b038416600090815260036020908152604080832033845290915290205550600192915050565b60005460ff1615610fff576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b60048054336001600160a01b031991821681179092556005805482169055600680548216905560006002819055600880549092169092179055805460ff19166001179055565b6006546001600160a01b031633148061106857506004546001600160a01b031633145b6110b9576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920636f6d706c69616e6365526f6c65206f72204f776e657200000000604482015290519081900360640190fd5b6006546040516001600160a01b038084169216907f31b58ff3d01f61690b2faab8df1864d6eee3f4d17434dbcdb436136d8deb2d2f90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b03163314611160576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b600554600160a01b900460ff16156111b1576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4817dc185d5cd959608a1b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6006546001600160a01b03163314611243576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156112aa576040805162461bcd60e51b815260206004820152601660248201527530b2323932b9b99030b63932b0b23c90333937bd32b760511b604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff19166001179055517f1aa660498c83ea285bc55e4cfc00afcaa7120798db87b74f3c0d7c6e001bc3929190a250565b6004546001600160a01b031690565b60408051808201909152600481526312d1d31160e21b602082015290565b6008546000906001600160a01b03163314611372576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b600854610ab4906001600160a01b031683611afc565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610792918590610921908663ffffffff6117fd16565b600554600090600160a01b900460ff1615611416576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b610792338484611812565b6004546001600160a01b0316331461146c576040805162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0381166114b15760405162461bcd60e51b8152600401808060200182810382526029815260200180611d286029913960400191505060405180910390fd5b336001600160a01b038216141561150f576040805162461bcd60e51b815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b6001600160a01b031660009081526007602052604090205460ff1690565b6005546001600160a01b031690565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6006546001600160a01b03163314611612576040805162461bcd60e51b81526020600482015260126024820152716f6e6c79436f6d706c69616e6365526f6c6560701b604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16611677576040805162461bcd60e51b815260206004820152601560248201527430b2323932b9b99034b9903737ba10333937bd32b760591b604482015290519081900360640190fd5b6001600160a01b03811660009081526001602052604090205461169a8282611a26565b6040516001600160a01b038316907f71e13dfaf69fe3a65acef6b6eff085b0d60c7b3ebf229bda2e2fd3e8c5d1839690600090a25050565b6001600160a01b03831660009081526007602052604090205460ff1615801561171457506001600160a01b03821660009081526007602052604090205460ff16155b611756576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b03821661179b5760405162461bcd60e51b8152600401808060200182810382526029815260200180611d726029913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008282111561180c57600080fd5b50900390565b6001600160a01b03821661186d576040805162461bcd60e51b815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b6001600160a01b03831660009081526007602052604090205460ff161580156118af57506001600160a01b03821660009081526007602052604090205460ff16155b6118f1576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040902054811115611953576040805162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6001600160a01b03831660009081526001602052604090205461197c908263ffffffff6117fd16565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546119b1908263ffffffff611a0d16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600082820183811015611a1f57600080fd5b9392505050565b600254611a39908263ffffffff6117fd16565b6002556001600160a01b038216600090815260016020526040902054611a65908263ffffffff6117fd16565b6001600160a01b038316600081815260016020908152604091829020939093558051848152905191927fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca592918290030190a26040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6008546001600160a01b03163314611b48576040805162461bcd60e51b815260206004820152600a60248201526937b7363ca4b9b9bab2b960b11b604482015290519081900360640190fd5b600554600160a01b900460ff1615611b97576040805162461bcd60e51b815260206004820152600d60248201526c1dda195b939bdd14185d5cd959609a1b604482015290519081900360640190fd5b6001600160a01b038216611bf2576040805162461bcd60e51b815260206004820152601b60248201527f63616e6e6f74206d696e7420746f2061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205460ff1615611c51576040805162461bcd60e51b815260206004820152600e60248201526d30b2323932b9b990333937bd32b760911b604482015290519081900360640190fd5b600254611c64908263ffffffff611a0d16565b6002556001600160a01b038216600090815260016020526040902054611c90908263ffffffff611a0d16565b6001600160a01b038316600081815260016020908152604091829020939093558051848152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a26040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe63616e6e6f74207472616e73666572206f776e65727368697020746f2061646472657373207a65726f63616e6e6f74207365742069737375657220746f2061646472657373207a65726f63616e6e6f7420617070726f766520616c6c6f77616e636520666f72207a65726f206164647265737363616e206f6e6c792064697372656761726420612070726f706f736564206f776e65722074686174207761732070726576696f75736c7920736574a265627a7a72315820ae95f194c700c36ffb3076c06d99dfc58667a3d94533560d9c1fbb9a836b789f64736f6c634300050b0032