0x60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b146101005780639f1b52481461012d578063a007964e1461014d578063ad5cd6ae1461016d578063f2fde38b146101f857600080fd5b806304824e70146100965780635d799f87146100b8578063715018a6146100d85780637bb527ff146100ed57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b1366004610e8f565b610218565b005b3480156100c457600080fd5b506100b66100d3366004610eb1565b610258565b3480156100e457600080fd5b506100b6610369565b6100b66100fb366004610ee4565b61039f565b34801561010c57600080fd5b506001546040516001600160a01b0390911681526020015b60405180910390f35b34801561013957600080fd5b506100b6610148366004610f19565b6104e5565b34801561015957600080fd5b506100b6610168366004610f51565b610802565b34801561017957600080fd5b506101c5610188366004611015565b6000908152600260208190526040909120805460018201549282015460038301546004909301546001600160a01b03928316959290941693909291565b604080516001600160a01b039687168152959094166020860152928401919091526060830152608082015260a001610124565b34801561020457600080fd5b506100b6610213366004610e8f565b610b1f565b6001546001600160a01b0316331461024b5760405162461bcd60e51b81526004016102429061102e565b60405180910390fd5b6102558147610bb7565b50565b6001546001600160a01b031633146102825760405162461bcd60e51b81526004016102429061102e565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa1580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190611063565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b6020604051808303816000875af1158015610340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610364919061107c565b505050565b6001546001600160a01b031633146103935760405162461bcd60e51b81526004016102429061102e565b61039d6000610c1c565b565b6002600054036103c15760405162461bcd60e51b81526004016102429061109e565b6002600055333b156103e55760405162461bcd60e51b8152600401610242906110d5565b3332146104045760405162461bcd60e51b815260040161024290611103565b60008381526002602052604090206005015460ff161561045b5760405162461bcd60e51b8152602060048201526012602482015271149959115b9d995b1bdc0818dc99585d195960721b6044820152606401610242565b60008381526002602081905260409091208054336001600160a01b03199182161782556001820180549091166001600160a01b0386161790559081018290556003018190556104ad4262015180611150565b60008481526002602052604090206004810191909155600501805460ff191660011790556104db8282610c6e565b5050600160005550565b6002600054036105075760405162461bcd60e51b81526004016102429061109e565b6002600055333b1561052b5760405162461bcd60e51b8152600401610242906110d5565b33321461054a5760405162461bcd60e51b815260040161024290611103565b60008281526002602052604090206004015442116105b45760405162461bcd60e51b815260206004820152602160248201527f46696e616c57697468647261773a20576974686472617720746f6f206561726c6044820152607960f81b6064820152608401610242565b600082815260026020526040902060050154610100900460ff161561062b5760405162461bcd60e51b815260206004820152602760248201527f46696e616c57697468647261773a20596f752063616e277420776974686472616044820152667720747769636560c81b6064820152608401610242565b6000828152600260205260409020546001600160a01b0316336001600160a01b0316146106a65760405162461bcd60e51b8152602060048201526024808201527f46696e616c57697468647261773a2043616c6c6572206973206e6f742063726560448201526330ba37b960e11b6064820152608401610242565b600082815260026020526040902060030154811480156106c65750600081115b61071e5760405162461bcd60e51b8152602060048201526024808201527f46696e616c57697468647261773a2057726f6e6720776974686472617720616d6044820152631bdd5b9d60e21b6064820152608401610242565b600082815260026020526040812060058101805461ff0019166101001790556003810191909155600101546001600160a01b0316610765576107603382610bb7565b6107f9565b6000828152600260205260409020600101546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156107d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f7919061107c565b505b50506001600055565b6002600054036108245760405162461bcd60e51b81526004016102429061109e565b6002600055333b156108485760405162461bcd60e51b8152600401610242906110d5565b3332146108675760405162461bcd60e51b815260040161024290611103565b6001600160a01b037f0000000000000000000000008a4dc3aacabe67fc6d1231b884ccb283f54a112a1661089d33858585610d0a565b6001600160a01b0316146108f35760405162461bcd60e51b815260206004820152601b60248201527f477261623a204e6f7420656c696769626c6520666f72206772616200000000006044820152606401610242565b600083815260026020908152604080832033845260060190915290205460ff16156109535760405162461bcd60e51b815260206004820152601060248201526f43616e2774206772616220747769636560801b6044820152606401610242565b6000838152600260205260409020600301548211156109b45760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682072656420656e76656c6f70657300000000000000006044820152606401610242565b600083815260026020526040902060050154610100900460ff1615610a0e5760405162461bcd60e51b815260206004820152601060248201526f2a34329033b930b11034b99037bb32b960811b6044820152606401610242565b6000838152600260208181526040808420338552600681018352908420805460ff191660011790558684529190526003018054849290610a4f908490611168565b90915550506000838152600260205260409020600101546001600160a01b0316610a8257610a7d3383610bb7565b6104db565b6000838152600260205260409020600101546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b14919061107c565b505050600160005550565b6001546001600160a01b03163314610b495760405162461bcd60e51b81526004016102429061102e565b6001600160a01b038116610bae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610242565b61025581610c1c565b600080600080600085875af19050806103645760405162461bcd60e51b815260206004820152602160248201527f5f7472616e736665724574683a20457468207472616e73666572206661696c656044820152601960fa1b6064820152608401610242565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610cd15780341015610cc35760405162461bcd60e51b81526020600482015260146024820152731ddc9bdb99c819195c1bdcda5d08185b5bdd5b9d60621b6044820152606401610242565b610ccd3082610bb7565b5050565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd90606401610321565b60008151604114610d5d5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610242565b60208281015160408085015160608087015183516bffffffffffffffffffffffff198c841b811682890152603482018c9052605482018b90523090931b9092166074830152835180830360680181526088830185528051908701207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a884015260c4808401919091528451808403909101815260e483018086528151918801919091206000918290526101048401808752521a610124820181905261014482018590526101648201839052925193949193600192610184808401939192601f1981019281900390910190855afa158015610e5c573d6000803e3d6000fd5b5050604051601f1901519998505050505050505050565b80356001600160a01b0381168114610e8a57600080fd5b919050565b600060208284031215610ea157600080fd5b610eaa82610e73565b9392505050565b60008060408385031215610ec457600080fd5b610ecd83610e73565b9150610edb60208401610e73565b90509250929050565b600080600060608486031215610ef957600080fd5b83359250610f0960208501610e73565b9150604084013590509250925092565b60008060408385031215610f2c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215610f6657600080fd5b8335925060208401359150604084013567ffffffffffffffff80821115610f8c57600080fd5b818601915086601f830112610fa057600080fd5b813581811115610fb257610fb2610f3b565b604051601f8201601f19908116603f01168101908382118183101715610fda57610fda610f3b565b81604052828152896020848701011115610ff357600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561102757600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561107557600080fd5b5051919050565b60006020828403121561108e57600080fd5b81518015158114610eaa57600080fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526014908201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604082015260600190565b6020808252601a908201527f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156111635761116361113a565b500190565b60008282101561117a5761117a61113a565b50039056fea26469706673582212201be653b40fa8b20b6f989aad052292ad37982fa195b5d68db8a8b1add4aadd0664736f6c634300080d0033