6080604052612710600a553480156200001757600080fd5b506040518060400160405280600f81526020016e41637475616c2033442050756e6b7360881b815250604051806040016040528060048152602001630413344560e41b81525081600290816200006e919062000191565b5060036200007d828262000191565b505060008055506200008f336200009a565b60016009556200025d565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011757607f821691505b6020821081036200013857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018c57600081815260208120601f850160051c81016020861015620001675750805b601f850160051c820191505b81811015620001885782815560010162000173565b5050505b505050565b81516001600160401b03811115620001ad57620001ad620000ec565b620001c581620001be845462000102565b846200013e565b602080601f831160018114620001fd5760008415620001e45750858301515b600019600386901b1c1916600185901b17855562000188565b600085815260208120601f198616915b828110156200022e578886015182559484019460019091019084016200020d565b50858210156200024d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611961806200026d6000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806370a08231116100d8578063a22cb4651161008c578063d5abeb0111610066578063d5abeb0114610357578063e985e9c514610360578063f2fde38b146103a957600080fd5b8063a22cb4651461031e578063b88d4fde14610331578063c87b56dd1461034457600080fd5b80638607c0e1116100bd5780638607c0e1146102e55780638da5cb5b146102f857806395d89b411461031657600080fd5b806370a08231146102ca578063715018a6146102dd57600080fd5b80631cd38be81161012f57806332023c681161011457806332023c681461023757806342842e0e146102a45780636352211e146102b757600080fd5b80631cd38be81461021c57806323b872dd1461022457600080fd5b8063081812fc11610160578063081812fc146101b9578063095ea7b3146101f157806318160ddd1461020657600080fd5b806301ffc9a71461017c57806306fdde03146101a4575b600080fd5b61018f61018a3660046114da565b6103bc565b60405190151581526020015b60405180910390f35b6101ac6104a1565b60405161019b9190611565565b6101cc6101c7366004611578565b610533565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6102046101ff3660046115ba565b61059d565b005b600154600054035b60405190815260200161019b565b6101ac6106b2565b6102046102323660046115e4565b6106ce565b61024a610245366004611578565b610987565b60405161019b9190815173ffffffffffffffffffffffffffffffffffffffff16815260208083015167ffffffffffffffff169082015260408083015115159082015260609182015162ffffff169181019190915260800190565b6102046102b23660046115e4565b6109b4565b6101cc6102c5366004611578565b6109d4565b61020e6102d8366004611620565b6109df565b610204610a61565b6102046102f3366004611578565b610a75565b60085473ffffffffffffffffffffffffffffffffffffffff166101cc565b6101ac610b88565b61020461032c36600461163b565b610b97565b61020461033f3660046116a6565b610c7d565b6101ac610352366004611578565b610ced565b61020e600a5481565b61018f61036e3660046117a0565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102046103b7366004611620565b610d8a565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061044f57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061049b57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600280546104b0906117d3565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc906117d3565b80156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b5050505050905090565b600061053e82610e41565b610574576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006105a8826109d4565b90503373ffffffffffffffffffffffffffffffffffffffff8216146106315773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff16610631576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6040518060600160405280603681526020016118f66036913981565b60006106d982610e81565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610740576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040902080543380821473ffffffffffffffffffffffffffffffffffffffff8816909114176107dd5773ffffffffffffffffffffffffffffffffffffffff8616600090815260076020908152604080832033845290915290205460ff166107dd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff851661082a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561083557600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003610924576001840160008181526004602052604081205490036109225760005481146109225760008181526004602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915261049b82610f38565b6109cf83838360405180602001604052806000815250610c7d565b505050565b600061049b82610e81565b600073ffffffffffffffffffffffffffffffffffffffff8216610a2e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b610a69610fd6565b610a736000611057565b565b610a7d610fd6565b600260095403610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600955600a5481610b046001546000540390565b610b0e9190611826565b1115610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d61782023206f66204e46547320686173206265656e207265616368656400006044820152606401610ae5565b610b8033826110ce565b506001600955565b6060600380546104b0906117d3565b3373ffffffffffffffffffffffffffffffffffffffff831603610be6576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c888484846106ce565b73ffffffffffffffffffffffffffffffffffffffff83163b15610ce757610cb1848484846110ec565b610ce7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060610cf882610e41565b610d2e576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d38611265565b90508051600003610d585760405180602001604052806000815250610d83565b80610d6284611285565b604051602001610d73929190611860565b6040516020818303038152906040525b9392505050565b610d92610fd6565b73ffffffffffffffffffffffffffffffffffffffff8116610e35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ae5565b610e3e81611057565b50565b600080548210801561049b5750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b600081600054811015610f0657600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003610f04575b80600003610d8357507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260046020526040902054610ec5565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608081018252600080825260208201819052918101829052606081019190915261049b610f6883610e81565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff8316815260a083901c67ffffffffffffffff1660208201527c0100000000000000000000000000000000000000000000000000000000831615159181019190915260e89190911c606082015290565b60085473ffffffffffffffffffffffffffffffffffffffff163314610a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ae5565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6110e88282604051806020016040528060008152506112db565b5050565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061114790339089908890889060040161188f565b6020604051808303816000875af19250505080156111a0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261119d918101906118d8565b60015b611217573d8080156111ce576040519150601f19603f3d011682016040523d82523d6000602084013e6111d3565b606091505b50805160000361120f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b60606040518060600160405280603681526020016118f660369139905090565b604080516080019081905280825b600183039250600a81066030018353600a90048061129357508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b6112e5838361136e565b73ffffffffffffffffffffffffffffffffffffffff83163b156109cf576000548281035b61131c60008683806001019450866110ec565b611352576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061130957816000541461136757600080fd5b5050505050565b60008054908290036113ac576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461146857808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611430565b50816000036114a3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e3e57600080fd5b6000602082840312156114ec57600080fd5b8135610d83816114ac565b60005b838110156115125781810151838201526020016114fa565b50506000910152565b600081518084526115338160208601602086016114f7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d83602083018461151b565b60006020828403121561158a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115b557600080fd5b919050565b600080604083850312156115cd57600080fd5b6115d683611591565b946020939093013593505050565b6000806000606084860312156115f957600080fd5b61160284611591565b925061161060208501611591565b9150604084013590509250925092565b60006020828403121561163257600080fd5b610d8382611591565b6000806040838503121561164e57600080fd5b61165783611591565b91506020830135801515811461166c57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156116bc57600080fd5b6116c585611591565b93506116d360208601611591565b925060408501359150606085013567ffffffffffffffff808211156116f757600080fd5b818701915087601f83011261170b57600080fd5b81358181111561171d5761171d611677565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561176357611763611677565b816040528281528a602084870101111561177c57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080604083850312156117b357600080fd5b6117bc83611591565b91506117ca60208401611591565b90509250929050565b600181811c908216806117e757607f821691505b602082108103611820577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561049b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600083516118728184602088016114f7565b8351908301906118868183602088016114f7565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526118ce608083018461151b565b9695505050505050565b6000602082840312156118ea57600080fd5b8151610d83816114ac56fe697066733a2f2f516d61636674615967434b6837485836784375664357386768435941384d747831416f634e7575737475324132342fa2646970667358221220dfd57c66e932c71c6f06d0455ac99daa1c748e37142283498e8acc47226326f064736f6c63430008100033