60806040523480156200001157600080fd5b506040518060400160405280600481526020017f78476f6f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f78474f4f0000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000412565b508060049081620000a1919062000412565b505050620000c4620000b8620000ca60201b60201c565b620000d260201b60201c565b620004f9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200021a57607f821691505b60208210810362000230576200022f620001d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200029a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200025b565b620002a686836200025b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002f3620002ed620002e784620002be565b620002c8565b620002be565b9050919050565b6000819050919050565b6200030f83620002d2565b620003276200031e82620002fa565b84845462000268565b825550505050565b600090565b6200033e6200032f565b6200034b81848462000304565b505050565b5b8181101562000373576200036760008262000334565b60018101905062000351565b5050565b601f821115620003c2576200038c8162000236565b62000397846200024b565b81016020851015620003a7578190505b620003bf620003b6856200024b565b83018262000350565b50505b505050565b600082821c905092915050565b6000620003e760001984600802620003c7565b1980831691505092915050565b6000620004028383620003d4565b9150826002028217905092915050565b6200041d8262000198565b67ffffffffffffffff811115620004395762000438620001a3565b5b62000445825462000201565b6200045282828562000377565b600060209050601f8311600181146200048a576000841562000475578287015190505b620004818582620003f4565b865550620004f1565b601f1984166200049a8662000236565b60005b82811015620004c4578489015182556001820191506020850194506020810190506200049d565b86831015620004e45784890151620004e0601f891682620003d4565b8355505b6001600288020188555050505b505050505050565b611e3e80620005096000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806342966c68116100ad57806395d89b411161007157806395d89b41146102f6578063a457c2d714610314578063a9059cbb14610344578063dd62ed3e14610374578063f2fde38b146103a457610121565b806342966c681461026657806370a0823114610282578063715018a6146102b257806379cc6790146102bc5780638da5cb5b146102d857610121565b806323b872dd116100f457806323b872dd146101b05780632c4d4d18146101e0578063313ce567146101fc578063395093511461021a57806340c10f191461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd146101745780631d1b16b514610192575b600080fd5b61012e6103c0565b60405161013b9190611402565b60405180910390f35b61015e600480360381019061015991906114bd565b610452565b60405161016b9190611518565b60405180910390f35b61017c610475565b6040516101899190611542565b60405180910390f35b61019a61047f565b6040516101a7919061156c565b60405180910390f35b6101ca60048036038101906101c59190611587565b6104a5565b6040516101d79190611518565b60405180910390f35b6101fa60048036038101906101f591906115da565b6104d4565b005b610204610520565b6040516102119190611623565b60405180910390f35b610234600480360381019061022f91906114bd565b610529565b6040516102419190611518565b60405180910390f35b610264600480360381019061025f91906114bd565b610560565b005b610280600480360381019061027b919061163e565b6105f7565b005b61029c600480360381019061029791906115da565b61068d565b6040516102a99190611542565b60405180910390f35b6102ba6106d5565b005b6102d660048036038101906102d191906114bd565b6106e9565b005b6102e0610780565b6040516102ed919061156c565b60405180910390f35b6102fe6107aa565b60405161030b9190611402565b60405180910390f35b61032e600480360381019061032991906114bd565b61083c565b60405161033b9190611518565b60405180910390f35b61035e600480360381019061035991906114bd565b6108b3565b60405161036b9190611518565b60405180910390f35b61038e6004803603810190610389919061166b565b6108d6565b60405161039b9190611542565b60405180910390f35b6103be60048036038101906103b991906115da565b61095d565b005b6060600380546103cf906116da565b80601f01602080910402602001604051908101604052809291908181526020018280546103fb906116da565b80156104485780601f1061041d57610100808354040283529160200191610448565b820191906000526020600020905b81548152906001019060200180831161042b57829003601f168201915b5050505050905090565b60008061045d6109e0565b905061046a8185856109e8565b600191505092915050565b6000600254905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104b06109e0565b90506104bd858285610bb1565b6104c8858585610c3d565b60019150509392505050565b6104dc610ebc565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b6000806105346109e0565b905061055581858561054685896108d6565b610550919061173a565b6109e8565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105e8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f28383610f3a565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106893383611099565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106dd610ebc565b6106e7600061126f565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610771576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61077b8383611335565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107b9906116da565b80601f01602080910402602001604051908101604052809291908181526020018280546107e5906116da565b80156108325780601f1061080757610100808354040283529160200191610832565b820191906000526020600020905b81548152906001019060200180831161081557829003601f168201915b5050505050905090565b6000806108476109e0565b9050600061085582866108d6565b90508381101561089a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610891906117e0565b60405180910390fd5b6108a782868684036109e8565b60019250505092915050565b6000806108be6109e0565b90506108cb818585610c3d565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610965610ebc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb90611872565b60405180910390fd5b6109dd8161126f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90611904565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90611996565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ba49190611542565b60405180910390a3505050565b6000610bbd84846108d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c375781811015610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2090611a02565b60405180910390fd5b610c3684848484036109e8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390611a94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290611b26565b60405180910390fd5b610d26838383611368565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da390611bb8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e3f919061173a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ea39190611542565b60405180910390a3610eb684848461136d565b50505050565b610ec46109e0565b73ffffffffffffffffffffffffffffffffffffffff16610ee2610780565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90611c24565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090611c90565b60405180910390fd5b610fb560008383611368565b8060026000828254610fc7919061173a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461101c919061173a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110819190611542565b60405180910390a36110956000838361136d565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90611d22565b60405180910390fd5b61111482600083611368565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190611db4565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546111f19190611dd4565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112569190611542565b60405180910390a361126a8360008461136d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008161134284336108d6565b61134c9190611dd4565b90506113598333836109e8565b6113638383611099565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113ac578082015181840152602081019050611391565b60008484015250505050565b6000601f19601f8301169050919050565b60006113d482611372565b6113de818561137d565b93506113ee81856020860161138e565b6113f7816113b8565b840191505092915050565b6000602082019050818103600083015261141c81846113c9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061145482611429565b9050919050565b61146481611449565b811461146f57600080fd5b50565b6000813590506114818161145b565b92915050565b6000819050919050565b61149a81611487565b81146114a557600080fd5b50565b6000813590506114b781611491565b92915050565b600080604083850312156114d4576114d3611424565b5b60006114e285828601611472565b92505060206114f3858286016114a8565b9150509250929050565b60008115159050919050565b611512816114fd565b82525050565b600060208201905061152d6000830184611509565b92915050565b61153c81611487565b82525050565b60006020820190506115576000830184611533565b92915050565b61156681611449565b82525050565b6000602082019050611581600083018461155d565b92915050565b6000806000606084860312156115a05761159f611424565b5b60006115ae86828701611472565b93505060206115bf86828701611472565b92505060406115d0868287016114a8565b9150509250925092565b6000602082840312156115f0576115ef611424565b5b60006115fe84828501611472565b91505092915050565b600060ff82169050919050565b61161d81611607565b82525050565b60006020820190506116386000830184611614565b92915050565b60006020828403121561165457611653611424565b5b6000611662848285016114a8565b91505092915050565b6000806040838503121561168257611681611424565b5b600061169085828601611472565b92505060206116a185828601611472565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116f257607f821691505b602082108103611705576117046116ab565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061174582611487565b915061175083611487565b92508282019050808211156117685761176761170b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006117ca60258361137d565b91506117d58261176e565b604082019050919050565b600060208201905081810360008301526117f9816117bd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061185c60268361137d565b915061186782611800565b604082019050919050565b6000602082019050818103600083015261188b8161184f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006118ee60248361137d565b91506118f982611892565b604082019050919050565b6000602082019050818103600083015261191d816118e1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061198060228361137d565b915061198b82611924565b604082019050919050565b600060208201905081810360008301526119af81611973565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006119ec601d8361137d565b91506119f7826119b6565b602082019050919050565b60006020820190508181036000830152611a1b816119df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611a7e60258361137d565b9150611a8982611a22565b604082019050919050565b60006020820190508181036000830152611aad81611a71565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611b1060238361137d565b9150611b1b82611ab4565b604082019050919050565b60006020820190508181036000830152611b3f81611b03565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611ba260268361137d565b9150611bad82611b46565b604082019050919050565b60006020820190508181036000830152611bd181611b95565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611c0e60208361137d565b9150611c1982611bd8565b602082019050919050565b60006020820190508181036000830152611c3d81611c01565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611c7a601f8361137d565b9150611c8582611c44565b602082019050919050565b60006020820190508181036000830152611ca981611c6d565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d0c60218361137d565b9150611d1782611cb0565b604082019050919050565b60006020820190508181036000830152611d3b81611cff565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d9e60228361137d565b9150611da982611d42565b604082019050919050565b60006020820190508181036000830152611dcd81611d91565b9050919050565b6000611ddf82611487565b9150611dea83611487565b9250828203905081811115611e0257611e0161170b565b5b9291505056fea264697066735822122066b312a6dce96e2c0463ce6b79a5952f7da7b9da5cb4e4f6119e767c0f4cda9664736f6c63430008110033