0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063715018a61161005b578063715018a6146100d95780638da5cb5b146100e1578063c4d66de8146100e9578063f2fde38b146100fc5761007d565b806307546172146100825780630900f010146100b157806322dbae32146100c6575b600080fd5b606554610095906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100c46100bf366004610990565b61010f565b005b6100956100d43660046109b1565b6101a2565b6100c4610280565b610095610294565b6100c46100f7366004610990565b6102a4565b6100c461010a366004610990565b610422565b6101176104b2565b806001600160a01b0316633659cfe661012e610511565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561018757600080fd5b505af115801561019b573d6000803e3d6000fd5b5050505050565b60006101ac6104b2565b60006101b8858561065a565b6040516001600160a01b03821681529091507f183e50e714a4af1facd4f941d2c40f0d40261b250503d241334bcce7bc3593b09060200160405180910390a16065546040517f298a26870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018690529091169063298a2687906044015b600060405180830381600087803b15801561025f57600080fd5b505af1158015610273573d6000803e3d6000fd5b5092979650505050505050565b6102886104b2565b61029260006107dc565b565b6033546001600160a01b03165b90565b600054610100900460ff16158080156102c45750600054600160ff909116105b806102e557506102d330610846565b1580156102e5575060005460ff166001145b61035c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561039d576000805461ff0019166101001790555b6103a5610859565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416179055801561041e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61042a6104b2565b6001600160a01b0381166104a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610353565b6104af816107dc565b50565b336104bb610294565b6001600160a01b0316146102925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610353565b6040516000907f4661726d696e67563300000000000000000000000000000000000000000000009082906105476020820161095f565b601f1982820381018352601f90910116604081815282516020808501919091207fff00000000000000000000000000000000000000000000000000000000000000828501527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660218501526035840187905260558085019190915282518085039091018152607590930190915281519101209350905082803b156105f2575050506102a1565b828251602084016000f593506001600160a01b0384166106545760405162461bcd60e51b815260206004820152601960248201527f556e61626c6520746f2063726561746520636f6e7472616374000000000000006044820152606401610353565b50505090565b6000807f83b43589000000000000000000000000000000000000000000000000000000008484610688610294565b6040516001600160a01b0393841660248201529183166044830152909116606482015260a06084820152600760c48201527f4661726d696e670000000000000000000000000000000000000000000000000060e482015260e060a482015260026101048201527f563300000000000000000000000000000000000000000000000000000000000061012482015261014401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006040516107869061096c565b604051809103906000f0801580156107a2573d6000803e3d6000fd5b509050806001600160a01b031663cf7a1d776107bc610511565b30856040518463ffffffff1660e01b8152600401610245939291906109ec565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381163b15155b919050565b600054610100900460ff166108d65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610353565b610292600054610100900460ff166109565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610353565b610292336107dc565b6139cb80610a5d83390190565b610b5e8061442883390190565b80356001600160a01b038116811461085457600080fd5b6000602082840312156109a1578081fd5b6109aa82610979565b9392505050565b6000806000606084860312156109c5578182fd5b6109ce84610979565b92506109dc60208501610979565b9150604084013590509250925092565b60006001600160a01b0380861683526020818616818501526060604085015284519150816060850152825b82811015610a3357858101820151858201608001528101610a17565b82811115610a445783608084870101525b5050601f01601f19169190910160800194935050505056fe608060405234801561001057600080fd5b506139ab806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806383b43589116100ee578063e31ed88e11610097578063f430cf0d11610071578063f430cf0d14610383578063fc0c546a146103ab578063fccf03af146103be578063fee151b0146103d1576101ae565b8063e31ed88e1461035f578063ed24911d14610368578063f2fde38b14610370576101ae565b8063b6b55f25116100c8578063b6b55f2514610330578063cb13cddb14610343578063d7a74e1414610356576101ae565b806383b43589146102ec5780638da5cb5b146102ff578063ae27872514610310576101ae565b80633d18b9121161015b5780635603b9f9116101355780635603b9f9146102b657806360e8f13a146102c9578063715018a6146102d157806378b3b40e146102d9576101ae565b80633d18b9121461029357806340ef1e041461029b57806351004381146102a3576101ae565b80631d8557d71161018c5780631d8557d71461026557806321df0da71461026f5780632e1a7d4d14610280576101ae565b806307546172146101b35780630ba9c976146101e35780631959a002146101f5575b600080fd5b6066546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6067545b6040519081526020016101da565b610238610203366004613394565b606a60205260009081526040902080546001820154600283015460048401546005850154600690950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101da565b61026d6103d9565b005b6065546001600160a01b03166101c6565b61026d61028e36600461372e565b6103e3565b61026d6103f1565b61026d610bc7565b61026d6102b1366004613591565b610bde565b61026d6102c43660046133d3565b610d4a565b606b546101e7565b61026d611007565b61026d6102e736600461375e565b611019565b61026d6102fa36600461340b565b611152565b6033546001600160a01b03166101c6565b61032361031e3660046134b0565b611340565b6040516101da91906137dd565b61026d61033e36600461372e565b611681565b6101e7610351366004613394565b6117b5565b6101e7606c5481565b6101e7606b5481565b6101e76117d4565b61026d61037e366004613394565b6117e3565b6103966103913660046134b0565b611870565b604080519283526020830191909152016101da565b6065546101c6906001600160a01b031681565b61026d6103cc3660046135fa565b611888565b61026d611ad8565b6103e1611aef565b565b6103ee813333611b3d565b50565b60685460ff16156103e157610404611aef565b336000908152606a6020526040902061041c81611e99565b600080606660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561046d57600080fd5b505afa158015610481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a591906137c1565b905060005b8160ff16811161053f57600384015481101561052d578360030181815481106104e357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154836104f9919061389c565b9250600084600301828154811061052057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555b806105378161390a565b9150506104aa565b508183600201600082825461055491906138f3565b925050819055506000612710606660009054906101000a90046001600160a01b03166001600160a01b03166374a10e326040518163ffffffff1660e01b815260040160206040518083038186803b1580156105ae57600080fd5b505afa1580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e69190613714565b6105f49061ffff16856138d4565b6105fe91906138b4565b606654604051631b0a264d60e11b81523360048201529192506000916001600160a01b03909116906336144c9a9060240160206040518083038186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067f91906133b7565b90506001600160a01b03811615610925576001600160a01b0381166000908152606a60209081526040808320815160e0810183528154815260018201548185015260028201548184015260038201805484518187028101870190955280855291949293606086019390929083018282801561071957602002820191906000526020600020905b815481526020019060010190808311610705575b50505091835250506004820154602082015260058201546040820152600690910154606090910152905061074d838661389c565b9450828160c00151111561077557828160c00181815161076d91906138f3565b90525061077d565b600060c08201525b64e8d4a51000606954826080015161079591906138d4565b61079f91906138b4565b60a08201526066546040517f6b06e1ca000000000000000000000000000000000000000000000000000000008152336004820152602481018590526001600160a01b0390911690636b06e1ca90604401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b50506066546040517f499a71070000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201889052909116925063499a71079150604401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b50506066546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820188905290911692506340c10f199150604401600060405180830381600087803b15801561090757600080fd5b505af115801561091b573d6000803e3d6000fd5b5050505050610ae9565b606654604080517f5d0b2d4e00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635d0b2d4e916004808301926020929190829003018186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb91906133b7565b6001600160a01b031614610ae957606654604080517f5d0b2d4e00000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216916340c10f19918391635d0b2d4e91600480820192602092909190829003018186803b158015610a2f57600080fd5b505afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906133b7565b610a728560026138d4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050505b606954855464e8d4a5100091610afe916138d4565b610b0891906138b4565b60018601556066546040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018690526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610b7257600080fd5b505af1158015610b86573d6000803e3d6000fd5b50506040518681523392507f619caafabdd75649b302ba8419e48cccf64f37f1983ac4727cfb38b57703ffc991506020015b60405180910390a25050505050565b610bcf61238a565b6068805460ff19166001179055565b600054606490610100900460ff16158015610c00575060005460ff8083169116105b610c775760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805461010060ff1990911660ff84161761ff001916179055604080516020601f8701819004810282018101909252858152610d0291879087908190840183828082843760009201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284376000920191909152506123e492505050565b6000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6066546001600160a01b03163314610da45760405162461bcd60e51b815260206004820152601f60248201527f4552524f523a204f6e6c79206d696e7465722063616e207265676973746572006044820152606401610c6e565b6001600160a01b038083166000908152606a602052604080822092841682529020610dcd611aef565b610dd682611e99565b606954825464e8d4a5100091610deb916138d4565b610df591906138b4565b60018301556000600283018190555b6003830154811015610f7557606660009054906101000a90046001600160a01b03166001600160a01b03166374a10e326040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5e57600080fd5b505afa158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190613714565b610ea290612710613876565b61ffff16836003018281548110610ec957634e487b7160e01b600052603260045260246000fd5b9060005260206000200154612710610ee191906138d4565b610eeb91906138b4565b836003018281548110610f0e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550826003018181548110610f3f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154836002016000828254610f5d919061389c565b90915550819050610f6d8161390a565b915050610e04565b50806005015464e8d4a510006069548360040154610f9391906138d4565b610f9d91906138b4565b610fa791906138f3565b816006016000828254610fba919061389c565b90915550508154600482018054600090610fd590849061389c565b9091555050606954600482015464e8d4a5100091610ff2916138d4565b610ffc91906138b4565b600590910155505050565b61100f61238a565b6103e16000612459565b600082116110545760405162461bcd60e51b81526020600482015260086024820152670616d6f756e7420360c41b6044820152606401610c6e565b6067546065546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201528492916001600160a01b0316906370a082319060240160206040518083038186803b1580156110b457600080fd5b505afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190613746565b6110f691906138f3565b10156111445760405162461bcd60e51b815260206004820152601160248201527f4661696c656420746f206465706f7369740000000000000000000000000000006044820152606401610c6e565b61114e82826124c3565b5050565b600054610100900460ff16158080156111725750600054600160ff909116105b8061118c5750303b15801561118c575060005460ff166001145b6111fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610c6e565b6000805460ff191660011790558015611221576000805461ff0019166101001790555b6112296126b6565b606580546001600160a01b03808b167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560668054928a16929091169190911790556001606c55604080516020601f87018190048102820181019092528581526112e791879087908190840183828082843760009201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284376000920191909152506123e492505050565b6112f0866117e3565b8015611336576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6001600160a01b0382166000908152606a602052604090206003810154606091901561167a57600080606660009054906101000a90046001600160a01b03166001600160a01b03166344329f8d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156113b757600080fd5b505afa1580156113cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f391908101906134db565b9050805167ffffffffffffffff81111561141d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611446578160200160208202803683370190505b509350600081511161149a5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a204e6f20776569676874732070726f76696465640000000000006044820152606401610c6e565b60695460006114a887612729565b506067549091506114be8264e8d4a510006138d4565b6114c891906138b4565b6114d2908361389c565b9150846001015464e8d4a510008387600001546114ef91906138d4565b6114f991906138b4565b61150391906138f3565b935060008060005b6001865161151991906138f3565b8110156115e85761271086828151811061154357634e487b7160e01b600052603260045260246000fd5b602002602001015161ffff168861155a91906138d4565b61156491906138b4565b91508188600301828154811061158a57634e487b7160e01b600052603260045260246000fd5b906000526020600020015461159f919061389c565b8982815181106115bf57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526115d4828461389c565b9250806115e08161390a565b91505061150b565b50818688600301600188516115fd91906138f3565b8154811061161b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611630919061389c565b61163a91906138f3565b886001875161164991906138f3565b8151811061166757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505050505050505b5092915050565b600081116116bc5760405162461bcd60e51b81526020600482015260086024820152670616d6f756e7420360c41b6044820152606401610c6e565b6065546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f9190613577565b6117ab5760405162461bcd60e51b815260206004820152601160248201527f4661696c656420746f206465706f7369740000000000000000000000000000006044820152606401610c6e565b6103ee81336124c3565b6001600160a01b0381166000908152606a60205260409020545b919050565b60006117de6127dc565b905090565b6117eb61238a565b6001600160a01b0381166118675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c6e565b6103ee81612459565b60008061187d8484612850565b909590945092505050565b806080013542101580156118aa575060b46118a76080830135426138f3565b11155b6118f65760405162461bcd60e51b815260206004820152601160248201527f5369676e617475726520657870697265640000000000000000000000000000006044820152606401610c6e565b306119076080830160608401613394565b6001600160a01b03161461195d5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206661726d20616464726573730000000000000000000000006044820152606401610c6e565b60007f8495ae103587a9bc1424d88d1d73dfdce95b2f38425b224be188a7c41418ace482356119926040850160208601613394565b6119a26060860160408701613394565b6119b26080870160608801613394565b6040805160208101969096528501939093526001600160a01b0391821660608501528116608084810191909152911660a083015283013560c082015260e0016040516020818303038152906040528051906020012090506000611a1482612e15565b9050611a3a611a2960c0850160a086016137a5565b829060c086013560e0870135612e84565b6001600160a01b0316611a536040850160208601613394565b6001600160a01b031614611aa95760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610c6e565b611ad38335611abe6040860160208701613394565b611ace6060870160408801613394565b611b3d565b505050565b606c546103e157611ae7611aef565b606954606c55565b600080611afb42612729565b606b81905560675491935091501561114e57606754611b1f8364e8d4a510006138d4565b611b2991906138b4565b606954611b36919061389c565b6069555050565b60008311611b785760405162461bcd60e51b81526020600482015260086024820152670616d6f756e7420360c41b6044820152606401610c6e565b6001600160a01b0382166000908152606a602052604090208054841115611be15760405162461bcd60e51b815260206004820152601460248201527f77697468647261773a206e6f7420656e6f7567680000000000000000000000006044820152606401610c6e565b611be9611aef565b6065546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018790529091169063a9059cbb90604401602060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c889190613577565b611cd45760405162461bcd60e51b815260206004820152601260248201527f4661696c656420746f20776974686472617700000000000000000000000000006044820152606401610c6e565b611cdd81611e99565b8054611cea9085906138f3565b80825560695464e8d4a5100091611d0191906138d4565b611d0b91906138b4565b81600101819055508360676000828254611d2591906138f3565b9091555050606654604051631b0a264d60e11b81526001600160a01b03858116600483015260009216906336144c9a9060240160206040518083038186803b158015611d7057600080fd5b505afa158015611d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da891906133b7565b90506001600160a01b03811615611e5e576001600160a01b0381166000908152606a602052604090206005810154606954600483015464e8d4a5100091611dee916138d4565b611df891906138b4565b611e0291906138f3565b816006016000828254611e15919061389c565b9250508190555085816004016000828254611e3091906138f3565b9091555050606954600482015464e8d4a5100091611e4d916138d4565b611e5791906138b4565b6005909101555b836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436486604051610bb891815260200190565b606c54611eaf57611ea8611aef565b606954606c555b600080606660009054906101000a90046001600160a01b03166001600160a01b03166344329f8d6040518163ffffffff1660e01b815260040160006040518083038186803b158015611f0057600080fd5b505afa158015611f14573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f3c91908101906134db565b90506000815111611f8f5760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a204e6f20776569676874732070726f76696465640000000000006044820152606401610c6e565b60038301546120b15760028301546001840154606c54855464e8d4a5100091611fb7916138d4565b611fc191906138b4565b611fcb91906138f3565b611fd5919061389c565b9150805167ffffffffffffffff811115611fff57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612028578160200160208202803683370190505b50805161203f9160038601916020909101906132cb565b50818360030160008154811061206557634e487b7160e01b600052603260045260246000fd5b600091825260209091200155606c5460695411156120ac5764e8d4a51000606c5460695461209391906138f3565b845461209f91906138d4565b6120a991906138b4565b91505b6120e2565b6001830154606954845464e8d4a51000916120cb916138d4565b6120d591906138b4565b6120df91906138f3565b91505b60008060008560030180549050845111156121e0576000845167ffffffffffffffff81111561212157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561214a578160200160208202803683370190505b50905060005b60038801548110156121c75787600301818154811061217f57634e487b7160e01b600052603260045260246000fd5b90600052602060002001548282815181106121aa57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806121bf8161390a565b915050612150565b5080516121dd90600389019060208401906132cb565b50505b60005b600185516121f191906138f3565b8110156122da5761271085828151811061221b57634e487b7160e01b600052603260045260246000fd5b602002602001015161ffff168761223291906138d4565b61223c91906138b4565b92508287600301828154811061226257634e487b7160e01b600052603260045260246000fd5b90600052602060002001600082825461227b919061389c565b9091555050600387018054829081106122a457634e487b7160e01b600052603260045260246000fd5b9060005260206000200154826122ba919061389c565b91506122c6838561389c565b9350806122d28161390a565b9150506121e3565b506122e583866138f3565b86600301600186516122f791906138f3565b8154811061231557634e487b7160e01b600052603260045260246000fd5b90600052602060002001600082825461232e919061389c565b909155505083516003870190612346906001906138f3565b8154811061236457634e487b7160e01b600052603260045260246000fd5b90600052602060002001548161237a919061389c565b6002909601959095555050505050565b6033546001600160a01b031633146103e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c6e565b600054610100900460ff1661244f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610c6e565b61114e8282612eac565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166000908152606a602052604090206124e3611aef565b6124ec81611e99565b80546124f990849061389c565b80825560695464e8d4a510009161251091906138d4565b61251a91906138b4565b81600101819055508260676000828254612534919061389c565b9091555050606654604051631b0a264d60e11b81526001600160a01b03848116600483015260009216906336144c9a9060240160206040518083038186803b15801561257f57600080fd5b505afa158015612593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b791906133b7565b90506001600160a01b0381161561266d576001600160a01b0381166000908152606a602052604090206005810154606954600483015464e8d4a51000916125fd916138d4565b61260791906138b4565b61261191906138f3565b816006016000828254612624919061389c565b925050819055508481600401600082825461263f919061389c565b9091555050606954600482015464e8d4a510009161265c916138d4565b61266691906138b4565b6005909101555b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c856040516126a891815260200190565b60405180910390a250505050565b600054610100900460ff166127215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610c6e565b6103e1612f31565b606654606b546040517ffb2b347300000000000000000000000000000000000000000000000000000000815260048101919091526024810183905230604482015260009182916001600160a01b039091169063fb2b347390606401604080518083038186803b15801561279b57600080fd5b505afa1580156127af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d39190613782565b91509150915091565b60006117de7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61280b609f5490565b60a080546040805160208082019690965280820194909452606084019190915246608084015230838301528051808403909201825260c0909201909152805191012090565b6001600160a01b038083166000908152606a6020908152604080832060695460665483517f900cf0cf000000000000000000000000000000000000000000000000000000008152935195968796939592948794929091169263900cf0cf92600480840193829003018186803b1580156128c857600080fd5b505afa1580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290091906137c1565b90506000606660009054906101000a90046001600160a01b03166001600160a01b03166344329f8d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561295257600080fd5b505afa158015612966573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261298e91908101906134db565b905060008151116129e15760405162461bcd60e51b815260206004820152601a60248201527f4552524f523a204e6f20776569676874732070726f76696465640000000000006044820152606401610c6e565b6000805b8360ff168111612a7f57828181518110612a0f57634e487b7160e01b600052603260045260246000fd5b602002602001015182612a229190613876565b6003870154909250811015612a6d57856003018181548110612a5457634e487b7160e01b600052603260045260246000fd5b906000526020600020015488612a6a919061389c565b97505b80612a778161390a565b9150506129e5565b5060675415612ac1576000612a9389612729565b50606754909150612aa98264e8d4a510006138d4565b612ab391906138b4565b612abd908661389c565b9450505b600385015415612d58576001850154855464e8d4a5100090612ae49087906138d4565b612aee91906138b4565b612af891906138f3565b9550612710612b0b61ffff8316886138d4565b612b1591906138b4565b612b1f908861389c565b9650846002015486612b31919061389c565b6066546040517fd35527120000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301529298506000929091169063d35527129060240160006040518083038186803b158015612b9557600080fd5b505afa158015612ba9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bd19190810190613612565b60208101519091506001600160a01b031615612d5257606654604080517f74a10e320000000000000000000000000000000000000000000000000000000081529051612710926001600160a01b0316916374a10e32916004808301926020929190829003018186803b158015612c4657600080fd5b505afa158015612c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7e9190613714565b612c8a90612710613876565b612c989061ffff168a6138d4565b612ca291906138b4565b9750612710606660009054906101000a90046001600160a01b03166001600160a01b03166374a10e326040518163ffffffff1660e01b815260040160206040518083038186803b158015612cf557600080fd5b505afa158015612d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2d9190613714565b612d3b9061ffff16896138d4565b612d4591906138b4565b612d4f908861389c565b96505b50612e09565b60008560020154866001015464e8d4a51000606c548960000154612d7c91906138d4565b612d8691906138b4565b612d9091906138f3565b612d9a919061389c565b9050606c54851115612dd35764e8d4a51000606c5486612dba91906138f3565b8754612dc691906138d4565b612dd091906138b4565b96505b80612710612de561ffff85168a6138d4565b612def91906138b4565b612df9919061389c565b9750612e05818861389c565b9650505b50505050509250929050565b6000612e7e612e226127dc565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000612e9587878787612fa5565b91509150612ea281613092565b5095945050505050565b600054610100900460ff16612f175760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610c6e565b815160209283012081519190920120609f9190915560a055565b600054610100900460ff16612f9c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610c6e565b6103e133612459565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612fdc5750600090506003613089565b8460ff16601b14158015612ff457508460ff16601c14155b156130055750600090506004613089565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613059573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661308257600060019250925050613089565b9150600090505b94509492505050565b60008160048111156130b457634e487b7160e01b600052602160045260246000fd5b14156130bf576103ee565b60018160048111156130e157634e487b7160e01b600052602160045260246000fd5b141561312f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c6e565b600281600481111561315157634e487b7160e01b600052602160045260246000fd5b141561319f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610c6e565b60038160048111156131c157634e487b7160e01b600052602160045260246000fd5b14156132355760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610c6e565b600481600481111561325757634e487b7160e01b600052602160045260246000fd5b14156103ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610c6e565b828054828255906000526020600020908101928215613306579160200282015b828111156133065782518255916020019190600101906132eb565b50613312929150613316565b5090565b5b808211156133125760008155600101613317565b805180151581146117cf57600080fd5b60008083601f84011261334c578182fd5b50813567ffffffffffffffff811115613363578182fd5b60208301915083602082850101111561337b57600080fd5b9250929050565b805161ffff811681146117cf57600080fd5b6000602082840312156133a5578081fd5b81356133b081613951565b9392505050565b6000602082840312156133c8578081fd5b81516133b081613951565b600080604083850312156133e5578081fd5b82356133f081613951565b9150602083013561340081613951565b809150509250929050565b600080600080600080600060a0888a031215613425578283fd5b873561343081613951565b9650602088013561344081613951565b9550604088013561345081613951565b9450606088013567ffffffffffffffff8082111561346c578485fd5b6134788b838c0161333b565b909650945060808a0135915080821115613490578384fd5b5061349d8a828b0161333b565b989b979a50959850939692959293505050565b600080604083850312156134c2578182fd5b82356134cd81613951565b946020939093013593505050565b600060208083850312156134ed578182fd5b825167ffffffffffffffff811115613503578283fd5b8301601f81018513613513578283fd5b805161352661352182613852565b613821565b8181528381019083850185840285018601891015613542578687fd5b8694505b8385101561356b5761355781613382565b835260019490940193918501918501613546565b50979650505050505050565b600060208284031215613588578081fd5b6133b08261332b565b600080600080604085870312156135a6578384fd5b843567ffffffffffffffff808211156135bd578586fd5b6135c98883890161333b565b909650945060208701359150808211156135e1578384fd5b506135ee8782880161333b565b95989497509550505050565b6000610100828403121561360c578081fd5b50919050565b60006020808385031215613624578182fd5b825167ffffffffffffffff8082111561363b578384fd5b9084019060a0828703121561364e578384fd5b61365860a0613821565b6136618361332b565b81528383015161367081613951565b81850152604083015182811115613685578586fd5b83019150601f82018713613697578485fd5b81516136a561352182613852565b81815285810190848701878402860188018b10156136c1578889fd5b8895505b838610156136ec5780516136d881613951565b8352600195909501949187019187016136c5565b5060408401525050606083810151908201526080928301519281019290925250949350505050565b600060208284031215613725578081fd5b6133b082613382565b60006020828403121561373f578081fd5b5035919050565b600060208284031215613757578081fd5b5051919050565b60008060408385031215613770578182fd5b82359150602083013561340081613951565b60008060408385031215613794578182fd5b505080516020909101519092909150565b6000602082840312156137b6578081fd5b81356133b081613966565b6000602082840312156137d2578081fd5b81516133b081613966565b6020808252825182820181905260009190848201906040850190845b81811015613815578351835292840192918401916001016137f9565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561384a5761384a61393b565b604052919050565b600067ffffffffffffffff82111561386c5761386c61393b565b5060209081020190565b600061ffff80831681851680830382111561389357613893613925565b01949350505050565b600082198211156138af576138af613925565b500190565b6000826138cf57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156138ee576138ee613925565b500290565b60008282101561390557613905613925565b500390565b600060001982141561391e5761391e613925565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146103ee57600080fd5b60ff811681146103ee57600080fdfea264697066735822122095e56d65c57770706d0dbc37c420ce6514d08304311d26e70410d23978dfba2d64736f6c63430008020033608060405234801561001057600080fd5b50610b3e806100206000396000f3fe6080604052600436106100745760003560e01c80638f2839701161004e5780638f283970146100ef578063cf7a1d771461010f578063d1f5789414610122578063f851a4401461013557610083565b80633659cfe61461008b5780634f1ef286146100ab5780635c60da1b146100be57610083565b366100835761008161014a565b005b61008161014a565b34801561009757600080fd5b506100816100a636600461093f565b610184565b6100816100b93660046109bc565b6101d8565b3480156100ca57600080fd5b506100d3610299565b6040516001600160a01b03909116815260200160405180910390f35b3480156100fb57600080fd5b5061008161010a36600461093f565b610311565b61008161011d366004610960565b610460565b610081610130366004610a3a565b610536565b34801561014157600080fd5b506100d3610656565b6101526106c0565b61018261017d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6106c8565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b031614156101cd576101c8816106ec565b6101d5565b6101d561014a565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b0316141561028c5761021c836106ec565b6000836001600160a01b03168383604051610238929190610a86565b600060405180830381855af49150503d8060008114610273576040519150601f19603f3d011682016040523d82523d6000602084013e610278565b606091505b505090508061028657600080fd5b50610294565b61029461014a565b505050565b60006102c37fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b03161415610306577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b905061030e565b61030e61014a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b031614156101cd576001600160a01b0381166103cd5760405162461bcd60e51b815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104167fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b604080516001600160a01b03928316815291841660208301520160405180910390a16101c8817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b600061048a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b03161461049d57600080fd5b6104a78382610536565b6104d260017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610acf565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61031461050e57634e487b7160e01b600052600160045260246000fd5b610294827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105607f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b03161461057357600080fd5b61059e60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610acf565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc146105da57634e487b7160e01b600052600160045260246000fd5b6105e38261072c565b805115610652576000826001600160a01b0316826040516106049190610a96565b600060405180830381855af49150503d806000811461063f576040519150601f19603f3d011682016040523d82523d6000602084013e610644565b606091505b505090508061029457600080fd5b5050565b60006106807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b03161415610306577fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546102ff565b6101826107cb565b3660008037600080366000845af43d6000803e8080156106e7573d6000f35b3d6000fd5b6106f58161072c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61073581610879565b6107a75760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016103c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b031614156108745760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e000000000000000000000000000060648201526084016103c4565b610182565b803b15155b919050565b80356001600160a01b038116811461087e57600080fd5b600082601f8301126108aa578081fd5b813567ffffffffffffffff808211156108c5576108c5610af2565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561090b5761090b610af2565b81604052838152866020858801011115610923578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215610950578081fd5b61095982610883565b9392505050565b600080600060608486031215610974578182fd5b61097d84610883565b925061098b60208501610883565b9150604084013567ffffffffffffffff8111156109a6578182fd5b6109b28682870161089a565b9150509250925092565b6000806000604084860312156109d0578283fd5b6109d984610883565b9250602084013567ffffffffffffffff808211156109f5578384fd5b818601915086601f830112610a08578384fd5b813581811115610a16578485fd5b876020828501011115610a27578485fd5b6020830194508093505050509250925092565b60008060408385031215610a4c578182fd5b610a5583610883565b9150602083013567ffffffffffffffff811115610a70578182fd5b610a7c8582860161089a565b9150509250929050565b6000828483379101908152919050565b60008251815b81811015610ab65760208186018101518583015201610a9c565b81811115610ac45782828501525b509190910192915050565b600082821015610aed57634e487b7160e01b81526011600452602481fd5b500390565b634e487b7160e01b600052604160045260246000fdfea26469706673582212203bca41c2d9cbab96cc95a280933096f81c5079540a3ca7a63a7423f9deaeaaf764736f6c63430008020033a26469706673582212203149effeb78ef84b3f0236a0d661072b9915e70f74f8d6063335dc6ffce0f64e64736f6c63430008020033