60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f546974616e20546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600281526020017f546900000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620005ff565b508060049081620000a19190620005ff565b505050620000c2336b06765c793fa10079d0000000620000c860201b60201c565b6200081d565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200013d5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200013491906200072b565b60405180910390fd5b62000151600083836200015560201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001ab5780600260008282546200019e919062000777565b9250508190555062000281565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200023a578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200023193929190620007c3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002cc578060026000828254039250508190555062000319565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000378919062000800565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040757607f821691505b6020821081036200041d576200041c620003bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000448565b62000493868362000448565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004e0620004da620004d484620004ab565b620004b5565b620004ab565b9050919050565b6000819050919050565b620004fc83620004bf565b620005146200050b82620004e7565b84845462000455565b825550505050565b600090565b6200052b6200051c565b62000538818484620004f1565b505050565b5b8181101562000560576200055460008262000521565b6001810190506200053e565b5050565b601f821115620005af57620005798162000423565b620005848462000438565b8101602085101562000594578190505b620005ac620005a38562000438565b8301826200053d565b50505b505050565b600082821c905092915050565b6000620005d460001984600802620005b4565b1980831691505092915050565b6000620005ef8383620005c1565b9150826002028217905092915050565b6200060a8262000385565b67ffffffffffffffff81111562000626576200062562000390565b5b620006328254620003ee565b6200063f82828562000564565b600060209050601f83116001811462000677576000841562000662578287015190505b6200066e8582620005e1565b865550620006de565b601f198416620006878662000423565b60005b82811015620006b1578489015182556001820191506020850194506020810190506200068a565b86831015620006d15784890151620006cd601f891682620005c1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200071382620006e6565b9050919050565b620007258162000706565b82525050565b60006020820190506200074260008301846200071a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200078482620004ab565b91506200079183620004ab565b9250828201905080821115620007ac57620007ab62000748565b5b92915050565b620007bd81620004ab565b82525050565b6000606082019050620007da60008301866200071a565b620007e96020830185620007b2565b620007f86040830184620007b2565b949350505050565b6000602082019050620008176000830184620007b2565b92915050565b610e8e806200082d6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063313ce56711610066578063313ce5671461015d57806370a082311461017b57806395d89b41146101ab578063a9059cbb146101c9578063dd62ed3e146101f95761009e565b806306fdde03146100a3578063095ea7b3146100c157806312065fe0146100f157806318160ddd1461010f57806323b872dd1461012d575b600080fd5b6100ab610229565b6040516100b89190610ae2565b60405180910390f35b6100db60048036038101906100d69190610b9d565b6102bb565b6040516100e89190610bf8565b60405180910390f35b6100f96102de565b6040516101069190610c22565b60405180910390f35b6101176102ee565b6040516101249190610c22565b60405180910390f35b61014760048036038101906101429190610c3d565b6102f8565b6040516101549190610bf8565b60405180910390f35b610165610327565b6040516101729190610cac565b60405180910390f35b61019560048036038101906101909190610cc7565b610330565b6040516101a29190610c22565b60405180910390f35b6101b3610378565b6040516101c09190610ae2565b60405180910390f35b6101e360048036038101906101de9190610b9d565b61040a565b6040516101f09190610bf8565b60405180910390f35b610213600480360381019061020e9190610cf4565b61042d565b6040516102209190610c22565b60405180910390f35b60606003805461023890610d63565b80601f016020809104026020016040519081016040528092919081815260200182805461026490610d63565b80156102b15780601f10610286576101008083540402835291602001916102b1565b820191906000526020600020905b81548152906001019060200180831161029457829003601f168201915b5050505050905090565b6000806102c66104b4565b90506102d38185856104bc565b600191505092915050565b60006102e933610330565b905090565b6000600254905090565b6000806103036104b4565b90506103108582856104ce565b61031b858585610562565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461038790610d63565b80601f01602080910402602001604051908101604052809291908181526020018280546103b390610d63565b80156104005780601f106103d557610100808354040283529160200191610400565b820191906000526020600020905b8154815290600101906020018083116103e357829003601f168201915b5050505050905090565b6000806104156104b4565b9050610422818585610562565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6104c98383836001610656565b505050565b60006104da848461042d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461055c578181101561054c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161054393929190610da3565b60405180910390fd5b61055b84848484036000610656565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d45760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105cb9190610dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106465760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161063d9190610dda565b60405180910390fd5b61065183838361082d565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106c85760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016106bf9190610dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073a5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107319190610dda565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610827578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161081e9190610c22565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361087f5780600260008282546108739190610e24565b92505081905550610952565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561090b578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161090293929190610da3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361099b57806002600082825403925050819055506109e8565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a459190610c22565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a8c578082015181840152602081019050610a71565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ab482610a52565b610abe8185610a5d565b9350610ace818560208601610a6e565b610ad781610a98565b840191505092915050565b60006020820190508181036000830152610afc8184610aa9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b3482610b09565b9050919050565b610b4481610b29565b8114610b4f57600080fd5b50565b600081359050610b6181610b3b565b92915050565b6000819050919050565b610b7a81610b67565b8114610b8557600080fd5b50565b600081359050610b9781610b71565b92915050565b60008060408385031215610bb457610bb3610b04565b5b6000610bc285828601610b52565b9250506020610bd385828601610b88565b9150509250929050565b60008115159050919050565b610bf281610bdd565b82525050565b6000602082019050610c0d6000830184610be9565b92915050565b610c1c81610b67565b82525050565b6000602082019050610c376000830184610c13565b92915050565b600080600060608486031215610c5657610c55610b04565b5b6000610c6486828701610b52565b9350506020610c7586828701610b52565b9250506040610c8686828701610b88565b9150509250925092565b600060ff82169050919050565b610ca681610c90565b82525050565b6000602082019050610cc16000830184610c9d565b92915050565b600060208284031215610cdd57610cdc610b04565b5b6000610ceb84828501610b52565b91505092915050565b60008060408385031215610d0b57610d0a610b04565b5b6000610d1985828601610b52565b9250506020610d2a85828601610b52565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d7b57607f821691505b602082108103610d8e57610d8d610d34565b5b50919050565b610d9d81610b29565b82525050565b6000606082019050610db86000830186610d94565b610dc56020830185610c13565b610dd26040830184610c13565b949350505050565b6000602082019050610def6000830184610d94565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e2f82610b67565b9150610e3a83610b67565b9250828201905080821115610e5257610e51610df5565b5b9291505056fea2646970667358221220b60375f8291ccf7b082650d874b1242fdf7c97a07f7641c12d9827b542502e3164736f6c63430008180033