608060405234801561000f575f80fd5b506040518060400160405280600781526020017f4d79546f6b656e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250816003908161008b9190610623565b50806004908161009b9190610623565b5050506100d4336100b061010060201b60201c565b600a6100bc919061085a565b6127106100c991906108a4565b61010860201b60201c565b6100e261018d60201b60201c565b5f60065f6101000a81548160ff021916908315150217905550610a5d565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610178575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161016f9190610924565b60405180910390fd5b6101895f83836101d060201b60201c565b5050565b5f5a90505f5b600a8110156101a9578080600101915050610193565b505f5a826101b7919061093d565b9050600a816101c6919061099d565b6005819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610220578060025f82825461021491906109cd565b925050819055506102ee565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156102a9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102a093929190610a0f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610335578060025f828254039250508190555061037f565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103dc9190610a44565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061046457607f821691505b60208210810361047757610476610420565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104d97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261049e565b6104e3868361049e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61052761052261051d846104fb565b610504565b6104fb565b9050919050565b5f819050919050565b6105408361050d565b61055461054c8261052e565b8484546104aa565b825550505050565b5f90565b61056861055c565b610573818484610537565b505050565b5b818110156105965761058b5f82610560565b600181019050610579565b5050565b601f8211156105db576105ac8161047d565b6105b58461048f565b810160208510156105c4578190505b6105d86105d08561048f565b830182610578565b50505b505050565b5f82821c905092915050565b5f6105fb5f19846008026105e0565b1980831691505092915050565b5f61061383836105ec565b9150826002028217905092915050565b61062c826103e9565b67ffffffffffffffff811115610645576106446103f3565b5b61064f825461044d565b61065a82828561059a565b5f60209050601f83116001811461068b575f8415610679578287015190505b6106838582610608565b8655506106ea565b601f1984166106998661047d565b5f5b828110156106c05784890151825560018201915060208501945060208101905061069b565b868310156106dd57848901516106d9601f8916826105ec565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610774578086048111156107505761074f6106f2565b5b600185161561075f5780820291505b808102905061076d8561071f565b9450610734565b94509492505050565b5f8261078c5760019050610847565b81610799575f9050610847565b81600181146107af57600281146107b9576107e8565b6001915050610847565b60ff8411156107cb576107ca6106f2565b5b8360020a9150848211156107e2576107e16106f2565b5b50610847565b5060208310610133831016604e8410600b841016171561081d5782820a905083811115610818576108176106f2565b5b610847565b61082a848484600161072b565b92509050818404811115610841576108406106f2565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610864826104fb565b915061086f8361084e565b925061089c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461077d565b905092915050565b5f6108ae826104fb565b91506108b9836104fb565b92508282026108c7816104fb565b915082820484148315176108de576108dd6106f2565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61090e826108e5565b9050919050565b61091e81610904565b82525050565b5f6020820190506109375f830184610915565b92915050565b5f610947826104fb565b9150610952836104fb565b925082820390508181111561096a576109696106f2565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6109a7826104fb565b91506109b2836104fb565b9250826109c2576109c1610970565b5b828204905092915050565b5f6109d7826104fb565b91506109e2836104fb565b92508282019050808211156109fa576109f96106f2565b5b92915050565b610a09816104fb565b82525050565b5f606082019050610a225f830186610915565b610a2f6020830185610a00565b610a3c6040830184610a00565b949350505050565b5f602082019050610a575f830184610a00565b92915050565b610f9480610a6a5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806334d741b11161006f57806334d741b11461016557806370a082311461018357806395d89b41146101b3578063a9059cbb146101d1578063bf48b6d414610201578063dd62ed3e1461021d576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b361024d565b6040516100c09190610b28565b60405180910390f35b6100e360048036038101906100de9190610bd9565b6102dd565b6040516100f09190610c31565b60405180910390f35b6101016102ff565b60405161010e9190610c59565b60405180910390f35b610131600480360381019061012c9190610c72565b610308565b60405161013e9190610c31565b60405180910390f35b61014f610336565b60405161015c9190610cdd565b60405180910390f35b61016d61033e565b60405161017a9190610c59565b60405180910390f35b61019d60048036038101906101989190610cf6565b610344565b6040516101aa9190610c59565b60405180910390f35b6101bb610389565b6040516101c89190610b28565b60405180910390f35b6101eb60048036038101906101e69190610bd9565b610419565b6040516101f89190610c31565b60405180910390f35b61021b60048036038101906102169190610d4b565b610497565b005b61023760048036038101906102329190610d76565b6104b3565b6040516102449190610c59565b60405180910390f35b60606003805461025c90610de1565b80601f016020809104026020016040519081016040528092919081815260200182805461028890610de1565b80156102d35780601f106102aa576101008083540402835291602001916102d3565b820191905f5260205f20905b8154815290600101906020018083116102b657829003601f168201915b5050505050905090565b5f806102e7610535565b90506102f481858561053c565b600191505092915050565b5f600254905090565b5f80610312610535565b905061031f85828561054e565b61032a8585856105e0565b60019150509392505050565b5f6012905090565b60055481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461039890610de1565b80601f01602080910402602001604051908101604052809291908181526020018280546103c490610de1565b801561040f5780601f106103e65761010080835404028352916020019161040f565b820191905f5260205f20905b8154815290600101906020018083116103f257829003601f168201915b5050505050905090565b5f80610423610535565b905060065f9054906101000a900460ff1615610480575f6005546152084561044b9190610e3e565b6104559190610e9e565b90505f5b8181101561046e578080600101915050610459565b5061047a8286866105e0565b5061048c565b61048b8185856105e0565b5b600191505092915050565b8060065f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61054983838360016106d0565b505050565b5f61055984846104b3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105da57818110156105cb578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016105c293929190610edd565b60405180910390fd5b6105d984848484035f6106d0565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610650575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106479190610f12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106c0575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106b79190610f12565b60405180910390fd5b6106cb83838361089f565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610740575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107379190610f12565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107b0575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107a79190610f12565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610899578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108909190610c59565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ef578060025f8282546108e39190610f2b565b925050819055506109bd565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610978578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161096f93929190610edd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a04578060025f8282540392505081905550610a4e565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aab9190610c59565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610afa82610ab8565b610b048185610ac2565b9350610b14818560208601610ad2565b610b1d81610ae0565b840191505092915050565b5f6020820190508181035f830152610b408184610af0565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b7582610b4c565b9050919050565b610b8581610b6b565b8114610b8f575f80fd5b50565b5f81359050610ba081610b7c565b92915050565b5f819050919050565b610bb881610ba6565b8114610bc2575f80fd5b50565b5f81359050610bd381610baf565b92915050565b5f8060408385031215610bef57610bee610b48565b5b5f610bfc85828601610b92565b9250506020610c0d85828601610bc5565b9150509250929050565b5f8115159050919050565b610c2b81610c17565b82525050565b5f602082019050610c445f830184610c22565b92915050565b610c5381610ba6565b82525050565b5f602082019050610c6c5f830184610c4a565b92915050565b5f805f60608486031215610c8957610c88610b48565b5b5f610c9686828701610b92565b9350506020610ca786828701610b92565b9250506040610cb886828701610bc5565b9150509250925092565b5f60ff82169050919050565b610cd781610cc2565b82525050565b5f602082019050610cf05f830184610cce565b92915050565b5f60208284031215610d0b57610d0a610b48565b5b5f610d1884828501610b92565b91505092915050565b610d2a81610c17565b8114610d34575f80fd5b50565b5f81359050610d4581610d21565b92915050565b5f60208284031215610d6057610d5f610b48565b5b5f610d6d84828501610d37565b91505092915050565b5f8060408385031215610d8c57610d8b610b48565b5b5f610d9985828601610b92565b9250506020610daa85828601610b92565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610df857607f821691505b602082108103610e0b57610e0a610db4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e4882610ba6565b9150610e5383610ba6565b9250828203905081811115610e6b57610e6a610e11565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ea882610ba6565b9150610eb383610ba6565b925082610ec357610ec2610e71565b5b828204905092915050565b610ed781610b6b565b82525050565b5f606082019050610ef05f830186610ece565b610efd6020830185610c4a565b610f0a6040830184610c4a565b949350505050565b5f602082019050610f255f830184610ece565b92915050565b5f610f3582610ba6565b9150610f4083610ba6565b9250828201905080821115610f5857610f57610e11565b5b9291505056fea264697066735822122052fcc7bc70fc65b7c2707bebf977fd0fb99c137f0dfe142d7bfb0472bbbfde8364736f6c63430008190033