0x608060405234801561000f575f80fd5b5060043610610111575f3560e01c806370a082311161009e5780639b792a441161006e5780639b792a4414610287578063a1c617f51461029a578063a457c2d7146102ad578063a9059cbb146102c0578063dd62ed3e146102d3575f80fd5b806370a082311461020a578063715018a6146102325780638da5cb5b1461023a57806395d89b4114610265575f80fd5b806323b872dd116100e457806323b872dd146101a4578063313ce567146101b757806335d16274146101d157806339509351146101e457806366d38203146101f7575f80fd5b806306fdde0314610115578063095ea7b31461015557806318160ddd1461017857806318aee9201461018f575b5f80fd5b61013f6040518060400160405280600b81526020016a4c6f73742054656d706c6560a81b81525081565b60405161014c9190610e3a565b60405180910390f35b610168610163366004610eac565b6102e6565b604051901515815260200161014c565b61018160095481565b60405190815260200161014c565b6101a261019d366004610ed6565b6102fc565b005b6101686101b2366004610f51565b610436565b6101bf601281565b60405160ff909116815260200161014c565b6101816101df366004610f8f565b610457565b6101686101f2366004610eac565b610583565b6101a2610205366004610f8f565b6105a4565b610181610218366004610f8f565b6001600160a01b03165f9081526007602052604090205490565b6101a26105f0565b60025461024d906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b61013f604051806040016040528060038152602001621313d560ea1b81525081565b610168610295366004610fbe565b61062c565b6101a26102a8366004610ed6565b6106d6565b6101686102bb366004610eac565b6107e6565b6101686102ce366004610eac565b61086b565b6101816102e13660046110a0565b610877565b5f6102f23384846108a1565b5060015b92915050565b6002546001600160a01b0316331461032f5760405162461bcd60e51b8152600401610326906110d7565b60405180910390fd5b5f606460095460326103419190611122565b61034b9190611139565b90505f5b8481101561042e575f86868381811061036a5761036a611158565b905060200201602081019061037f9190610f8f565b6001600160a01b0381165f90815260076020526040902054909150851161041b575f6103ab82866109c5565b6001600160a01b0383165f9081526007602052604090205490915084116103fe576001600160a01b0382165f90815260076020526040812080548392906103f390849061116c565b909155506104199050565b6001600160a01b0382165f9081526007602052604090208190555b505b50806104268161117f565b91505061034f565b505050505050565b5f6104428433846109ee565b61044d848484610a66565b5060019392505050565b5f805f60015f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156104aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ce91906111ad565b50915091505f846001600160a01b031660015f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561052e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055291906111f9565b6001600160a01b03161461056f57816001600160701b031661057a565b826001600160701b03165b95945050505050565b5f3361044d8185856105958383610877565b61059f919061116c565b6108a1565b6002546001600160a01b031633146105ce5760405162461bcd60e51b8152600401610326906110d7565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461061a5760405162461bcd60e51b8152600401610326906110d7565b600280546001600160a01b0319169055565b6003545f906001600160a01b031633146106885760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865204f776e65720000000000000000006044820152606401610326565b5f5b85518110156106ca576106b88682815181106106a8576106a8611158565b6020026020010151868686610c3c565b806106c28161117f565b91505061068a565b50600195945050505050565b5f5b838110156107df578484828181106106f2576106f2611158565b90506020020160208101906107079190610f8f565b600554604080518681525f60208201819052818301526060810186905290516001600160a01b0393841693909216917f75b2fdf4488954cfbe3fad3f07ca6ebf12156d6b897c6df1014d7c51ed3227719181900360800190a384848281811061077257610772611158565b90506020020160208101906107879190610f8f565b6006546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806107d78161117f565b9150506106d8565b5050505050565b5f33816107f38286610877565b9050838110156108535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610326565b61086082868684036108a1565b506001949350505050565b5f6102f2338484610a66565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b6001600160a01b0383166109035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610326565b6001600160a01b0382166109645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610326565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382165f908152600760205260408120546109e79083610ccd565b9392505050565b5f6109f98484610877565b90505f198114610a605781811015610a535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610326565b610a6084848484036108a1565b50505050565b6001600160a01b038316610aca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610326565b6001600160a01b038216610b2c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610326565b6001600160a01b0383165f9081526007602052604090205481811015610ba35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610326565b610bad8183610cd8565b6001600160a01b038086165f908152600760205260408082209390935590851681522054610bdb9083610d3c565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c2e9086815260200190565b60405180910390a350505050565b610c468484610d9a565b610c51838386610de2565b6001546040516370ab58db60e11b81526001600160a01b0386811660048301529182166024820152604481018490529082169063e156b1b6906064016020604051808303815f875af1158015610ca9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107df9190611214565b5f6109e78284611139565b5f82821115610d295760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610326565b5f610d348385611233565b949350505050565b5f80610d48838561116c565b9050838110156109e75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610326565b6001546040518281526001600160a01b038481169216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600454604080518581525f6020820181905291810191909152606081018490526001600160a01b038381169216907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822906080016109b8565b5f6020808352835180828501525f5b81811015610e6557858101830151858201604001528201610e49565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e99575f80fd5b50565b8035610ea781610e85565b919050565b5f8060408385031215610ebd575f80fd5b8235610ec881610e85565b946020939093013593505050565b5f805f8060608587031215610ee9575f80fd5b843567ffffffffffffffff80821115610f00575f80fd5b818701915087601f830112610f13575f80fd5b813581811115610f21575f80fd5b8860208260051b8501011115610f35575f80fd5b6020928301999098509187013596604001359550909350505050565b5f805f60608486031215610f63575f80fd5b8335610f6e81610e85565b92506020840135610f7e81610e85565b929592945050506040919091013590565b5f60208284031215610f9f575f80fd5b81356109e781610e85565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610fd1575f80fd5b843567ffffffffffffffff80821115610fe8575f80fd5b818701915087601f830112610ffb575f80fd5b813560208282111561100f5761100f610faa565b8160051b604051601f19603f8301168101818110868211171561103457611034610faa565b60405292835281830193508481018201928b841115611051575f80fd5b948201945b838610156110765761106786610e9c565b85529482019493820193611056565b9850508801359550505060408601359250611095905060608601610e9c565b905092959194509250565b5f80604083850312156110b1575f80fd5b82356110bc81610e85565b915060208301356110cc81610e85565b809150509250929050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176102f6576102f661110e565b5f8261115357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b808201808211156102f6576102f661110e565b5f600182016111905761119061110e565b5060010190565b80516001600160701b0381168114610ea7575f80fd5b5f805f606084860312156111bf575f80fd5b6111c884611197565b92506111d660208501611197565b9150604084015163ffffffff811681146111ee575f80fd5b809150509250925092565b5f60208284031215611209575f80fd5b81516109e781610e85565b5f60208284031215611224575f80fd5b815180151581146109e7575f80fd5b818103818111156102f6576102f661110e56fea264697066735822122018f0d2d70e6f1830f8828b48ff609d0055c5092abe50f80510a4286b4c54786b64736f6c63430008140033
0x6080604052600480546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d179091556005805490911673ef1c6e67703c7bd7107eed8303fbe6ec2554bf6b1790556a4a723dc6b40b8a9a00000060095534801562000067575f80fd5b5060028054336001600160a01b03199182168117909255600380548216909217909155600480545f80546001600160a01b039092169190931681179092556040805163c45a015560e01b8152905163c45a0155928281019260209291908290030181865afa158015620000dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000102919062000267565b6001600160a01b031663c9c65396305f8054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000160573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000186919062000267565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001d1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000267565b600180546001600160a01b0319166001600160a01b0392909216919091179055600954335f81815260076020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000296565b5f6020828403121562000278575f80fd5b81516001600160a01b03811681146200028f575f80fd5b9392505050565b61127c80620002a45f395ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c806370a082311161009e5780639b792a441161006e5780639b792a4414610287578063a1c617f51461029a578063a457c2d7146102ad578063a9059cbb146102c0578063dd62ed3e146102d3575f80fd5b806370a082311461020a578063715018a6146102325780638da5cb5b1461023a57806395d89b4114610265575f80fd5b806323b872dd116100e457806323b872dd146101a4578063313ce567146101b757806335d16274146101d157806339509351146101e457806366d38203146101f7575f80fd5b806306fdde0314610115578063095ea7b31461015557806318160ddd1461017857806318aee9201461018f575b5f80fd5b61013f6040518060400160405280600b81526020016a4c6f73742054656d706c6560a81b81525081565b60405161014c9190610e3a565b60405180910390f35b610168610163366004610eac565b6102e6565b604051901515815260200161014c565b61018160095481565b60405190815260200161014c565b6101a261019d366004610ed6565b6102fc565b005b6101686101b2366004610f51565b610436565b6101bf601281565b60405160ff909116815260200161014c565b6101816101df366004610f8f565b610457565b6101686101f2366004610eac565b610583565b6101a2610205366004610f8f565b6105a4565b610181610218366004610f8f565b6001600160a01b03165f9081526007602052604090205490565b6101a26105f0565b60025461024d906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b61013f604051806040016040528060038152602001621313d560ea1b81525081565b610168610295366004610fbe565b61062c565b6101a26102a8366004610ed6565b6106d6565b6101686102bb366004610eac565b6107e6565b6101686102ce366004610eac565b61086b565b6101816102e13660046110a0565b610877565b5f6102f23384846108a1565b5060015b92915050565b6002546001600160a01b0316331461032f5760405162461bcd60e51b8152600401610326906110d7565b60405180910390fd5b5f606460095460326103419190611122565b61034b9190611139565b90505f5b8481101561042e575f86868381811061036a5761036a611158565b905060200201602081019061037f9190610f8f565b6001600160a01b0381165f90815260076020526040902054909150851161041b575f6103ab82866109c5565b6001600160a01b0383165f9081526007602052604090205490915084116103fe576001600160a01b0382165f90815260076020526040812080548392906103f390849061116c565b909155506104199050565b6001600160a01b0382165f9081526007602052604090208190555b505b50806104268161117f565b91505061034f565b505050505050565b5f6104428433846109ee565b61044d848484610a66565b5060019392505050565b5f805f60015f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156104aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ce91906111ad565b50915091505f846001600160a01b031660015f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561052e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055291906111f9565b6001600160a01b03161461056f57816001600160701b031661057a565b826001600160701b03165b95945050505050565b5f3361044d8185856105958383610877565b61059f919061116c565b6108a1565b6002546001600160a01b031633146105ce5760405162461bcd60e51b8152600401610326906110d7565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461061a5760405162461bcd60e51b8152600401610326906110d7565b600280546001600160a01b0319169055565b6003545f906001600160a01b031633146106885760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865204f776e65720000000000000000006044820152606401610326565b5f5b85518110156106ca576106b88682815181106106a8576106a8611158565b6020026020010151868686610c3c565b806106c28161117f565b91505061068a565b50600195945050505050565b5f5b838110156107df578484828181106106f2576106f2611158565b90506020020160208101906107079190610f8f565b600554604080518681525f60208201819052818301526060810186905290516001600160a01b0393841693909216917f75b2fdf4488954cfbe3fad3f07ca6ebf12156d6b897c6df1014d7c51ed3227719181900360800190a384848281811061077257610772611158565b90506020020160208101906107879190610f8f565b6006546040518481526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3806107d78161117f565b9150506106d8565b5050505050565b5f33816107f38286610877565b9050838110156108535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610326565b61086082868684036108a1565b506001949350505050565b5f6102f2338484610a66565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b6001600160a01b0383166109035760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610326565b6001600160a01b0382166109645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610326565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382165f908152600760205260408120546109e79083610ccd565b9392505050565b5f6109f98484610877565b90505f198114610a605781811015610a535760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610326565b610a6084848484036108a1565b50505050565b6001600160a01b038316610aca5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610326565b6001600160a01b038216610b2c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610326565b6001600160a01b0383165f9081526007602052604090205481811015610ba35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610326565b610bad8183610cd8565b6001600160a01b038086165f908152600760205260408082209390935590851681522054610bdb9083610d3c565b6001600160a01b038085165f8181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c2e9086815260200190565b60405180910390a350505050565b610c468484610d9a565b610c51838386610de2565b6001546040516370ab58db60e11b81526001600160a01b0386811660048301529182166024820152604481018490529082169063e156b1b6906064016020604051808303815f875af1158015610ca9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107df9190611214565b5f6109e78284611139565b5f82821115610d295760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610326565b5f610d348385611233565b949350505050565b5f80610d48838561116c565b9050838110156109e75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610326565b6001546040518281526001600160a01b038481169216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600454604080518581525f6020820181905291810191909152606081018490526001600160a01b038381169216907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822906080016109b8565b5f6020808352835180828501525f5b81811015610e6557858101830151858201604001528201610e49565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e99575f80fd5b50565b8035610ea781610e85565b919050565b5f8060408385031215610ebd575f80fd5b8235610ec881610e85565b946020939093013593505050565b5f805f8060608587031215610ee9575f80fd5b843567ffffffffffffffff80821115610f00575f80fd5b818701915087601f830112610f13575f80fd5b813581811115610f21575f80fd5b8860208260051b8501011115610f35575f80fd5b6020928301999098509187013596604001359550909350505050565b5f805f60608486031215610f63575f80fd5b8335610f6e81610e85565b92506020840135610f7e81610e85565b929592945050506040919091013590565b5f60208284031215610f9f575f80fd5b81356109e781610e85565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610fd1575f80fd5b843567ffffffffffffffff80821115610fe8575f80fd5b818701915087601f830112610ffb575f80fd5b813560208282111561100f5761100f610faa565b8160051b604051601f19603f8301168101818110868211171561103457611034610faa565b60405292835281830193508481018201928b841115611051575f80fd5b948201945b838610156110765761106786610e9c565b85529482019493820193611056565b9850508801359550505060408601359250611095905060608601610e9c565b905092959194509250565b5f80604083850312156110b1575f80fd5b82356110bc81610e85565b915060208301356110cc81610e85565b809150509250929050565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176102f6576102f661110e565b5f8261115357634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b808201808211156102f6576102f661110e565b5f600182016111905761119061110e565b5060010190565b80516001600160701b0381168114610ea7575f80fd5b5f805f606084860312156111bf575f80fd5b6111c884611197565b92506111d660208501611197565b9150604084015163ffffffff811681146111ee575f80fd5b809150509250925092565b5f60208284031215611209575f80fd5b81516109e781610e85565b5f60208284031215611224575f80fd5b815180151581146109e7575f80fd5b818103818111156102f6576102f661110e56fea264697066735822122018f0d2d70e6f1830f8828b48ff609d0055c5092abe50f80510a4286b4c54786b64736f6c63430008140033