60806040526c7e37be2022c0914b26800000006002556040518060400160405280600b81526020017f426c6173742053616e696e000000000000000000000000000000000000000000815250600390816100599190610335565b506040518060400160405280600681526020017f4253414e494e00000000000000000000000000000000000000000000000000008152506004908161009e9190610335565b5060126005553480156100af575f5ffd5b506002545f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610404565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061017357607f821691505b6020821081036101865761018561012f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101ad565b6101f286836101ad565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61023661023161022c8461020a565b610213565b61020a565b9050919050565b5f819050919050565b61024f8361021c565b61026361025b8261023d565b8484546101b9565b825550505050565b5f5f905090565b61027a61026b565b610285818484610246565b505050565b5b818110156102a85761029d5f82610272565b60018101905061028b565b5050565b601f8211156102ed576102be8161018c565b6102c78461019e565b810160208510156102d6578190505b6102ea6102e28561019e565b83018261028a565b50505b505050565b5f82821c905092915050565b5f61030d5f19846008026102f2565b1980831691505092915050565b5f61032583836102fe565b9150826002028217905092915050565b61033e826100f8565b67ffffffffffffffff81111561035757610356610102565b5b610361825461015c565b61036c8282856102ac565b5f60209050601f83116001811461039d575f841561038b578287015190505b610395858261031a565b8655506103fc565b601f1984166103ab8661018c565b5f5b828110156103d2578489015182556001820191506020850194506020810190506103ad565b868310156103ef57848901516103eb601f8916826102fe565b8355505b6001600288020188555050505b505050505050565b610ca5806104115f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c8063313ce56711610064578063313ce5671461016c57806370a082311461018a57806395d89b41146101ba578063a9059cbb146101d8578063dd62ed3e146102085761009c565b806306fdde03146100a0578063095ea7b3146100be57806318160ddd146100ee57806323b872dd1461010c57806327e235e31461013c575b5f5ffd5b6100a8610238565b6040516100b591906108ac565b60405180910390f35b6100d860048036038101906100d3919061095d565b6102c4565b6040516100e591906109b5565b60405180910390f35b6100f66103b1565b60405161010391906109dd565b60405180910390f35b610126600480360381019061012191906109f6565b6103b7565b60405161013391906109b5565b60405180910390f35b61015660048036038101906101519190610a46565b6105d2565b60405161016391906109dd565b60405180910390f35b6101746105e6565b60405161018191906109dd565b60405180910390f35b6101a4600480360381019061019f9190610a46565b6105ec565b6040516101b191906109dd565b60405180910390f35b6101c2610631565b6040516101cf91906108ac565b60405180910390f35b6101f260048036038101906101ed919061095d565b6106bd565b6040516101ff91906109b5565b60405180910390f35b610222600480360381019061021d9190610a71565b61081c565b60405161022f91906109dd565b60405180910390f35b6003805461024590610adc565b80601f016020809104026020016040519081016040528092919081815260200182805461027190610adc565b80156102bc5780601f10610293576101008083540402835291602001916102bc565b820191905f5260205f20905b81548152906001019060200180831161029f57829003601f168201915b505050505081565b5f8160015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161039f91906109dd565b60405180910390a36001905092915050565b60025481565b5f816103c2856105ec565b1015610403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fa90610b56565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156104be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b590610bbe565b60405180910390fd5b815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105099190610c09565b92505081905550815f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055b9190610c3c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105bf91906109dd565b60405180910390a3600190509392505050565b5f602052805f5260405f205f915090505481565b60055481565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6004805461063e90610adc565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90610adc565b80156106b55780601f1061068c576101008083540402835291602001916106b5565b820191905f5260205f20905b81548152906001019060200180831161069857829003601f168201915b505050505081565b5f816106c8336105ec565b1015610709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070090610b56565b60405180910390fd5b815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107549190610c09565b92505081905550815f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107a69190610c3c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161080a91906109dd565b60405180910390a36001905092915050565b6001602052815f5260405f20602052805f5260405f205f91509150505481565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61087e8261083c565b6108888185610846565b9350610898818560208601610856565b6108a181610864565b840191505092915050565b5f6020820190508181035f8301526108c48184610874565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108f9826108d0565b9050919050565b610909816108ef565b8114610913575f5ffd5b50565b5f8135905061092481610900565b92915050565b5f819050919050565b61093c8161092a565b8114610946575f5ffd5b50565b5f8135905061095781610933565b92915050565b5f5f60408385031215610973576109726108cc565b5b5f61098085828601610916565b925050602061099185828601610949565b9150509250929050565b5f8115159050919050565b6109af8161099b565b82525050565b5f6020820190506109c85f8301846109a6565b92915050565b6109d78161092a565b82525050565b5f6020820190506109f05f8301846109ce565b92915050565b5f5f5f60608486031215610a0d57610a0c6108cc565b5b5f610a1a86828701610916565b9350506020610a2b86828701610916565b9250506040610a3c86828701610949565b9150509250925092565b5f60208284031215610a5b57610a5a6108cc565b5b5f610a6884828501610916565b91505092915050565b5f5f60408385031215610a8757610a866108cc565b5b5f610a9485828601610916565b9250506020610aa585828601610916565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610af357607f821691505b602082108103610b0657610b05610aaf565b5b50919050565b7f62616c616e636520746f6f206c6f7700000000000000000000000000000000005f82015250565b5f610b40600f83610846565b9150610b4b82610b0c565b602082019050919050565b5f6020820190508181035f830152610b6d81610b34565b9050919050565b7f616c6c6f77616e636520746f6f206c6f770000000000000000000000000000005f82015250565b5f610ba8601183610846565b9150610bb382610b74565b602082019050919050565b5f6020820190508181035f830152610bd581610b9c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c138261092a565b9150610c1e8361092a565b9250828201905080821115610c3657610c35610bdc565b5b92915050565b5f610c468261092a565b9150610c518361092a565b9250828203905081811115610c6957610c68610bdc565b5b9291505056fea2646970667358221220bfaf106295013d5f8f294a3175e87de61445293029a91847dac6c3c0652135a564736f6c634300081c0033