0x608060405260006009556000600a60006101000a81548160ff0219169083151502179055503480156200003157600080fd5b506040518060400160405280600981526020017f472048204f2053205400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f47484f53540000000000000000000000000000000000000000000000000000008152508160029080519060200190620000b6929190620001e1565b508060039080519060200190620000cf929190620001e1565b50620000e06200010e60201b60201c565b600081905550505062000108620000fc6200011360201b60201c565b6200011b60201b60201c565b620002f5565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ef90620002c0565b90600052602060002090601f0160209004810192826200021357600085556200025f565b82601f106200022e57805160ff19168380011785556200025f565b828001600101855582156200025f579182015b828111156200025e57825182559160200191906001019062000241565b5b5090506200026e919062000272565b5090565b5b808211156200028d57600081600090555060010162000273565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d957607f821691505b602082108103620002ef57620002ee62000291565b5b50919050565b6121d380620003056000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b85780639c6442741161007c5780639c6442741461032d578063a22cb46514610337578063b88d4fde14610353578063c87b56dd1461036f578063e985e9c51461039f578063f2fde38b146103cf57610142565b806370a0823114610299578063715018a6146102c95780637196382f146102d35780638da5cb5b146102f157806395d89b411461030f57610142565b806318160ddd1161010a57806318160ddd146101eb57806323b872dd146102095780632868c0351461022557806334918dfd1461024357806342842e0e1461024d5780636352211e1461026957610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c55780631249c58b146101e1575b600080fd5b610161600480360381019061015c91906118c2565b6103eb565b60405161016e919061190a565b60405180910390f35b61017f61047d565b60405161018c91906119be565b60405180910390f35b6101af60048036038101906101aa9190611a16565b61050f565b6040516101bc9190611a84565b60405180910390f35b6101df60048036038101906101da9190611acb565b61058b565b005b6101e96106cc565b005b6101f3610740565b6040516102009190611b1a565b60405180910390f35b610223600480360381019061021e9190611b35565b610757565b005b61022d610a79565b60405161023a9190611b1a565b60405180910390f35b61024b610a7f565b005b61026760048036038101906102629190611b35565b610aab565b005b610283600480360381019061027e9190611a16565b610acb565b6040516102909190611a84565b60405180910390f35b6102b360048036038101906102ae9190611b88565b610add565b6040516102c09190611b1a565b60405180910390f35b6102d1610b95565b005b6102db610ba9565b6040516102e8919061190a565b60405180910390f35b6102f9610bbc565b6040516103069190611a84565b60405180910390f35b610317610be6565b60405161032491906119be565b60405180910390f35b610335610c78565b005b610351600480360381019061034c9190611be1565b610d07565b005b61036d60048036038101906103689190611d56565b610e7e565b005b61038960048036038101906103849190611a16565b610ef1565b60405161039691906119be565b60405180910390f35b6103b960048036038101906103b49190611dd9565b610f8f565b6040516103c6919061190a565b60405180910390f35b6103e960048036038101906103e49190611b88565b611023565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104765750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461048c90611e48565b80601f01602080910402602001604051908101604052809291908181526020018280546104b890611e48565b80156105055780601f106104da57610100808354040283529160200191610505565b820191906000526020600020905b8154815290600101906020018083116104e857829003601f168201915b5050505050905090565b600061051a826110a6565b610550576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061059682610acb565b90508073ffffffffffffffffffffffffffffffffffffffff166105b7611105565b73ffffffffffffffffffffffffffffffffffffffff161461061a576105e3816105de611105565b610f8f565b610619576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600a60009054906101000a900460ff1661071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290611ec5565b60405180910390fd5b61072633600161110d565b6009600081548092919061073990611f14565b9190505550565b600061074a61112b565b6001546000540303905090565b600061076282611130565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107c9576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806107d5846111fc565b915091506107eb81876107e6611105565b61121e565b61083757610800866107fb611105565b610f8f565b610836576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361089d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108aa8686866001611262565b80156108b557600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506109838561095f888887611268565b7c020000000000000000000000000000000000000000000000000000000017611290565b600460008681526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000841603610a095760006001850190506000600460008381526020019081526020016000205403610a07576000548114610a06578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610a7186868660016112bb565b505050505050565b60095481565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610ac683838360405180602001604052806000815250610e7e565b505050565b6000610ad682611130565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b44576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b610b9d6112c1565b610ba7600061133f565b565b600a60009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610bf590611e48565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2190611e48565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b5050505050905090565b600a60009054906101000a900460ff16610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90611ec5565b60405180910390fd5b610cd233600161110d565b60096000815480929190610ce590611f14565b91905055506000600a60006101000a81548160ff021916908315150217905550565b610d0f611105565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d73576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610d80611105565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e2d611105565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e72919061190a565b60405180910390a35050565b610e89848484610757565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610eeb57610eb484848484611405565b610eea576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060610efc826110a6565b610f32576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f3c611555565b90506000815103610f5c5760405180602001604052806000815250610f87565b80610f668461156c565b604051602001610f77929190611f98565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61102b6112c1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061202e565b60405180910390fd5b6110a38161133f565b50565b6000816110b161112b565b111580156110c0575060005482105b80156110fe575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b6111278282604051806020016040528060008152506115c6565b5050565b600090565b6000808290508061113f61112b565b116111c5576000548110156111c45760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036111c2575b600081036111b857600460008360019003935083815260200190815260200160002054905061118e565b80925050506111f7565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600690508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861127f868684611663565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6112c961166c565b73ffffffffffffffffffffffffffffffffffffffff166112e7610bbc565b73ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113349061209a565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261142b611105565b8786866040518563ffffffff1660e01b815260040161144d949392919061210f565b6020604051808303816000875af192505050801561148957506040513d601f19601f820116820180604052508101906114869190612170565b60015b611502573d80600081146114b9576040519150601f19603f3d011682016040523d82523d6000602084013e6114be565b606091505b5060008151036114fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b80156115b257600183039250600a81066030018353600a81049050611592565b508181036020830392508083525050919050565b6115d08383611674565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461165e57600080549050600083820390505b6116106000868380600101945086611405565b611646576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106115fd57816000541461165b57600080fd5b50505b505050565b60009392505050565b600033905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116e0576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000820361171a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117276000848385611262565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061179e8361178f6000866000611268565b61179885611846565b17611290565b60046000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106117c25780600081905550505061184160008483856112bb565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61189f8161186a565b81146118aa57600080fd5b50565b6000813590506118bc81611896565b92915050565b6000602082840312156118d8576118d7611860565b5b60006118e6848285016118ad565b91505092915050565b60008115159050919050565b611904816118ef565b82525050565b600060208201905061191f60008301846118fb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561195f578082015181840152602081019050611944565b8381111561196e576000848401525b50505050565b6000601f19601f8301169050919050565b600061199082611925565b61199a8185611930565b93506119aa818560208601611941565b6119b381611974565b840191505092915050565b600060208201905081810360008301526119d88184611985565b905092915050565b6000819050919050565b6119f3816119e0565b81146119fe57600080fd5b50565b600081359050611a10816119ea565b92915050565b600060208284031215611a2c57611a2b611860565b5b6000611a3a84828501611a01565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a6e82611a43565b9050919050565b611a7e81611a63565b82525050565b6000602082019050611a996000830184611a75565b92915050565b611aa881611a63565b8114611ab357600080fd5b50565b600081359050611ac581611a9f565b92915050565b60008060408385031215611ae257611ae1611860565b5b6000611af085828601611ab6565b9250506020611b0185828601611a01565b9150509250929050565b611b14816119e0565b82525050565b6000602082019050611b2f6000830184611b0b565b92915050565b600080600060608486031215611b4e57611b4d611860565b5b6000611b5c86828701611ab6565b9350506020611b6d86828701611ab6565b9250506040611b7e86828701611a01565b9150509250925092565b600060208284031215611b9e57611b9d611860565b5b6000611bac84828501611ab6565b91505092915050565b611bbe816118ef565b8114611bc957600080fd5b50565b600081359050611bdb81611bb5565b92915050565b60008060408385031215611bf857611bf7611860565b5b6000611c0685828601611ab6565b9250506020611c1785828601611bcc565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c6382611974565b810181811067ffffffffffffffff82111715611c8257611c81611c2b565b5b80604052505050565b6000611c95611856565b9050611ca18282611c5a565b919050565b600067ffffffffffffffff821115611cc157611cc0611c2b565b5b611cca82611974565b9050602081019050919050565b82818337600083830152505050565b6000611cf9611cf484611ca6565b611c8b565b905082815260208101848484011115611d1557611d14611c26565b5b611d20848285611cd7565b509392505050565b600082601f830112611d3d57611d3c611c21565b5b8135611d4d848260208601611ce6565b91505092915050565b60008060008060808587031215611d7057611d6f611860565b5b6000611d7e87828801611ab6565b9450506020611d8f87828801611ab6565b9350506040611da087828801611a01565b925050606085013567ffffffffffffffff811115611dc157611dc0611865565b5b611dcd87828801611d28565b91505092959194509250565b60008060408385031215611df057611def611860565b5b6000611dfe85828601611ab6565b9250506020611e0f85828601611ab6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e6057607f821691505b602082108103611e7357611e72611e19565b5b50919050565b7f53616c65206973206e6f74206c69766500000000000000000000000000000000600082015250565b6000611eaf601083611930565b9150611eba82611e79565b602082019050919050565b60006020820190508181036000830152611ede81611ea2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f1f826119e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f5157611f50611ee5565b5b600182019050919050565b600081905092915050565b6000611f7282611925565b611f7c8185611f5c565b9350611f8c818560208601611941565b80840191505092915050565b6000611fa48285611f67565b9150611fb08284611f67565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612018602683611930565b915061202382611fbc565b604082019050919050565b600060208201905081810360008301526120478161200b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612084602083611930565b915061208f8261204e565b602082019050919050565b600060208201905081810360008301526120b381612077565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006120e1826120ba565b6120eb81856120c5565b93506120fb818560208601611941565b61210481611974565b840191505092915050565b60006080820190506121246000830187611a75565b6121316020830186611a75565b61213e6040830185611b0b565b818103606083015261215081846120d6565b905095945050505050565b60008151905061216a81611896565b92915050565b60006020828403121561218657612185611860565b5b60006121948482850161215b565b9150509291505056fea264697066735822122085d66e82cebf4b873bce285e2ab48ed6f8fa8bd3b0f4b88bab140ddacaf1dd9764736f6c634300080e0033