60806040526006805460ff1916600117905534801561001d57600080fd5b506112ca8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100f05760003560e01c8062fdd58e146100f557806301ffc9a71461011b57806306fdde031461013e5780630e89341c146101535780631249c58b146101665780631d126041146101705780632eb2c2d6146101905780634e1273f4146101a35780634f02c420146101c35780637874e421146101d757806395d89b41146101fa578063a22cb46514610202578063b119490e14610215578063b2bdfa7b14610228578063bd85b03914610253578063c793803c14610273578063e985e9c514610285578063f242432a146102c1578063ffd31af6146102d4575b600080fd5b610108610103366004610bc5565b6102e1565b6040519081526020015b60405180910390f35b61012e610129366004610bef565b610339565b6040519015158152602001610112565b610146610389565b6040516101129190610c4c565b610146610161366004610c7f565b610417565b61016e610458565b005b61010861017e366004610c7f565b60086020526000908152604090205481565b61016e61019e366004610ddb565b6104f8565b6101b66101b1366004610e84565b610594565b6040516101129190610f43565b600a5461012e90600160a01b900460ff1681565b61012e6101e5366004610c7f565b60076020526000908152604090205460ff1681565b6101466106bd565b61016e610210366004610f87565b6106ca565b61016e610223366004610fc3565b6106d9565b600a5461023b906001600160a01b031681565b6040516001600160a01b039091168152602001610112565b610108610261366004610c7f565b60009081526008602052604090205490565b60065461012e90610100900460ff1681565b61012e61029336600461102f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61016e6102cf366004611062565b610780565b60065461012e9060ff1681565b60006001600160a01b0383166102f657600080fd5b600a546001600160a01b03908116908416036103155750600954610333565b600a54600160a01b900460ff161561032f57506001610333565b5060005b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061036a57506001600160e01b031982166303a24d0760e21b145b8061033357506301ffc9a760e01b6001600160e01b0319831614610333565b60038054610396906110c6565b80601f01602080910402602001604051908101604052809291908181526020018280546103c2906110c6565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b505050505081565b60606000821161042657600080fd5b600261043183610807565b60405160200161044292919061111c565b6040516020818303038152906040529050919050565b600a805460ff60a01b198116600160a01b179091556000805160206112758339815191529033906001600160a01b031660146104956005366111d8565b61049f9190611205565b600960008282546104b091906111d8565b909155505060043560f81c608052600160a05236600419810190600060055b828110156104ef57803560601c91508185878960406080a46014016104cf565b50505050505050565b6001600160a01b03851633148061051457506105148533610293565b6105805760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084015b60405180910390fd5b61058d858585858561090f565b5050505050565b606081518351146105f95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610577565b600083516001600160401b0381111561061457610614610c98565b60405190808252806020026020018201604052801561063d578160200160208202803683370190505b50905060005b84518110156106b55761068885828151811061066157610661611219565b602002602001015185838151811061067b5761067b611219565b60200260200101516102e1565b82828151811061069a5761069a611219565b60209081029190910101526106ae8161122f565b9050610643565b509392505050565b60048054610396906110c6565b6106d5338383610a22565b5050565b600a80546001600160a01b0319163317905582516106fe906003906020860190610b10565b508251610712906004906020860190610b10565b5061071c82610b01565b61271060095560015b81811161077a57600a546040805183815261271060208201526001600160a01b03909216916000918391600080516020611275833981519152910160405180910390a4806107728161122f565b915050610725565b50505050565b6001600160a01b03851633148061079c575061079c8533610293565b6107fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610577565b61058d8585858585610971565b60608160000361082e5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561085857806108428161122f565b91506108519050600a83611205565b9150610832565b6000816001600160401b0381111561087257610872610c98565b6040519080825280601f01601f19166020018201604052801561089c576020820181803683370190505b5090505b8415610907576108b16001836111d8565b91506108be600a86611248565b6108c990603061125c565b60f81b8183815181106108de576108de611219565b60200101906001600160f81b031916908160001a905350610900600a86611205565b94506108a0565b949350505050565b81518351146109715760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610577565b6001600160a01b0384166109d55760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610577565b6001600160a01b0384161561058d5760405162461bcd60e51b815260206004820152601360248201527224ba32b69034b9902637b1b5b2b2102737bb9760691b6044820152606401610577565b816001600160a01b0316836001600160a01b031603610a955760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610577565b733a9a6beb016a4ccab9b8280ee9887f58d8ce7ec86001600160a01b03841614610afc5760405162461bcd60e51b81526020600482015260186024820152772a3434b99024ba32b69034b9902637b1b5b2b2102737bb9760411b6044820152606401610577565b505050565b80516106d59060029060208401905b828054610b1c906110c6565b90600052602060002090601f016020900481019282610b3e5760008555610b84565b82601f10610b5757805160ff1916838001178555610b84565b82800160010185558215610b84579182015b82811115610b84578251825591602001919060010190610b69565b50610b90929150610b94565b5090565b5b80821115610b905760008155600101610b95565b80356001600160a01b0381168114610bc057600080fd5b919050565b60008060408385031215610bd857600080fd5b610be183610ba9565b946020939093013593505050565b600060208284031215610c0157600080fd5b81356001600160e01b031981168114610c1957600080fd5b9392505050565b60005b83811015610c3b578181015183820152602001610c23565b8381111561077a5750506000910152565b6020815260008251806020840152610c6b816040850160208701610c20565b601f01601f19169190910160400192915050565b600060208284031215610c9157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715610cd657610cd6610c98565b604052919050565b60006001600160401b03821115610cf757610cf7610c98565b5060051b60200190565b600082601f830112610d1257600080fd5b81356020610d27610d2283610cde565b610cae565b82815260059290921b84018101918181019086841115610d4657600080fd5b8286015b84811015610d615780358352918301918301610d4a565b509695505050505050565b600082601f830112610d7d57600080fd5b81356001600160401b03811115610d9657610d96610c98565b610da9601f8201601f1916602001610cae565b818152846020838601011115610dbe57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610df357600080fd5b610dfc86610ba9565b9450610e0a60208701610ba9565b935060408601356001600160401b0380821115610e2657600080fd5b610e3289838a01610d01565b94506060880135915080821115610e4857600080fd5b610e5489838a01610d01565b93506080880135915080821115610e6a57600080fd5b50610e7788828901610d6c565b9150509295509295909350565b60008060408385031215610e9757600080fd5b82356001600160401b0380821115610eae57600080fd5b818501915085601f830112610ec257600080fd5b81356020610ed2610d2283610cde565b82815260059290921b84018101918181019089841115610ef157600080fd5b948201945b83861015610f1657610f0786610ba9565b82529482019490820190610ef6565b96505086013592505080821115610f2c57600080fd5b50610f3985828601610d01565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610f7b57835183529284019291840191600101610f5f565b50909695505050505050565b60008060408385031215610f9a57600080fd5b610fa383610ba9565b915060208301358015158114610fb857600080fd5b809150509250929050565b600080600060608486031215610fd857600080fd5b83356001600160401b0380821115610fef57600080fd5b610ffb87838801610d6c565b9450602086013591508082111561101157600080fd5b5061101e86828701610d6c565b925050604084013590509250925092565b6000806040838503121561104257600080fd5b61104b83610ba9565b915061105960208401610ba9565b90509250929050565b600080600080600060a0868803121561107a57600080fd5b61108386610ba9565b945061109160208701610ba9565b9350604086013592506060860135915060808601356001600160401b038111156110ba57600080fd5b610e7788828901610d6c565b600181811c908216806110da57607f821691505b6020821081036110fa57634e487b7160e01b600052602260045260246000fd5b50919050565b60008151611112818560208601610c20565b9290920192915050565b600080845481600182811c91508083168061113857607f831692505b6020808410820361115757634e487b7160e01b86526022600452602486fd5b81801561116b576001811461117c576111a9565b60ff198616895284890196506111a9565b60008b81526020902060005b868110156111a15781548b820152908501908301611188565b505084890196505b5050505050506111b98185611100565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156111ea576111ea6111c2565b500390565b634e487b7160e01b600052601260045260246000fd5b600082611214576112146111ef565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201611241576112416111c2565b5060010190565b600082611257576112576111ef565b500690565b6000821982111561126f5761126f6111c2565b50019056fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a26469706673582212202f6903cb66b948e2e89826d8b5fced5ca36c2385d256ef6ef7e07880d56b318e64736f6c634300080d0033