60806040523480156200001157600080fd5b50336040518060400160405280600a81526020017f5375706572546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250816003908162000090919062000777565b508060049081620000a2919062000777565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001119190620008a3565b60405180910390fd5b6200012b816200017160201b60201c565b506200016b33620001416200023760201b60201c565b600a6200014f919062000a50565b620f42406200015f919062000aa1565b6200024060201b60201c565b62000b92565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002b55760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002ac9190620008a3565b60405180910390fd5b620002c960008383620002cd60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200032357806002600082825462000316919062000aec565b92505081905550620003f9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620003b2578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003a99392919062000b38565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000444578060026000828254039250508190555062000491565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004f0919062000b75565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057f57607f821691505b60208210810362000595576200059462000537565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005c0565b6200060b8683620005c0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000658620006526200064c8462000623565b6200062d565b62000623565b9050919050565b6000819050919050565b620006748362000637565b6200068c62000683826200065f565b848454620005cd565b825550505050565b600090565b620006a362000694565b620006b081848462000669565b505050565b5b81811015620006d857620006cc60008262000699565b600181019050620006b6565b5050565b601f8211156200072757620006f1816200059b565b620006fc84620005b0565b810160208510156200070c578190505b620007246200071b85620005b0565b830182620006b5565b50505b505050565b600082821c905092915050565b60006200074c600019846008026200072c565b1980831691505092915050565b600062000767838362000739565b9150826002028217905092915050565b6200078282620004fd565b67ffffffffffffffff8111156200079e576200079d62000508565b5b620007aa825462000566565b620007b7828285620006dc565b600060209050601f831160018114620007ef5760008415620007da578287015190505b620007e6858262000759565b86555062000856565b601f198416620007ff866200059b565b60005b82811015620008295784890151825560018201915060208501945060208101905062000802565b8683101562000849578489015162000845601f89168262000739565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200088b826200085e565b9050919050565b6200089d816200087e565b82525050565b6000602082019050620008ba600083018462000892565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200094e57808604811115620009265762000925620008c0565b5b6001851615620009365780820291505b80810290506200094685620008ef565b945062000906565b94509492505050565b60008262000969576001905062000a3c565b8162000979576000905062000a3c565b81600181146200099257600281146200099d57620009d3565b600191505062000a3c565b60ff841115620009b257620009b1620008c0565b5b8360020a915084821115620009cc57620009cb620008c0565b5b5062000a3c565b5060208310610133831016604e8410600b841016171562000a0d5782820a90508381111562000a075762000a06620008c0565b5b62000a3c565b62000a1c8484846001620008fc565b9250905081840481111562000a365762000a35620008c0565b5b81810290505b9392505050565b600060ff82169050919050565b600062000a5d8262000623565b915062000a6a8362000a43565b925062000a997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000957565b905092915050565b600062000aae8262000623565b915062000abb8362000623565b925082820262000acb8162000623565b9150828204841483151762000ae55762000ae4620008c0565b5b5092915050565b600062000af98262000623565b915062000b068362000623565b925082820190508082111562000b215762000b20620008c0565b5b92915050565b62000b328162000623565b82525050565b600060608201905062000b4f600083018662000892565b62000b5e602083018562000b27565b62000b6d604083018462000b27565b949350505050565b600060208201905062000b8c600083018462000b27565b92915050565b61128d8062000ba26000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c57806395d89b411161006657806395d89b4114610239578063a9059cbb14610257578063dd62ed3e14610287578063f2fde38b146102b7576100ea565b806370a08231146101e1578063715018a6146102115780638da5cb5b1461021b576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806340c10f19146101a957806342966c68146101c5576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102d3565b6040516101049190610eb4565b60405180910390f35b61012760048036038101906101229190610f6f565b610365565b6040516101349190610fca565b60405180910390f35b610145610388565b6040516101529190610ff4565b60405180910390f35b6101756004803603810190610170919061100f565b610392565b6040516101829190610fca565b60405180910390f35b6101936103c1565b6040516101a0919061107e565b60405180910390f35b6101c360048036038101906101be9190610f6f565b6103ca565b005b6101df60048036038101906101da9190611099565b6103e0565b005b6101fb60048036038101906101f691906110c6565b6103ed565b6040516102089190610ff4565b60405180910390f35b610219610435565b005b610223610449565b6040516102309190611102565b60405180910390f35b610241610473565b60405161024e9190610eb4565b60405180910390f35b610271600480360381019061026c9190610f6f565b610505565b60405161027e9190610fca565b60405180910390f35b6102a1600480360381019061029c919061111d565b610528565b6040516102ae9190610ff4565b60405180910390f35b6102d160048036038101906102cc91906110c6565b6105af565b005b6060600380546102e29061118c565b80601f016020809104026020016040519081016040528092919081815260200182805461030e9061118c565b801561035b5780601f106103305761010080835404028352916020019161035b565b820191906000526020600020905b81548152906001019060200180831161033e57829003601f168201915b5050505050905090565b600080610370610635565b905061037d81858561063d565b600191505092915050565b6000600254905090565b60008061039d610635565b90506103aa85828561064f565b6103b58585856106e3565b60019150509392505050565b60006012905090565b6103d26107d7565b6103dc828261085e565b5050565b6103ea33826108e0565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61043d6107d7565b6104476000610962565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104829061118c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae9061118c565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b600080610510610635565b905061051d8185856106e3565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6105b76107d7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106295760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106209190611102565b60405180910390fd5b61063281610962565b50565b600033905090565b61064a8383836001610a28565b505050565b600061065b8484610528565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106dd57818110156106cd578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106c4939291906111bd565b60405180910390fd5b6106dc84848484036000610a28565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107555760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161074c9190611102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107c75760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107be9190611102565b60405180910390fd5b6107d2838383610bff565b505050565b6107df610635565b73ffffffffffffffffffffffffffffffffffffffff166107fd610449565b73ffffffffffffffffffffffffffffffffffffffff161461085c57610820610635565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108539190611102565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108d05760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108c79190611102565b60405180910390fd5b6108dc60008383610bff565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109499190611102565b60405180910390fd5b61095e82600083610bff565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a9a5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a919190611102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b0c5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b039190611102565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610bf9578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bf09190610ff4565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c51578060026000828254610c459190611223565b92505081905550610d24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cdd578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610cd4939291906111bd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d6d5780600260008282540392505081905550610dba565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e179190610ff4565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e5e578082015181840152602081019050610e43565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e8682610e24565b610e908185610e2f565b9350610ea0818560208601610e40565b610ea981610e6a565b840191505092915050565b60006020820190508181036000830152610ece8184610e7b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f0682610edb565b9050919050565b610f1681610efb565b8114610f2157600080fd5b50565b600081359050610f3381610f0d565b92915050565b6000819050919050565b610f4c81610f39565b8114610f5757600080fd5b50565b600081359050610f6981610f43565b92915050565b60008060408385031215610f8657610f85610ed6565b5b6000610f9485828601610f24565b9250506020610fa585828601610f5a565b9150509250929050565b60008115159050919050565b610fc481610faf565b82525050565b6000602082019050610fdf6000830184610fbb565b92915050565b610fee81610f39565b82525050565b60006020820190506110096000830184610fe5565b92915050565b60008060006060848603121561102857611027610ed6565b5b600061103686828701610f24565b935050602061104786828701610f24565b925050604061105886828701610f5a565b9150509250925092565b600060ff82169050919050565b61107881611062565b82525050565b6000602082019050611093600083018461106f565b92915050565b6000602082840312156110af576110ae610ed6565b5b60006110bd84828501610f5a565b91505092915050565b6000602082840312156110dc576110db610ed6565b5b60006110ea84828501610f24565b91505092915050565b6110fc81610efb565b82525050565b600060208201905061111760008301846110f3565b92915050565b6000806040838503121561113457611133610ed6565b5b600061114285828601610f24565b925050602061115385828601610f24565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111a457607f821691505b6020821081036111b7576111b661115d565b5b50919050565b60006060820190506111d260008301866110f3565b6111df6020830185610fe5565b6111ec6040830184610fe5565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061122e82610f39565b915061123983610f39565b9250828201905080821115611251576112506111f4565b5b9291505056fea26469706673582212203ad2b5ddad0a9cdb3ddee298e73796563786bc76de0ae1ee420ff62c8d35d3de64736f6c63430008180033