6080604052600880546001600160a01b031990811673c78ba80b6ad9c0d52dc59c357af302e256708efa179091556009805482167310f91a00370e253be8a20a654c2edfa15d8225f0179055600a805490911690556c0c9f2c9cd04674edea40000000600b81905562000074905f196200029b565b62000081905f19620002bb565b600c55604080518082019091526008815267474f4f474c45414960c01b6020820152600e90620000b290826200037f565b50604080518082019091526008815267474f4f474c45414960c01b6020820152600f90620000e190826200037f565b506010805460ff1916601290811790915560096011819055905560466013819055601455600160158190556016553480156200011b575f80fd5b505f80546001600160a01b031916735fb5efa7b4ea98e79f07594e6ab51d778a4e4f7890811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460015f620001865f546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550600160045f620001be6200028d60201b60201c565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526004909352818320805485166001908117909155600854821684528284208054861682179055600954909116835291208054909216179055620002385f546001600160a01b031690565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200027f91815260200190565b60405180910390a36200044b565b5f546001600160a01b031690565b5f82620002b657634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115620002db57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200030a57607f821691505b6020821081036200032957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200037a57805f5260205f20601f840160051c81016020851015620003565750805b601f840160051c820191505b8181101562000377575f815560010162000362565b50505b505050565b81516001600160401b038111156200039b576200039b620002e1565b620003b381620003ac8454620002f5565b846200032f565b602080601f831160018114620003e9575f8415620003d15750858301515b5f19600386901b1c1916600185901b17855562000443565b5f85815260208120601f198616915b828110156200041957888601518255948401946001909101908401620003f8565b50858210156200043757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611cbb80620004595f395ff3fe608060405260043610610198575f3560e01c80635342acb4116100e757806395d89b4111610087578063d147518511610062578063d147518514610483578063dd62ed3e14610498578063ec44acf2146104dc578063f2fde38b146104f5575f80fd5b806395d89b4114610431578063a457c2d714610445578063a9059cbb14610464575f80fd5b8063715018a6116100c2578063715018a6146103c257806388f82020146103d65780638a8c523c1461040d5780638da5cb5b14610415575f80fd5b80635342acb4146103575780635d5ee5ed1461038e57806370a08231146103a3575f80fd5b80632d838119116101525780633b124fe71161012d5780633b124fe7146102e35780633bd5d173146102f85780634549b0391461031957806349bd5a5e14610338575f80fd5b80632d83811914610284578063313ce567146102a357806339509351146102c4575f80fd5b806306fdde03146101a3578063095ea7b3146101cd57806313114a9d146101fc5780631694505e1461021a57806318160ddd1461025157806323b872dd14610265575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101b7610514565b6040516101c49190611982565b60405180910390f35b3480156101d8575f80fd5b506101ec6101e73660046119e5565b6105a4565b60405190151581526020016101c4565b348015610207575f80fd5b50600d545b6040519081526020016101c4565b348015610225575f80fd5b50601754610239906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561025c575f80fd5b50600b5461020c565b348015610270575f80fd5b506101ec61027f366004611a0f565b6105ba565b34801561028f575f80fd5b5061020c61029e366004611a4d565b610621565b3480156102ae575f80fd5b5060105460405160ff90911681526020016101c4565b3480156102cf575f80fd5b506101ec6102de3660046119e5565b6106a8565b3480156102ee575f80fd5b5061020c60115481565b348015610303575f80fd5b50610317610312366004611a4d565b6106dd565b005b348015610324575f80fd5b5061020c610333366004611a71565b6107c5565b348015610343575f80fd5b50601854610239906001600160a01b031681565b348015610362575f80fd5b506101ec610371366004611a9f565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610399575f80fd5b5061020c60155481565b3480156103ae575f80fd5b5061020c6103bd366004611a9f565b610851565b3480156103cd575f80fd5b506103176108ad565b3480156103e1575f80fd5b506101ec6103f0366004611a9f565b6001600160a01b03165f9081526005602052604090205460ff1690565b61031761091e565b348015610420575f80fd5b505f546001600160a01b0316610239565b34801561043c575f80fd5b506101b7610c70565b348015610450575f80fd5b506101ec61045f3660046119e5565b610c7f565b34801561046f575f80fd5b506101ec61047e3660046119e5565b610ccc565b34801561048e575f80fd5b5061020c60135481565b3480156104a3575f80fd5b5061020c6104b2366004611aba565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156104e7575f80fd5b506006546101ec9060ff1681565b348015610500575f80fd5b5061031761050f366004611a9f565b610cd8565b6060600e805461052390611ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461054f90611ae6565b801561059a5780601f106105715761010080835404028352916020019161059a565b820191905f5260205f20905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b5f6105b0338484610dbf565b5060015b92915050565b5f6105c6848484610ee2565b610617843361061285604051806060016040528060288152602001611c39602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611034565b610dbf565b5060019392505050565b5f600c5482111561068c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b5f61069561105f565b90506106a18382611080565b9392505050565b335f8181526003602090815260408083206001600160a01b038716845290915281205490916105b0918590610612908661108b565b335f8181526005602052604090205460ff16156107515760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610683565b5f61075b83611096565b5050506001600160a01b0386165f90815260016020526040902054939450610788939250849150506110e9565b6001600160a01b0383165f90815260016020526040902055600c546107ad90826110e9565b600c55600d546107bd908461108b565b600d55505050565b5f600b548311156108185760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610683565b81610837575f61082784611096565b509496506105b495505050505050565b5f61084184611096565b509396506105b495505050505050565b6001600160a01b0381165f9081526005602052604081205460ff161561088c57506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f908152600160205260409020546105b490610621565b5f546001600160a01b031633146108d65760405162461bcd60e51b815260040161068390611b1e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109475760405162461bcd60e51b815260040161068390611b1e565b60065460ff161561098c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610683565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600b546109c3913091610dbf565b60175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a379190611b53565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190611b53565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610b04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b289190611b53565b601880546001600160a01b0319166001600160a01b039283161790556017541663f305d7193430610b5881610851565b60095460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092525f6044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015610bc2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610be79190611b6e565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190611b99565b506006805460ff19166001179055565b6060600f805461052390611ae6565b5f6105b0338461061285604051806060016040528060258152602001611c6160259139335f9081526003602090815260408083206001600160a01b038d1684529091529020549190611034565b5f6105b0338484610ee2565b5f546001600160a01b03163314610d015760405162461bcd60e51b815260040161068390611b1e565b6001600160a01b038116610d665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610683565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610683565b6001600160a01b038216610e825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610683565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111610f435760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610683565b6001600160a01b0383165f9081526004602052604090205460ff16158015610f8357506001600160a01b0382165f9081526004602052604090205460ff16155b15610fda5760065460ff16610fda5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610683565b6001600160a01b0383165f9081526004602052604090205460019060ff168061101a57506001600160a01b0383165f9081526004602052604090205460ff165b1561102257505f5b61102e848484846110f4565b50505050565b5f81848411156110575760405162461bcd60e51b81526004016106839190611982565b505050900390565b5f805f61106a611269565b90925090506110798282611080565b9250505090565b5f6106a18284611bc8565b5f6106a18284611be7565b5f805f805f805f805f805f6110aa8c6113d8565b93509350935093505f805f6110c98f8787876110c461105f565b611427565b919f509d509b509599509397509195509350505050919395979092949650565b5f6106a18284611bfa565b8061110157611101611484565b6001600160a01b0384165f9081526005602052604090205460ff16801561114057506001600160a01b0383165f9081526005602052604090205460ff16155b15611155576111508484846114bc565b61124d565b6001600160a01b0384165f9081526005602052604090205460ff1615801561119457506001600160a01b0383165f9081526005602052604090205460ff165b156111a4576111508484846115f9565b6001600160a01b0384165f9081526005602052604090205460ff161580156111e457506001600160a01b0383165f9081526005602052604090205460ff16155b156111f4576111508484846116b0565b6001600160a01b0384165f9081526005602052604090205460ff16801561123257506001600160a01b0383165f9081526005602052604090205460ff165b1561124257611150848484611704565b61124d8484846116b0565b8061102e5761102e601254601155601454601355601654601555565b600c54600b545f918291825b6007548110156113a8578260015f6007848154811061129657611296611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806112fe57508160025f600784815481106112d8576112d8611c0d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561131457600c54600b54945094505050509091565b61135860015f6007848154811061132d5761132d611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906110e9565b925061139e60025f6007848154811061137357611373611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906110e9565b9150600101611275565b50600b54600c546113b891611080565b8210156113cf57600c54600b549350935050509091565b90939092509050565b5f805f805f6113e686611786565b90505f6113f2876117a8565b90505f6113fe886117c4565b90505f6114178261141185818d896110e9565b906110e9565b9993985091965094509092505050565b5f80808061143589866117e0565b90505f61144289876117e0565b90505f61144f89886117e0565b90505f61145c89896117e0565b90505f61146f82611411858189896110e9565b949d949c50929a509298505050505050505050565b6011541580156114945750601554155b1561149b57565b6011805460125560138054601455601580546016555f928390559082905555565b5f805f805f805f6114cc88611096565b96509650965096509650965096506115108860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461153e90886110e9565b6001600160a01b03808c165f9081526001602052604080822093909355908b168152205461156c908761108b565b6001600160a01b038a165f9081526001602052604090205561158d826117eb565b611596816118a5565b6115a0858461195e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516115e591815260200190565b60405180910390a350505050505050505050565b5f805f805f805f61160988611096565b965096509650965096509650965061164d8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b03808c165f90815260016020908152604080832094909455918c16815260029091522054611682908561108b565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461156c908761108b565b5f805f805f805f6116c088611096565b965096509650965096509650965061153e8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b5f805f805f805f61171488611096565b96509650965096509650965096506117588860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461164d90886110e9565b5f6105b46103e86117a2601154856117e090919063ffffffff16565b90611080565b5f6105b46103e86117a2601554856117e090919063ffffffff16565b5f6105b46103e86117a2601354856117e090919063ffffffff16565b5f6106a18284611c21565b5f6117f461105f565b90505f61180183836117e0565b600a546001600160a01b03165f90815260016020526040902054909150611828908261108b565b600a80546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a057600a546001600160a01b03165f90815260026020526040902054611885908461108b565b600a546001600160a01b03165f908152600260205260409020555b505050565b5f6118ae61105f565b90505f6118bb83836117e0565b6008546001600160a01b03165f908152600160205260409020549091506118e2908261108b565b600880546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a0576008546001600160a01b03165f9081526002602052604090205461193f908461108b565b6008546001600160a01b03165f90815260026020526040902055505050565b600c5461196b90836110e9565b600c55600d5461197b908261108b565b600d555050565b5f602080835283518060208501525f5b818110156119ae57858101830151858201604001528201611992565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119e2575f80fd5b50565b5f80604083850312156119f6575f80fd5b8235611a01816119ce565b946020939093013593505050565b5f805f60608486031215611a21575f80fd5b8335611a2c816119ce565b92506020840135611a3c816119ce565b929592945050506040919091013590565b5f60208284031215611a5d575f80fd5b5035919050565b80151581146119e2575f80fd5b5f8060408385031215611a82575f80fd5b823591506020830135611a9481611a64565b809150509250929050565b5f60208284031215611aaf575f80fd5b81356106a1816119ce565b5f8060408385031215611acb575f80fd5b8235611ad6816119ce565b91506020830135611a94816119ce565b600181811c90821680611afa57607f821691505b602082108103611b1857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611b63575f80fd5b81516106a1816119ce565b5f805f60608486031215611b80575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611ba9575f80fd5b81516106a181611a64565b634e487b7160e01b5f52601160045260245ffd5b5f82611be257634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105b4576105b4611bb4565b818103818111156105b4576105b4611bb4565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176105b4576105b4611bb456fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064cdb4e5acdbd1dfbc752cf7286df9726bdd8211846a5d0f3924a4fe55d5b08d64736f6c63430008160033