0x6080604052600436106100ce5760003560e01c806313c8fa5c146100d3578063237909d0146101135780633408e470146101355780633fe7c9fe146101485780635eb5143914610168578063715018a61461017b5780638da5cb5b1461019057806391c3959a146101bd578063b1cc7449146101f3578063c087f9dc14610213578063ca777fbf14610233578063cbd6acf514610253578063d8f14f2b14610273578063ed617da4146102a7578063f16565ee146102dd578063f2fde38b146102fd578063f78d935e1461031d575b600080fd5b3480156100df57600080fd5b506101006100ee366004611010565b60046020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561011f57600080fd5b5061013361012e366004611029565b610355565b005b34801561014157600080fd5b5046610100565b34801561015457600080fd5b50610133610163366004611059565b61038b565b6101336101763660046110b4565b6103a5565b34801561018757600080fd5b506101336104df565b34801561019c57600080fd5b506101a56104f3565b6040516001600160a01b03909116815260200161010a565b3480156101c957600080fd5b506101a56101d8366004611010565b6002602052600090815260409020546001600160a01b031681565b3480156101ff57600080fd5b5061013361020e36600461107b565b610502565b34801561021f57600080fd5b5061013361022e366004611029565b6105d0565b34801561023f57600080fd5b506001546101a5906001600160a01b031681565b34801561025f57600080fd5b5061013361026e366004610eb9565b610606565b34801561027f57600080fd5b506101a57f00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca181565b3480156102b357600080fd5b506101a56102c2366004611010565b6003602052600090815260409020546001600160a01b031681565b3480156102e957600080fd5b506101336102f8366004610ef3565b610630565b34801561030957600080fd5b50610133610318366004610eb9565b610651565b34801561032957600080fd5b50610100610338366004611059565b600560209081526000928352604080842090915290825290205481565b61035d6106ca565b60009182526002602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6103936106ca565b60009182526004602052604090912055565b6000848152600260205260409020546001600160a01b03166103e25760405162461bcd60e51b81526004016103d99061117a565b60405180910390fd5b6103ec8484610729565b6104216001600160a01b037f00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1163330866107cf565b60408051466024820152604481018590526001600160a01b0384166064808301919091528251808303909101815260849091019091526020810180516001600160e01b031663b1cc744960e01b179052600061047e828785610840565b6040805133815260208101889052908101889052909150819063ffffffff8516906001600160a01b038716907f14325a7e9db036f21c8b588e820b0c2413e30cf03e75720b7ac6b6e85b04ca9f9060600160405180910390a4505050505050565b6104e76106ca565b6104f1600061092b565b565b6000546001600160a01b031690565b6000838152600360205260409020546001600160a01b03166105365760405162461bcd60e51b81526004016103d99061117a565b61053f8361097b565b6105498383610729565b61057d6001600160a01b037f00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1168284610c09565b806001600160a01b031683336001600160a01b03167f17a47c3640e01bce0ad23c20907bc651cab2af1b0abc543ae1da119b43de8cca856040516105c391815260200190565b60405180910390a4505050565b6105d86106ca565b60009182526003602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b61060e6106ca565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6106386106ca565b61064c6001600160a01b0384168383610c09565b505050565b6106596106ca565b6001600160a01b0381166106be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b6106c78161092b565b50565b336106d36104f3565b6001600160a01b0316146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d9565b6000610738620151804261122e565b6000848152600560209081526040808320848452909152812080549293508492909190610766908490611208565b90915550506000838152600560209081526040808320848452825280832054868452600490925290912054101561064c5760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b60448201526064016103d9565b6040516001600160a01b038085166024830152831660448201526064810182905261083a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610c39565b50505050565b60008061085c60026001610855848280610d0b565b9190610d0b565b6001546000868152600260209081526040918290205491519394506001600160a01b03928316936325ff97a09334938a9361089c93919092169101611133565b6040516020818303038152906040528986896040518763ffffffff1660e01b81526004016108ce9594939291906111be565b6020604051808303818588803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109209190610f56565b9150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60015460408051630b69a22b60e21b815290516000926001600160a01b031691632da688ac916004808301926020929190829003018186803b1580156109c057600080fd5b505afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190610ed6565b90506001600160a01b0381163314610a425760405162461bcd60e51b815260206004820152600d60248201526c4e6f742063616c6c50726f787960981b60448201526064016103d9565b6000816001600160a01b031663508ab0a06040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190610f56565b9050828114610b025760405162461bcd60e51b8152602060048201526017602482015276086d0c2d2dc40d2c840c8decae640dcdee840dac2e8c6d604b1b60448201526064016103d9565b6000826001600160a01b0316632eb484916040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3f57600080fd5b505af1158015610b53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b7b9190810190610f6f565b80516020808301919091206000858152600383526040908190205490519394509092610bb3926001600160a01b039092169101611133565b604051602081830303815290604052805190602001201461083a5760405162461bcd60e51b815260206004820152601060248201526f2737ba103b30b634b21039b2b73232b960811b60448201526064016103d9565b6040516001600160a01b03831660248201526044810182905261064c90849063a9059cbb60e01b90606401610803565b6000610c8e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d2c9092919063ffffffff16565b80519091501561064c5780806020019051810190610cac9190610f34565b61064c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d9565b60008115610d1f57506001821b8317610924565b506001821b198316610924565b6060610d3b8484600085610d43565b949350505050565b606082471015610da45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d9565b600080866001600160a01b03168587604051610dc0919061114b565b60006040518083038185875af1925050503d8060008114610dfd576040519150601f19603f3d011682016040523d82523d6000602084013e610e02565b606091505b5091509150610e1387838387610e1e565b979650505050505050565b60608315610e8a578251610e83576001600160a01b0385163b610e835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d9565b5081610d3b565b610d3b8383815115610e9f5781518083602001fd5b8060405162461bcd60e51b81526004016103d99190611167565b600060208284031215610ecb57600080fd5b813561092481611292565b600060208284031215610ee857600080fd5b815161092481611292565b600080600060608486031215610f0857600080fd5b8335610f1381611292565b92506020840135610f2381611292565b929592945050506040919091013590565b600060208284031215610f4657600080fd5b8151801515811461092457600080fd5b600060208284031215610f6857600080fd5b5051919050565b600060208284031215610f8157600080fd5b81516001600160401b0380821115610f9857600080fd5b818401915084601f830112610fac57600080fd5b815181811115610fbe57610fbe61127c565b604051601f8201601f19908116603f01168101908382118183101715610fe657610fe661127c565b81604052828152876020848701011115610fff57600080fd5b610e13836020830160208801611250565b60006020828403121561102257600080fd5b5035919050565b6000806040838503121561103c57600080fd5b82359150602083013561104e81611292565b809150509250929050565b6000806040838503121561106c57600080fd5b50508035926020909101359150565b60008060006060848603121561109057600080fd5b833592506020840135915060408401356110a981611292565b809150509250925092565b600080600080608085870312156110ca57600080fd5b843593506020850135925060408501356110e381611292565b9150606085013563ffffffff811681146110fc57600080fd5b939692955090935050565b6000815180845261111f816020860160208601611250565b601f01601f19169290920160200192915050565b60609190911b6001600160601b031916815260140190565b6000825161115d818460208701611250565b9190910192915050565b6020815260006109246020830184611107565b60208082526024908201527f436861696e20636f6e74726163742061646472657373206e6f74207370656369604082015263199a595960e21b606082015260800190565b85815260a0602082015260006111d760a0830187611107565b82810360408401526111e98187611107565b91505083606083015263ffffffff831660808301529695505050505050565b6000821982111561122957634e487b7160e01b600052601160045260246000fd5b500190565b60008261124b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b8381101561126b578181015183820152602001611253565b8381111561083a5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146106c757600080fdfea264697066735822122013739708d4ec6d51d882a10266abcfdb26b2a51490e247766ca9eb6b444bc67e64736f6c63430008070033
0x60a060405234801561001057600080fd5b506040516200141c3803806200141c833981016040819052610031916100c0565b61003a33610070565b600180546001600160a01b0319166001600160a01b03939093169290921790915560601b6001600160601b031916608052610112565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100d357600080fd5b82516100de816100fa565b60208401519092506100ef816100fa565b809150509250929050565b6001600160a01b038116811461010f57600080fd5b50565b60805160601c6112dd6200013f60003960008181610285015281816103f9015261055601526112dd6000f3fe6080604052600436106100ce5760003560e01c806313c8fa5c146100d3578063237909d0146101135780633408e470146101355780633fe7c9fe146101485780635eb5143914610168578063715018a61461017b5780638da5cb5b1461019057806391c3959a146101bd578063b1cc7449146101f3578063c087f9dc14610213578063ca777fbf14610233578063cbd6acf514610253578063d8f14f2b14610273578063ed617da4146102a7578063f16565ee146102dd578063f2fde38b146102fd578063f78d935e1461031d575b600080fd5b3480156100df57600080fd5b506101006100ee366004611010565b60046020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561011f57600080fd5b5061013361012e366004611029565b610355565b005b34801561014157600080fd5b5046610100565b34801561015457600080fd5b50610133610163366004611059565b61038b565b6101336101763660046110b4565b6103a5565b34801561018757600080fd5b506101336104df565b34801561019c57600080fd5b506101a56104f3565b6040516001600160a01b03909116815260200161010a565b3480156101c957600080fd5b506101a56101d8366004611010565b6002602052600090815260409020546001600160a01b031681565b3480156101ff57600080fd5b5061013361020e36600461107b565b610502565b34801561021f57600080fd5b5061013361022e366004611029565b6105d0565b34801561023f57600080fd5b506001546101a5906001600160a01b031681565b34801561025f57600080fd5b5061013361026e366004610eb9565b610606565b34801561027f57600080fd5b506101a57f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b357600080fd5b506101a56102c2366004611010565b6003602052600090815260409020546001600160a01b031681565b3480156102e957600080fd5b506101336102f8366004610ef3565b610630565b34801561030957600080fd5b50610133610318366004610eb9565b610651565b34801561032957600080fd5b50610100610338366004611059565b600560209081526000928352604080842090915290825290205481565b61035d6106ca565b60009182526002602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6103936106ca565b60009182526004602052604090912055565b6000848152600260205260409020546001600160a01b03166103e25760405162461bcd60e51b81526004016103d99061117a565b60405180910390fd5b6103ec8484610729565b6104216001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330866107cf565b60408051466024820152604481018590526001600160a01b0384166064808301919091528251808303909101815260849091019091526020810180516001600160e01b031663b1cc744960e01b179052600061047e828785610840565b6040805133815260208101889052908101889052909150819063ffffffff8516906001600160a01b038716907f14325a7e9db036f21c8b588e820b0c2413e30cf03e75720b7ac6b6e85b04ca9f9060600160405180910390a4505050505050565b6104e76106ca565b6104f1600061092b565b565b6000546001600160a01b031690565b6000838152600360205260409020546001600160a01b03166105365760405162461bcd60e51b81526004016103d99061117a565b61053f8361097b565b6105498383610729565b61057d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284610c09565b806001600160a01b031683336001600160a01b03167f17a47c3640e01bce0ad23c20907bc651cab2af1b0abc543ae1da119b43de8cca856040516105c391815260200190565b60405180910390a4505050565b6105d86106ca565b60009182526003602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b61060e6106ca565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6106386106ca565b61064c6001600160a01b0384168383610c09565b505050565b6106596106ca565b6001600160a01b0381166106be5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d9565b6106c78161092b565b50565b336106d36104f3565b6001600160a01b0316146104f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d9565b6000610738620151804261122e565b6000848152600560209081526040808320848452909152812080549293508492909190610766908490611208565b90915550506000838152600560209081526040808320848452825280832054868452600490925290912054101561064c5760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b60448201526064016103d9565b6040516001600160a01b038085166024830152831660448201526064810182905261083a9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610c39565b50505050565b60008061085c60026001610855848280610d0b565b9190610d0b565b6001546000868152600260209081526040918290205491519394506001600160a01b03928316936325ff97a09334938a9361089c93919092169101611133565b6040516020818303038152906040528986896040518763ffffffff1660e01b81526004016108ce9594939291906111be565b6020604051808303818588803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109209190610f56565b9150505b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60015460408051630b69a22b60e21b815290516000926001600160a01b031691632da688ac916004808301926020929190829003018186803b1580156109c057600080fd5b505afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f89190610ed6565b90506001600160a01b0381163314610a425760405162461bcd60e51b815260206004820152600d60248201526c4e6f742063616c6c50726f787960981b60448201526064016103d9565b6000816001600160a01b031663508ab0a06040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a7f57600080fd5b505af1158015610a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab79190610f56565b9050828114610b025760405162461bcd60e51b8152602060048201526017602482015276086d0c2d2dc40d2c840c8decae640dcdee840dac2e8c6d604b1b60448201526064016103d9565b6000826001600160a01b0316632eb484916040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3f57600080fd5b505af1158015610b53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b7b9190810190610f6f565b80516020808301919091206000858152600383526040908190205490519394509092610bb3926001600160a01b039092169101611133565b604051602081830303815290604052805190602001201461083a5760405162461bcd60e51b815260206004820152601060248201526f2737ba103b30b634b21039b2b73232b960811b60448201526064016103d9565b6040516001600160a01b03831660248201526044810182905261064c90849063a9059cbb60e01b90606401610803565b6000610c8e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d2c9092919063ffffffff16565b80519091501561064c5780806020019051810190610cac9190610f34565b61064c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d9565b60008115610d1f57506001821b8317610924565b506001821b198316610924565b6060610d3b8484600085610d43565b949350505050565b606082471015610da45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d9565b600080866001600160a01b03168587604051610dc0919061114b565b60006040518083038185875af1925050503d8060008114610dfd576040519150601f19603f3d011682016040523d82523d6000602084013e610e02565b606091505b5091509150610e1387838387610e1e565b979650505050505050565b60608315610e8a578251610e83576001600160a01b0385163b610e835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d9565b5081610d3b565b610d3b8383815115610e9f5781518083602001fd5b8060405162461bcd60e51b81526004016103d99190611167565b600060208284031215610ecb57600080fd5b813561092481611292565b600060208284031215610ee857600080fd5b815161092481611292565b600080600060608486031215610f0857600080fd5b8335610f1381611292565b92506020840135610f2381611292565b929592945050506040919091013590565b600060208284031215610f4657600080fd5b8151801515811461092457600080fd5b600060208284031215610f6857600080fd5b5051919050565b600060208284031215610f8157600080fd5b81516001600160401b0380821115610f9857600080fd5b818401915084601f830112610fac57600080fd5b815181811115610fbe57610fbe61127c565b604051601f8201601f19908116603f01168101908382118183101715610fe657610fe661127c565b81604052828152876020848701011115610fff57600080fd5b610e13836020830160208801611250565b60006020828403121561102257600080fd5b5035919050565b6000806040838503121561103c57600080fd5b82359150602083013561104e81611292565b809150509250929050565b6000806040838503121561106c57600080fd5b50508035926020909101359150565b60008060006060848603121561109057600080fd5b833592506020840135915060408401356110a981611292565b809150509250925092565b600080600080608085870312156110ca57600080fd5b843593506020850135925060408501356110e381611292565b9150606085013563ffffffff811681146110fc57600080fd5b939692955090935050565b6000815180845261111f816020860160208601611250565b601f01601f19169290920160200192915050565b60609190911b6001600160601b031916815260140190565b6000825161115d818460208701611250565b9190910192915050565b6020815260006109246020830184611107565b60208082526024908201527f436861696e20636f6e74726163742061646472657373206e6f74207370656369604082015263199a595960e21b606082015260800190565b85815260a0602082015260006111d760a0830187611107565b82810360408401526111e98187611107565b91505083606083015263ffffffff831660808301529695505050505050565b6000821982111561122957634e487b7160e01b600052601160045260246000fd5b500190565b60008261124b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b8381101561126b578181015183820152602001611253565b8381111561083a5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146106c757600080fdfea264697066735822122013739708d4ec6d51d882a10266abcfdb26b2a51490e247766ca9eb6b444bc67e64736f6c6343000807003300000000000000000000000043de2d77bf8027e25dbd179b491e8d64f38398aa00000000000000000000000038e4adb44ef08f22f5b5b76a8f0c2d0dcbe7dca1