60806040523480156200001157600080fd5b506040518060400160405280600e81526020017f65787472656d6548616d737465720000000000000000000000000000000000008152506040518060400160405280600881526020017f7848414d5354455200000000000000000000000000000000000000000000000081525081600390816200008f91906200063c565b508060049081620000a191906200063c565b505050620000f673598b014cbd88f3e131fb3b9341ba57e85d8febc6620000cd620000fc60201b60201c565b600a620000db9190620008b3565b6103e8620000ea919062000904565b6200010560201b60201c565b62000a57565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200017a5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000171919062000994565b60405180910390fd5b6200018e600083836200019260201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001e8578060026000828254620001db9190620009b1565b92505081905550620002be565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000277578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200026e93929190620009fd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000309578060026000828254039250508190555062000356565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003b5919062000a3a565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044457607f821691505b6020821081036200045a5762000459620003fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000485565b620004d0868362000485565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200051d620005176200051184620004e8565b620004f2565b620004e8565b9050919050565b6000819050919050565b6200053983620004fc565b62000551620005488262000524565b84845462000492565b825550505050565b600090565b6200056862000559565b620005758184846200052e565b505050565b5b818110156200059d57620005916000826200055e565b6001810190506200057b565b5050565b601f821115620005ec57620005b68162000460565b620005c18462000475565b81016020851015620005d1578190505b620005e9620005e08562000475565b8301826200057a565b50505b505050565b600082821c905092915050565b60006200061160001984600802620005f1565b1980831691505092915050565b60006200062c8383620005fe565b9150826002028217905092915050565b6200064782620003c2565b67ffffffffffffffff811115620006635762000662620003cd565b5b6200066f82546200042b565b6200067c828285620005a1565b600060209050601f831160018114620006b457600084156200069f578287015190505b620006ab85826200061e565b8655506200071b565b601f198416620006c48662000460565b60005b82811015620006ee57848901518255600182019150602085019450602081019050620006c7565b868310156200070e57848901516200070a601f891682620005fe565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007b15780860481111562000789576200078862000723565b5b6001851615620007995780820291505b8081029050620007a98562000752565b945062000769565b94509492505050565b600082620007cc57600190506200089f565b81620007dc57600090506200089f565b8160018114620007f55760028114620008005762000836565b60019150506200089f565b60ff84111562000815576200081462000723565b5b8360020a9150848211156200082f576200082e62000723565b5b506200089f565b5060208310610133831016604e8410600b8410161715620008705782820a9050838111156200086a576200086962000723565b5b6200089f565b6200087f84848460016200075f565b9250905081840481111562000899576200089862000723565b5b81810290505b9392505050565b600060ff82169050919050565b6000620008c082620004e8565b9150620008cd83620008a6565b9250620008fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007ba565b905092915050565b60006200091182620004e8565b91506200091e83620004e8565b92508282026200092e81620004e8565b9150828204841483151762000948576200094762000723565b5b5092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200097c826200094f565b9050919050565b6200098e816200096f565b82525050565b6000602082019050620009ab600083018462000983565b92915050565b6000620009be82620004e8565b9150620009cb83620004e8565b9250828201905080821115620009e657620009e562000723565b5b92915050565b620009f781620004e8565b82525050565b600060608201905062000a14600083018662000983565b62000a236020830185620009ec565b62000a326040830184620009ec565b949350505050565b600060208201905062000a516000830184620009ec565b92915050565b610f7f8062000a676000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461016857806370a082311461019857806395d89b41146101c8578063a457c2d7146101e6578063a9059cbb14610216578063dd62ed3e14610246576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b6610276565b6040516100c39190610bd3565b60405180910390f35b6100e660048036038101906100e19190610c8e565b610308565b6040516100f39190610ce9565b60405180910390f35b61010461032b565b6040516101119190610d13565b60405180910390f35b610134600480360381019061012f9190610d2e565b610335565b6040516101419190610ce9565b60405180910390f35b610152610364565b60405161015f9190610d9d565b60405180910390f35b610182600480360381019061017d9190610c8e565b61036d565b60405161018f9190610ce9565b60405180910390f35b6101b260048036038101906101ad9190610db8565b6103a4565b6040516101bf9190610d13565b60405180910390f35b6101d06103ec565b6040516101dd9190610bd3565b60405180910390f35b61020060048036038101906101fb9190610c8e565b61047e565b60405161020d9190610ce9565b60405180910390f35b610230600480360381019061022b9190610c8e565b6104fb565b60405161023d9190610ce9565b60405180910390f35b610260600480360381019061025b9190610de5565b61051e565b60405161026d9190610d13565b60405180910390f35b60606003805461028590610e54565b80601f01602080910402602001604051908101604052809291908181526020018280546102b190610e54565b80156102fe5780601f106102d3576101008083540402835291602001916102fe565b820191906000526020600020905b8154815290600101906020018083116102e157829003601f168201915b5050505050905090565b6000806103136105a5565b90506103208185856105ad565b600191505092915050565b6000600254905090565b6000806103406105a5565b905061034d8582856105bf565b610358858585610653565b60019150509392505050565b60006012905090565b6000806103786105a5565b905061039981858561038a858961051e565b6103949190610eb4565b6105ad565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546103fb90610e54565b80601f016020809104026020016040519081016040528092919081815260200182805461042790610e54565b80156104745780601f1061044957610100808354040283529160200191610474565b820191906000526020600020905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b6000806104896105a5565b90506000610497828661051e565b9050838110156104e2578481856040517fa60f030c0000000000000000000000000000000000000000000000000000000081526004016104d993929190610ef7565b60405180910390fd5b6104ef82868684036105ad565b60019250505092915050565b6000806105066105a5565b9050610513818585610653565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6105ba8383836001610747565b505050565b60006105cb848461051e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461064d578181101561063d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161063493929190610ef7565b60405180910390fd5b61064c84848484036000610747565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106c55760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106bc9190610f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107375760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161072e9190610f2e565b60405180910390fd5b61074283838361091e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107b95760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107b09190610f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361082b5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108229190610f2e565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610918578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161090f9190610d13565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109705780600260008282546109649190610eb4565b92505081905550610a43565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109fc578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109f393929190610ef7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8c5780600260008282540392505081905550610ad9565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b369190610d13565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b7d578082015181840152602081019050610b62565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ba582610b43565b610baf8185610b4e565b9350610bbf818560208601610b5f565b610bc881610b89565b840191505092915050565b60006020820190508181036000830152610bed8184610b9a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c2582610bfa565b9050919050565b610c3581610c1a565b8114610c4057600080fd5b50565b600081359050610c5281610c2c565b92915050565b6000819050919050565b610c6b81610c58565b8114610c7657600080fd5b50565b600081359050610c8881610c62565b92915050565b60008060408385031215610ca557610ca4610bf5565b5b6000610cb385828601610c43565b9250506020610cc485828601610c79565b9150509250929050565b60008115159050919050565b610ce381610cce565b82525050565b6000602082019050610cfe6000830184610cda565b92915050565b610d0d81610c58565b82525050565b6000602082019050610d286000830184610d04565b92915050565b600080600060608486031215610d4757610d46610bf5565b5b6000610d5586828701610c43565b9350506020610d6686828701610c43565b9250506040610d7786828701610c79565b9150509250925092565b600060ff82169050919050565b610d9781610d81565b82525050565b6000602082019050610db26000830184610d8e565b92915050565b600060208284031215610dce57610dcd610bf5565b5b6000610ddc84828501610c43565b91505092915050565b60008060408385031215610dfc57610dfb610bf5565b5b6000610e0a85828601610c43565b9250506020610e1b85828601610c43565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e6c57607f821691505b602082108103610e7f57610e7e610e25565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ebf82610c58565b9150610eca83610c58565b9250828201905080821115610ee257610ee1610e85565b5b92915050565b610ef181610c1a565b82525050565b6000606082019050610f0c6000830186610ee8565b610f196020830185610d04565b610f266040830184610d04565b949350505050565b6000602082019050610f436000830184610ee8565b9291505056fea2646970667358221220cb43c5c890d85b4f9835c24d7115979dcc13d82d70175def52e4657595b277d364736f6c63430008130033