608060405234801561001057600080fd5b5061001a33610023565b60018055610073565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611655806100826000396000f3fe6080604052600436106101805760003560e01c80637672b899116100d65780639ba411b11161007f578063dc53fd9211610059578063dc53fd9214610406578063ddb6dfc41461041c578063f2fde38b1461043257600080fd5b80639ba411b1146103bd578063a2aa6f1d146103dd578063d2cab056146103f357600080fd5b80639331a938116100b05780639331a9381461036457806398a8cffe1461037a5780639aa183a0146103a757600080fd5b80637672b89914610303578063879a13b9146103195780638da5cb5b1461033957600080fd5b80633bbed4a01161013857806358289fda1161011257806358289fda1461028657806366d003ac1461029c578063715018a6146102ee57600080fd5b80633bbed4a01461022657806344004cc1146102465780634782f7791461026657600080fd5b806324eadb921161016957806324eadb92146101db5780632db11544146101fd57806335c6aaf81461021057600080fd5b80631015805b146101855780631e1f4b38146101c5575b600080fd5b34801561019157600080fd5b506101b26101a036600461135e565b600c6020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156101d157600080fd5b506101b260085481565b3480156101e757600080fd5b506101fb6101f636600461137b565b610452565b005b6101fb61020b3660046113a7565b6104b0565b34801561021c57600080fd5b506101b2600a5481565b34801561023257600080fd5b506101fb61024136600461135e565b610776565b34801561025257600080fd5b506101fb6102613660046113c0565b6107c5565b34801561027257600080fd5b506101fb610281366004611401565b6107f3565b34801561029257600080fd5b506101b260095481565b3480156102a857600080fd5b506004546102c99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b3480156102fa57600080fd5b506101fb610809565b34801561030f57600080fd5b506101b260065481565b34801561032557600080fd5b506101fb61033436600461137b565b61081d565b34801561034557600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102c9565b34801561037057600080fd5b506101b260025481565b34801561038657600080fd5b506101b261039536600461135e565b600b6020526000908152604090205481565b3480156103b357600080fd5b506101b26103e881565b3480156103c957600080fd5b506101fb6103d83660046113a7565b610872565b3480156103e957600080fd5b506101b260055481565b6101fb61040136600461142d565b6108b5565b34801561041257600080fd5b506101b260075481565b34801561042857600080fd5b506101b260035481565b34801561043e57600080fd5b506101fb61044d36600461135e565b610c6d565b61045a610d07565b60088390556009829055600a81905560408051848152602081018490529081018290527f4d4287b56d8104f152acdd5374c43dd3a2440f63ac15f73022d055fdd1a82cae906060015b60405180910390a1505050565b60055442101580156104c457506000600554115b6105155760405162461bcd60e51b815260206004820152601f60248201527f7075626c6963206d696e7420686173206e6f742073746172746564207965740060448201526064015b60405180910390fd5b61051d610d6e565b32331461056c5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161050c565b6103e88160025461057d91906114db565b11156105cb5760405162461bcd60e51b815260206004820152601c60248201527f65786365656473206d6178696d756d20737570706c79206c696d697400000000604482015260640161050c565b600654336000908152600c60205260409020546105e99083906114db565b111561065d5760405162461bcd60e51b815260206004820152602860248201527f6578636565646564206d6178696d756d207075626c6963206d696e742070657260448201527f2061646472657373000000000000000000000000000000000000000000000000606482015260840161050c565b60075461066a90826114ee565b34146106b85760405162461bcd60e51b815260206004820152601860248201527f696e636f7272656374207061796d656e7420616d6f756e740000000000000000604482015260640161050c565b34156106e1576004546106e19073ffffffffffffffffffffffffffffffffffffffff1634610dc7565b336000908152600c6020526040812080548392906107009084906114db565b90915550600090505b818110156107695760025460405133906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46002805490600061075183611505565b9190505550808061076190611505565b915050610709565b5061077360018055565b50565b61077e610d07565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6107cd610d07565b6107ee73ffffffffffffffffffffffffffffffffffffffff84168383610eed565b505050565b6107fb610d07565b6108058282610dc7565b5050565b610811610d07565b61081b6000610f7a565b565b610825610d07565b60058390556006829055600781905560408051848152602081018490529081018290527f4d4287b56d8104f152acdd5374c43dd3a2440f63ac15f73022d055fdd1a82cae906060016104a3565b61087a610d07565b60038190556040518181527f15044df2357bec30fae0d99dbe2ef3e333b693f18ea604eaf66c5302f50cc7049060200160405180910390a150565b60085442101580156108c957506000600854115b61093b5760405162461bcd60e51b815260206004820152602260248201527f77686974656c697374206d696e7420686173206e6f742073746172746564207960448201527f6574000000000000000000000000000000000000000000000000000000000000606482015260840161050c565b610943610d6e565b3233146109925760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161050c565b6103e8836002546109a391906114db565b11156109f15760405162461bcd60e51b815260206004820152601c60248201527f65786365656473206d6178696d756d20737570706c79206c696d697400000000604482015260640161050c565b610a79828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152909250603401905060405160208183030381529060405280519060200120610fef565b610ac55760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206d65726b6c652070726f6f66000000000000000000000000604482015260640161050c565b600954336000908152600b6020526040902054610ae39085906114db565b1115610b575760405162461bcd60e51b815260206004820152602b60248201527f6578636565646564206d6178696d756d2077686974656c697374206d696e742060448201527f7065722061646472657373000000000000000000000000000000000000000000606482015260840161050c565b600a54610b6490846114ee565b3414610bb25760405162461bcd60e51b815260206004820152601860248201527f696e636f7272656374207061796d656e7420616d6f756e740000000000000000604482015260640161050c565b3415610bdb57600454610bdb9073ffffffffffffffffffffffffffffffffffffffff1634610dc7565b336000908152600b602052604081208054859290610bfa9084906114db565b90915550600090505b83811015610c635760025460405133906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a460028054906000610c4b83611505565b91905055508080610c5b90611505565b915050610c03565b506107ee60018055565b610c75610d07565b73ffffffffffffffffffffffffffffffffffffffff8116610cfe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161050c565b61077381610f7a565b60005473ffffffffffffffffffffffffffffffffffffffff16331461081b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050c565b600260015403610dc05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161050c565b6002600155565b80471015610e175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161050c565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b50509050806107ee5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161050c565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107ee908490611005565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ffc85846110fa565b14949350505050565b6000611067826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166111499092919063ffffffff16565b9050805160001480611088575080806020019051810190611088919061153d565b6107ee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161050c565b600081815b845181101561113f5761112b8286838151811061111e5761111e61155f565b6020026020010151611160565b91508061113781611505565b9150506110ff565b5090505b92915050565b60606111588484600085611192565b949350505050565b600081831061117c57600082815260208490526040902061118b565b60008381526020839052604090205b9392505050565b60608247101561120a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161050c565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161123391906115b2565b60006040518083038185875af1925050503d8060008114611270576040519150601f19603f3d011682016040523d82523d6000602084013e611275565b606091505b509150915061128687838387611291565b979650505050505050565b6060831561130d5782516000036113065773ffffffffffffffffffffffffffffffffffffffff85163b6113065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161050c565b5081611158565b61115883838151156113225781518083602001fd5b8060405162461bcd60e51b815260040161050c91906115ce565b73ffffffffffffffffffffffffffffffffffffffff8116811461077357600080fd5b60006020828403121561137057600080fd5b813561118b8161133c565b60008060006060848603121561139057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156113b957600080fd5b5035919050565b6000806000606084860312156113d557600080fd5b83356113e08161133c565b925060208401356113f08161133c565b929592945050506040919091013590565b6000806040838503121561141457600080fd5b823561141f8161133c565b946020939093013593505050565b60008060006040848603121561144257600080fd5b83359250602084013567ffffffffffffffff8082111561146157600080fd5b818601915086601f83011261147557600080fd5b81358181111561148457600080fd5b8760208260051b850101111561149957600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115611143576111436114ac565b8082028115828204841417611143576111436114ac565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611536576115366114ac565b5060010190565b60006020828403121561154f57600080fd5b8151801515811461118b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b838110156115a9578181015183820152602001611591565b50506000910152565b600082516115c481846020870161158e565b9190910192915050565b60208152600082518060208401526115ed81604085016020870161158e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a37e41f412474309400c16658cad8187d5ca80adab531d1bbd4df80bedaa5b0664736f6c63430008110033