60806040523480156200001157600080fd5b5062000022620000fa60201b60201c565b6040518060400160405280600781526020017f426c7565626f78000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f424200000000000000000000000000000000000000000000000000000000000081525081600390816200009f919062000729565b508060049081620000b1919062000729565b505050620000c5816200010260201b60201c565b50620000f4620000da620001c860201b60201c565b6c054f529ca52576bc6892000000620001f260201b60201c565b62000947565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002675760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200025e919062000855565b60405180910390fd5b6200027b600083836200027f60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620002d5578060026000828254620002c89190620008a1565b92505081905550620003ab565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000364578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200035b93929190620008ed565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003f6578060026000828254039250508190555062000443565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004a291906200092a565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200053157607f821691505b602082108103620005475762000546620004e9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005b17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000572565b620005bd868362000572565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200060a62000604620005fe84620005d5565b620005df565b620005d5565b9050919050565b6000819050919050565b6200062683620005e9565b6200063e620006358262000611565b8484546200057f565b825550505050565b600090565b6200065562000646565b620006628184846200061b565b505050565b5b818110156200068a576200067e6000826200064b565b60018101905062000668565b5050565b601f821115620006d957620006a3816200054d565b620006ae8462000562565b81016020851015620006be578190505b620006d6620006cd8562000562565b83018262000667565b50505b505050565b600082821c905092915050565b6000620006fe60001984600802620006de565b1980831691505092915050565b6000620007198383620006eb565b9150826002028217905092915050565b6200073482620004af565b67ffffffffffffffff81111562000750576200074f620004ba565b5b6200075c825462000518565b620007698282856200068e565b600060209050601f831160018114620007a157600084156200078c578287015190505b6200079885826200070b565b86555062000808565b601f198416620007b1866200054d565b60005b82811015620007db57848901518255600182019150602085019450602081019050620007b4565b86831015620007fb5784890151620007f7601f891682620006eb565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200083d8262000810565b9050919050565b6200084f8162000830565b82525050565b60006020820190506200086c600083018462000844565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008ae82620005d5565b9150620008bb83620005d5565b9250828201905080821115620008d657620008d562000872565b5b92915050565b620008e781620005d5565b82525050565b600060608201905062000904600083018662000844565b620009136020830185620008dc565b620009226040830184620008dc565b949350505050565b6000602082019050620009416000830184620008dc565b92915050565b61175680620009576000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d71461029d578063a9059cbb146102cd578063dd62ed3e146102fd578063f2fde38b1461032d57610100565b806370a0823114610227578063715018a6146102575780638da5cb5b1461026157806395d89b411461027f57610100565b8063313ce567116100d3578063313ce567146101a157806339509351146101bf57806342966c68146101ef578063672434821461020b57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d610349565b60405161011a9190611008565b60405180910390f35b61013d600480360381019061013891906110d2565b6103db565b60405161014a919061112d565b60405180910390f35b61015b6103fe565b6040516101689190611157565b60405180910390f35b61018b60048036038101906101869190611172565b610408565b604051610198919061112d565b60405180910390f35b6101a9610437565b6040516101b691906111e1565b60405180910390f35b6101d960048036038101906101d491906110d2565b610440565b6040516101e6919061112d565b60405180910390f35b610209600480360381019061020491906111fc565b610477565b005b61022560048036038101906102209190611434565b610484565b005b610241600480360381019061023c91906114ac565b610546565b60405161024e9190611157565b60405180910390f35b61025f61058e565b005b6102696105a2565b60405161027691906114e8565b60405180910390f35b6102876105cc565b6040516102949190611008565b60405180910390f35b6102b760048036038101906102b291906110d2565b61065e565b6040516102c4919061112d565b60405180910390f35b6102e760048036038101906102e291906110d2565b6106db565b6040516102f4919061112d565b60405180910390f35b61031760048036038101906103129190611503565b6106fe565b6040516103249190611157565b60405180910390f35b610347600480360381019061034291906114ac565b610785565b005b60606003805461035890611572565b80601f016020809104026020016040519081016040528092919081815260200182805461038490611572565b80156103d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b8154815290600101906020018083116103b457829003601f168201915b5050505050905090565b6000806103e661080b565b90506103f3818585610813565b600191505092915050565b6000600254905090565b60008061041361080b565b9050610420858285610825565b61042b8585856108b9565b60019150509392505050565b60006012905090565b60008061044b61080b565b905061046c81858561045d85896106fe565b61046791906115d2565b610813565b600191505092915050565b61048133826109ad565b50565b61048c610a2f565b80518251146104d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c790611652565b60405180910390fd5b60005b82518110156105415760008382815181106104f1576104f0611672565b5b6020026020010151905060008383815181106105105761050f611672565b5b6020026020010151905061052c61052561080b565b83836108b9565b50508080610539906116a1565b9150506104d3565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610596610a2f565b6105a06000610ab6565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105db90611572565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611572565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905090565b60008061066961080b565b9050600061067782866106fe565b9050838110156106c2578481856040517fa60f030c0000000000000000000000000000000000000000000000000000000081526004016106b9939291906116e9565b60405180910390fd5b6106cf8286868403610813565b60019250505092915050565b6000806106e661080b565b90506106f38185856108b9565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61078d610a2f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107ff5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107f691906114e8565b60405180910390fd5b61080881610ab6565b50565b600033905090565b6108208383836001610b7c565b505050565b600061083184846106fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108b357818110156108a3578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161089a939291906116e9565b60405180910390fd5b6108b284848484036000610b7c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361092b5760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161092291906114e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361099d5760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161099491906114e8565b60405180910390fd5b6109a8838383610d53565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a1f5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a1691906114e8565b60405180910390fd5b610a2b82600083610d53565b5050565b610a3761080b565b73ffffffffffffffffffffffffffffffffffffffff16610a556105a2565b73ffffffffffffffffffffffffffffffffffffffff1614610ab457610a7861080b565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610aab91906114e8565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bee5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610be591906114e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c605760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c5791906114e8565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610d4d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d449190611157565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610da5578060026000828254610d9991906115d2565b92505081905550610e78565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e31578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e28939291906116e9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec15780600260008282540392505081905550610f0e565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f6b9190611157565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fb2578082015181840152602081019050610f97565b60008484015250505050565b6000601f19601f8301169050919050565b6000610fda82610f78565b610fe48185610f83565b9350610ff4818560208601610f94565b610ffd81610fbe565b840191505092915050565b600060208201905081810360008301526110228184610fcf565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110698261103e565b9050919050565b6110798161105e565b811461108457600080fd5b50565b60008135905061109681611070565b92915050565b6000819050919050565b6110af8161109c565b81146110ba57600080fd5b50565b6000813590506110cc816110a6565b92915050565b600080604083850312156110e9576110e8611034565b5b60006110f785828601611087565b9250506020611108858286016110bd565b9150509250929050565b60008115159050919050565b61112781611112565b82525050565b6000602082019050611142600083018461111e565b92915050565b6111518161109c565b82525050565b600060208201905061116c6000830184611148565b92915050565b60008060006060848603121561118b5761118a611034565b5b600061119986828701611087565b93505060206111aa86828701611087565b92505060406111bb868287016110bd565b9150509250925092565b600060ff82169050919050565b6111db816111c5565b82525050565b60006020820190506111f660008301846111d2565b92915050565b60006020828403121561121257611211611034565b5b6000611220848285016110bd565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61126682610fbe565b810181811067ffffffffffffffff821117156112855761128461122e565b5b80604052505050565b600061129861102a565b90506112a4828261125d565b919050565b600067ffffffffffffffff8211156112c4576112c361122e565b5b602082029050602081019050919050565b600080fd5b60006112ed6112e8846112a9565b61128e565b905080838252602082019050602084028301858111156113105761130f6112d5565b5b835b8181101561133957806113258882611087565b845260208401935050602081019050611312565b5050509392505050565b600082601f83011261135857611357611229565b5b81356113688482602086016112da565b91505092915050565b600067ffffffffffffffff82111561138c5761138b61122e565b5b602082029050602081019050919050565b60006113b06113ab84611371565b61128e565b905080838252602082019050602084028301858111156113d3576113d26112d5565b5b835b818110156113fc57806113e888826110bd565b8452602084019350506020810190506113d5565b5050509392505050565b600082601f83011261141b5761141a611229565b5b813561142b84826020860161139d565b91505092915050565b6000806040838503121561144b5761144a611034565b5b600083013567ffffffffffffffff81111561146957611468611039565b5b61147585828601611343565b925050602083013567ffffffffffffffff81111561149657611495611039565b5b6114a285828601611406565b9150509250929050565b6000602082840312156114c2576114c1611034565b5b60006114d084828501611087565b91505092915050565b6114e28161105e565b82525050565b60006020820190506114fd60008301846114d9565b92915050565b6000806040838503121561151a57611519611034565b5b600061152885828601611087565b925050602061153985828601611087565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061158a57607f821691505b60208210810361159d5761159c611543565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115dd8261109c565b91506115e88361109c565b9250828201905080821115611600576115ff6115a3565b5b92915050565b7f617272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b600061163c601e83610f83565b915061164782611606565b602082019050919050565b6000602082019050818103600083015261166b8161162f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006116ac8261109c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116de576116dd6115a3565b5b600182019050919050565b60006060820190506116fe60008301866114d9565b61170b6020830185611148565b6117186040830184611148565b94935050505056fea2646970667358221220558b620d9d25c498cbd1a776f8f2d36a10e1c542e4d385475433ac950ca0fdf464736f6c63430008110033