60806040523480156200001157600080fd5b5060405162001fb638038062001fb6833981016040819052620000349162000211565b818160036200004483826200032a565b5060046200005382826200032a565b50506005805460ff1916905550600780546001600160a01b0319166001600160a01b0385161790556200008f6000620000893390565b62000098565b505050620003f6565b620000a48282620000a8565b5050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620000a45760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001083390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017457600080fd5b81516001600160401b03808211156200019157620001916200014c565b604051601f8301601f19908116603f01168101908282118183101715620001bc57620001bc6200014c565b81604052838152602092508683858801011115620001d957600080fd5b600091505b83821015620001fd5785820183015181830184015290820190620001de565b600093810190920192909252949350505050565b6000806000606084860312156200022757600080fd5b83516001600160a01b03811681146200023f57600080fd5b60208501519093506001600160401b03808211156200025d57600080fd5b6200026b8783880162000162565b935060408601519150808211156200028257600080fd5b50620002918682870162000162565b9150509250925092565b600181811c90821680620002b057607f821691505b602082108103620002d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032557600081815260208120601f850160051c81016020861015620003005750805b601f850160051c820191505b8181101562000321578281556001016200030c565b5050505b505050565b81516001600160401b038111156200034657620003466200014c565b6200035e816200035784546200029b565b84620002d7565b602080601f8311600181146200039657600084156200037d5750858301515b600019600386901b1c1916600185901b17855562000321565b600085815260208120601f198616915b82811015620003c757888601518255948401946001909101908401620003a6565b5085821015620003e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bb080620004066000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f9578063a217fddf11610097578063b1658d2011610071578063b1658d20146103ba578063d5391393146103cd578063d547741f146103e2578063dd62ed3e146103f557600080fd5b8063a217fddf1461038c578063a457c2d714610394578063a9059cbb146103a757600080fd5b80638456cb59116100d35780638456cb591461035657806391d148541461035e57806395d89b41146103715780639dc29fac1461037957600080fd5b80635c975abb146102f757806368fdd31f1461030257806370a082311461032d57600080fd5b80632f2ff15d11610166578063395093511161014057806339509351146102ab5780633aeac4e1146102be57806340c10f19146102d157806344e2a59c146102e457600080fd5b80632f2ff15d14610276578063313ce5671461028957806336568abe1461029857600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e5780632b51c7c01461026157600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046117c6565b61042e565b60405190151581526020015b60405180910390f35b6101f9610465565b6040516101e89190611814565b6101dc610214366004611863565b6104f7565b6002545b6040519081526020016101e8565b6101dc61023936600461188d565b61050f565b61021d61024c3660046118c9565b60009081526006602052604090206001015490565b61027461026f36600461188d565b610535565b005b6102746102843660046118e2565b6105a0565b604051601281526020016101e8565b6102746102a63660046118e2565b6105cb565b6101dc6102b9366004611863565b610649565b6102746102cc36600461190e565b610688565b6102746102df366004611863565b610755565b6102746102f2366004611863565b6107c7565b60055460ff166101dc565b600754610315906001600160a01b031681565b6040516001600160a01b0390911681526020016101e8565b61021d61033b366004611938565b6001600160a01b031660009081526020819052604090205490565b6102746108d4565b6101dc61036c3660046118e2565b6108eb565b6101f9610916565b610274610387366004611863565b610925565b61021d600081565b6101dc6103a2366004611863565b610997565b6101dc6103b5366004611863565b610a34565b6102746103c8366004611938565b610a42565b61021d600080516020611b5b83398151915281565b6102746103f03660046118e2565b610a71565b61021d61040336600461190e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006001600160e01b03198216637965db0b60e01b148061045f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461047490611953565b80601f01602080910402602001604051908101604052809291908181526020018280546104a090611953565b80156104ed5780601f106104c2576101008083540402835291602001916104ed565b820191906000526020600020905b8154815290600101906020018083116104d057829003601f168201915b5050505050905090565b600033610505818585610a97565b5060019392505050565b60003361051d858285610bbb565b610528858585610c47565b60019150505b9392505050565b60055460ff166105835760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064015b60405180910390fd5b600061058f8133610e15565b61059a848484610e79565b50505050565b6000828152600660205260409020600101546105bc8133610e15565b6105c68383610ff6565b505050565b6001600160a01b038116331461063b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161057a565b610645828261107c565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061050590829086906106839087906119a3565b610a97565b60055460ff166106d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057a565b60006106dd8133610e15565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074891906119b6565b905061059a848483610e79565b60055460ff16156107785760405162461bcd60e51b815260040161057a906119cf565b6107836000336108eb565b806107a157506107a1600080516020611b5b833981519152336108eb565b6107bd5760405162461bcd60e51b815260040161057a906119f9565b61064582826110e3565b60055460ff16156107ea5760405162461bcd60e51b815260040161057a906119cf565b6107f56000336108eb565b806108135750610813600080516020611b5b833981519152336108eb565b61082f5760405162461bcd60e51b815260040161057a906119f9565b6007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c91906119b6565b9050808211156108bd576007546105c6906001600160a01b031684836111c2565b6007546105c6906001600160a01b031684846111c2565b60006108e08133610e15565b6108e8611214565b50565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606004805461047490611953565b60055460ff16156109485760405162461bcd60e51b815260040161057a906119cf565b6109536000336108eb565b806109715750610971600080516020611b5b833981519152336108eb565b61098d5760405162461bcd60e51b815260040161057a906119f9565b6106458282611289565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610a1c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161057a565b610a298286868403610a97565b506001949350505050565b600033610505818585610c47565b6000610a4e8133610e15565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260066020526040902060010154610a8d8133610e15565b6105c6838361107c565b6001600160a01b038316610af95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057a565b6001600160a01b038216610b5a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461059a5781811015610c3a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161057a565b61059a8484848403610a97565b6001600160a01b038316610cab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161057a565b6001600160a01b038216610d0d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161057a565b6001600160a01b03831660009081526020819052604090205481811015610d855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161057a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610dbc9084906119a3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0891815260200190565b60405180910390a361059a565b610e1f82826108eb565b61064557610e37816001600160a01b031660146113d7565b610e428360206113d7565b604051602001610e53929190611a3a565b60408051601f198184030181529082905262461bcd60e51b825261057a91600401611814565b6001600160a01b038216610ecf5760405162461bcd60e51b815260206004820152601960248201527f57697468647261773a2061646472657373206973207a65726f00000000000000604482015260640161057a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3791906119b6565b811115610f925760405162461bcd60e51b815260206004820152602360248201527f57697468647261773a206e6f7420656e6f7567687420746f6b656e2062616c616044820152626e636560e81b606482015260840161057a565b610fa66001600160a01b03841683836111c2565b604080516001600160a01b038086168252841660208201529081018290527f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f13049060600160405180910390a1505050565b61100082826108eb565b6106455760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110383390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61108682826108eb565b156106455760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166111395760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161057a565b806002600082825461114b91906119a3565b90915550506001600160a01b038216600090815260208190526040812080548392906111789084906119a3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526105c6908490611573565b60055460ff16156112375760405162461bcd60e51b815260040161057a906119cf565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861126c3390565b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166112e95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161057a565b6001600160a01b0382166000908152602081905260409020548181101561135d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161057a565b6001600160a01b038316600090815260208190526040812083830390556002805484929061138c908490611aaf565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606060006113e6836002611ac2565b6113f19060026119a3565b67ffffffffffffffff81111561140957611409611ad9565b6040519080825280601f01601f191660200182016040528015611433576020820181803683370190505b509050600360fc1b8160008151811061144e5761144e611aef565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061147d5761147d611aef565b60200101906001600160f81b031916908160001a90535060006114a1846002611ac2565b6114ac9060016119a3565b90505b6001811115611524576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106114e0576114e0611aef565b1a60f81b8282815181106114f6576114f6611aef565b60200101906001600160f81b031916908160001a90535060049490941c9361151d81611b05565b90506114af565b50831561052e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057a565b60006115c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116459092919063ffffffff16565b8051909150156105c657808060200190518101906115e69190611b1c565b6105c65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161057a565b6060611654848460008561165c565b949350505050565b6060824710156116bd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161057a565b6001600160a01b0385163b6117145760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161057a565b600080866001600160a01b031685876040516117309190611b3e565b60006040518083038185875af1925050503d806000811461176d576040519150601f19603f3d011682016040523d82523d6000602084013e611772565b606091505b509150915061178282828661178d565b979650505050505050565b6060831561179c57508161052e565b8251156117ac5782518084602001fd5b8160405162461bcd60e51b815260040161057a9190611814565b6000602082840312156117d857600080fd5b81356001600160e01b03198116811461052e57600080fd5b60005b8381101561180b5781810151838201526020016117f3565b50506000910152565b60208152600082518060208401526118338160408501602087016117f0565b601f01601f19169190910160400192915050565b80356001600160a01b038116811461185e57600080fd5b919050565b6000806040838503121561187657600080fd5b61187f83611847565b946020939093013593505050565b6000806000606084860312156118a257600080fd5b6118ab84611847565b92506118b960208501611847565b9150604084013590509250925092565b6000602082840312156118db57600080fd5b5035919050565b600080604083850312156118f557600080fd5b8235915061190560208401611847565b90509250929050565b6000806040838503121561192157600080fd5b61192a83611847565b915061190560208401611847565b60006020828403121561194a57600080fd5b61052e82611847565b600181811c9082168061196757607f821691505b60208210810361198757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561045f5761045f61198d565b6000602082840312156119c857600080fd5b5051919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526021908201527f426f6f737420546f6b656e3a206f6e6c792061646d696e206f72206d696e74656040820152603960f91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611a728160178501602088016117f0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611aa38160288401602088016117f0565b01602801949350505050565b8181038181111561045f5761045f61198d565b808202811582820484141761045f5761045f61198d565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081611b1457611b1461198d565b506000190190565b600060208284031215611b2e57600080fd5b8151801515811461052e57600080fd5b60008251611b508184602087016117f0565b919091019291505056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220a402e0507045f5c2988f6293811e14fa421d6c61b27463782bc7ad63c017b6f764736f6c6343000812003300000000000000000000000076c81e322fe678f9391029d571453fad9bc9e73e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000b5374616b6564204564466900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065374456446690000000000000000000000000000000000000000000000000000