608060405234801561000f575f80fd5b50604051611681380380611681833981810160405281019061003191906103aa565b6040518060400160405280600a81526020017f5465737420546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f546573740000000000000000000000000000000000000000000000000000000081525081600390816100ac9190610606565b5080600490816100bc9190610606565b5050506100cf33826100d560201b60201c565b506107ea565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610145575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161013c9190610714565b60405180910390fd5b6101565f838361015a60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101aa578060025f82825461019e919061075a565b92505081905550610278565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610233578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161022a9392919061079c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102bf578060025f8282540392505081905550610309565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161036691906107d1565b60405180910390a3505050565b5f80fd5b5f819050919050565b61038981610377565b8114610393575f80fd5b50565b5f815190506103a481610380565b92915050565b5f602082840312156103bf576103be610373565b5b5f6103cc84828501610396565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061045057607f821691505b6020821081036104635761046261040c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261048a565b6104cf868361048a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61050a61050561050084610377565b6104e7565b610377565b9050919050565b5f819050919050565b610523836104f0565b61053761052f82610511565b848454610496565b825550505050565b5f90565b61054b61053f565b61055681848461051a565b505050565b5b818110156105795761056e5f82610543565b60018101905061055c565b5050565b601f8211156105be5761058f81610469565b6105988461047b565b810160208510156105a7578190505b6105bb6105b38561047b565b83018261055b565b50505b505050565b5f82821c905092915050565b5f6105de5f19846008026105c3565b1980831691505092915050565b5f6105f683836105cf565b9150826002028217905092915050565b61060f826103d5565b67ffffffffffffffff811115610628576106276103df565b5b6106328254610439565b61063d82828561057d565b5f60209050601f83116001811461066e575f841561065c578287015190505b61066685826105eb565b8655506106cd565b601f19841661067c86610469565b5f5b828110156106a35784890151825560018201915060208501945060208101905061067e565b868310156106c057848901516106bc601f8916826105cf565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106fe826106d5565b9050919050565b61070e816106f4565b82525050565b5f6020820190506107275f830184610705565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61076482610377565b915061076f83610377565b92508282019050808211156107875761078661072d565b5b92915050565b61079681610377565b82525050565b5f6060820190506107af5f830186610705565b6107bc602083018561078d565b6107c9604083018461078d565b949350505050565b5f6020820190506107e45f83018461078d565b92915050565b610e8a806107f75f395ff3fe608060405234801561000f575f80fd5b506004361061009c575f3560e01c806370a082311161006457806370a082311461015a57806395d89b411461018a578063a9059cbb146101a8578063dd62ed3e146101d8578063e201be98146102085761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c578063313ce5671461013c575b5f80fd5b6100a8610212565b6040516100b59190610b03565b60405180910390f35b6100d860048036038101906100d39190610bb4565b6102a2565b6040516100e59190610c0c565b60405180910390f35b6100f66102c4565b6040516101039190610c34565b60405180910390f35b61012660048036038101906101219190610c4d565b6102cd565b6040516101339190610c0c565b60405180910390f35b6101446102fb565b6040516101519190610cb8565b60405180910390f35b610174600480360381019061016f9190610cd1565b610303565b6040516101819190610c34565b60405180910390f35b610192610348565b60405161019f9190610b03565b60405180910390f35b6101c260048036038101906101bd9190610bb4565b6103d8565b6040516101cf9190610c0c565b60405180910390f35b6101f260048036038101906101ed9190610cfc565b6103fa565b6040516101ff9190610c34565b60405180910390f35b61021061047c565b005b60606003805461022190610d67565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610d67565b80156102985780601f1061026f57610100808354040283529160200191610298565b820191905f5260205f20905b81548152906001019060200180831161027b57829003601f168201915b5050505050905090565b5f806102ac610491565b90506102b9818585610498565b600191505092915050565b5f600254905090565b5f806102d7610491565b90506102e48582856104aa565b6102ef85858561053c565b60019150509392505050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461035790610d67565b80601f016020809104026020016040519081016040528092919081815260200182805461038390610d67565b80156103ce5780601f106103a5576101008083540402835291602001916103ce565b820191905f5260205f20905b8154815290600101906020018083116103b157829003601f168201915b5050505050905090565b5f806103e2610491565b90506103ef81858561053c565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61048f3368056bc75e2d6310000061062c565b565b5f33905090565b6104a583838360016106ab565b505050565b5f6104b584846103fa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105365781811015610527578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161051e93929190610da6565b60405180910390fd5b61053584848484035f6106ab565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105ac575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105a39190610ddb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361061c575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106139190610ddb565b60405180910390fd5b61062783838361087a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361069c575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106939190610ddb565b60405180910390fd5b6106a75f838361087a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361071b575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107129190610ddb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361078b575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107829190610ddb565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610874578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161086b9190610c34565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ca578060025f8282546108be9190610e21565b92505081905550610998565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610953578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161094a93929190610da6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109df578060025f8282540392505081905550610a29565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a869190610c34565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610ad582610a93565b610adf8185610a9d565b9350610aef818560208601610aad565b610af881610abb565b840191505092915050565b5f6020820190508181035f830152610b1b8184610acb565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b5082610b27565b9050919050565b610b6081610b46565b8114610b6a575f80fd5b50565b5f81359050610b7b81610b57565b92915050565b5f819050919050565b610b9381610b81565b8114610b9d575f80fd5b50565b5f81359050610bae81610b8a565b92915050565b5f8060408385031215610bca57610bc9610b23565b5b5f610bd785828601610b6d565b9250506020610be885828601610ba0565b9150509250929050565b5f8115159050919050565b610c0681610bf2565b82525050565b5f602082019050610c1f5f830184610bfd565b92915050565b610c2e81610b81565b82525050565b5f602082019050610c475f830184610c25565b92915050565b5f805f60608486031215610c6457610c63610b23565b5b5f610c7186828701610b6d565b9350506020610c8286828701610b6d565b9250506040610c9386828701610ba0565b9150509250925092565b5f60ff82169050919050565b610cb281610c9d565b82525050565b5f602082019050610ccb5f830184610ca9565b92915050565b5f60208284031215610ce657610ce5610b23565b5b5f610cf384828501610b6d565b91505092915050565b5f8060408385031215610d1257610d11610b23565b5b5f610d1f85828601610b6d565b9250506020610d3085828601610b6d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d7e57607f821691505b602082108103610d9157610d90610d3a565b5b50919050565b610da081610b46565b82525050565b5f606082019050610db95f830186610d97565b610dc66020830185610c25565b610dd36040830184610c25565b949350505050565b5f602082019050610dee5f830184610d97565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e2b82610b81565b9150610e3683610b81565b9250828201905080821115610e4e57610e4d610df4565b5b9291505056fea26469706673582212206fb0fc52ad5eb66b10c7e7e0f7fb01deb3408aa7408e22c15d96e4419636c76e64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000015b38