608060405234801561000f575f80fd5b506040518060400160405280601781526020017f436f6e74726163744572633230636f6d70617469626c650000000000000000008152506004908161005491906102e8565b506040518060400160405280600581526020017f4d434552430000000000000000000000000000000000000000000000000000008152506005908161009991906102e8565b50670de0b6b3a76400006003819055506103b7565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061012957607f821691505b60208210810361013c5761013b6100e5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261019e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610163565b6101a88683610163565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101ec6101e76101e2846101c0565b6101c9565b6101c0565b9050919050565b5f819050919050565b610205836101d2565b610219610211826101f3565b84845461016f565b825550505050565b5f90565b61022d610221565b6102388184846101fc565b505050565b5b8181101561025b576102505f82610225565b60018101905061023e565b5050565b601f8211156102a05761027181610142565b61027a84610154565b81016020851015610289578190505b61029d61029585610154565b83018261023d565b50505b505050565b5f82821c905092915050565b5f6102c05f19846008026102a5565b1980831691505092915050565b5f6102d883836102b1565b9150826002028217905092915050565b6102f1826100ae565b67ffffffffffffffff81111561030a576103096100b8565b5b6103148254610112565b61031f82828561025f565b5f60209050601f831160018114610350575f841561033e578287015190505b61034885826102cd565b8655506103af565b601f19841661035e86610142565b5f5b8281101561038557848901518255600182019150602085019450602081019050610360565b868310156103a2578489015161039e601f8916826102b1565b8355505b6001600288020188555050505b505050505050565b6112b2806103c45f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a08231146101a057806395d89b41146101d0578063a457c2d7146101ee578063a9059cbb1461021e578063d5abeb011461024e578063dd62ed3e1461026c576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce567146101525780633950935114610170575b5f80fd5b6100be61029c565b6040516100cb9190610c42565b60405180910390f35b6100ee60048036038101906100e99190610cf3565b61032c565b6040516100fb9190610d4b565b60405180910390f35b61010c61034e565b6040516101199190610d73565b60405180910390f35b61013c60048036038101906101379190610d8c565b610357565b6040516101499190610d4b565b60405180910390f35b61015a61042b565b6040516101679190610df7565b60405180910390f35b61018a60048036038101906101859190610cf3565b610440565b6040516101979190610d4b565b60405180910390f35b6101ba60048036038101906101b59190610e10565b610476565b6040516101c79190610d73565b60405180910390f35b6101d86104bb565b6040516101e59190610c42565b60405180910390f35b61020860048036038101906102039190610cf3565b61054b565b6040516102159190610d4b565b60405180910390f35b61023860048036038101906102339190610cf3565b610613565b6040516102459190610d4b565b60405180910390f35b610256610635565b6040516102639190610d73565b60405180910390f35b61028660048036038101906102819190610e3b565b61063e565b6040516102939190610d73565b60405180910390f35b6060600480546102ab90610ea6565b80601f01602080910402602001604051908101604052809291908181526020018280546102d790610ea6565b80156103225780601f106102f957610100808354040283529160200191610322565b820191905f5260205f20905b81548152906001019060200180831161030557829003601f168201915b5050505050905090565b5f806103366106c0565b90506103438185856106c7565b600191505092915050565b5f600254905090565b5f61036384848461088a565b6104208461036f6106c0565b61041b856040518060600160405280602881526020016112306028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6103d26106c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b139092919063ffffffff16565b6106c7565b600190509392505050565b5f60065f9054906101000a900460ff16905090565b5f8061044a6106c0565b905061046b81858561045c858961063e565b6104669190610f03565b6106c7565b600191505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600580546104ca90610ea6565b80601f01602080910402602001604051908101604052809291908181526020018280546104f690610ea6565b80156105415780601f1061051857610100808354040283529160200191610541565b820191905f5260205f20905b81548152906001019060200180831161052457829003601f168201915b5050505050905090565b5f6106096105576106c0565b84610604856040518060600160405280602581526020016112586025913960015f6105806106c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b139092919063ffffffff16565b6106c7565b6001905092915050565b5f8061061d6106c0565b905061062a81858561088a565b600191505092915050565b5f600354905090565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072c90610fa6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90611034565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161087d9190610d73565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef906110c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90611150565b60405180910390fd5b610971838383610b70565b6109da8160405180606001604052806026815260200161120a602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b139092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610a69815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b7590919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b069190610d73565b60405180910390a3505050565b5f838311158290610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b519190610c42565b60405180910390fd5b508284610b67919061116e565b90509392505050565b505050565b5f808284610b839190610f03565b905083811015610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf906111eb565b60405180910390fd5b8091505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c1482610bd2565b610c1e8185610bdc565b9350610c2e818560208601610bec565b610c3781610bfa565b840191505092915050565b5f6020820190508181035f830152610c5a8184610c0a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c8f82610c66565b9050919050565b610c9f81610c85565b8114610ca9575f80fd5b50565b5f81359050610cba81610c96565b92915050565b5f819050919050565b610cd281610cc0565b8114610cdc575f80fd5b50565b5f81359050610ced81610cc9565b92915050565b5f8060408385031215610d0957610d08610c62565b5b5f610d1685828601610cac565b9250506020610d2785828601610cdf565b9150509250929050565b5f8115159050919050565b610d4581610d31565b82525050565b5f602082019050610d5e5f830184610d3c565b92915050565b610d6d81610cc0565b82525050565b5f602082019050610d865f830184610d64565b92915050565b5f805f60608486031215610da357610da2610c62565b5b5f610db086828701610cac565b9350506020610dc186828701610cac565b9250506040610dd286828701610cdf565b9150509250925092565b5f60ff82169050919050565b610df181610ddc565b82525050565b5f602082019050610e0a5f830184610de8565b92915050565b5f60208284031215610e2557610e24610c62565b5b5f610e3284828501610cac565b91505092915050565b5f8060408385031215610e5157610e50610c62565b5b5f610e5e85828601610cac565b9250506020610e6f85828601610cac565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ebd57607f821691505b602082108103610ed057610ecf610e79565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f0d82610cc0565b9150610f1883610cc0565b9250828201905080821115610f3057610f2f610ed6565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610f90602483610bdc565b9150610f9b82610f36565b604082019050919050565b5f6020820190508181035f830152610fbd81610f84565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61101e602283610bdc565b915061102982610fc4565b604082019050919050565b5f6020820190508181035f83015261104b81611012565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6110ac602583610bdc565b91506110b782611052565b604082019050919050565b5f6020820190508181035f8301526110d9816110a0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61113a602383610bdc565b9150611145826110e0565b604082019050919050565b5f6020820190508181035f8301526111678161112e565b9050919050565b5f61117882610cc0565b915061118383610cc0565b925082820390508181111561119b5761119a610ed6565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6111d5601b83610bdc565b91506111e0826111a1565b602082019050919050565b5f6020820190508181035f830152611202816111c9565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bdf73b271fbe29f45e801177b98bfad8057845909e3c5071ddd9c9aa0bf290e264736f6c634300081a0033