60806040526000600c556000600d556000601060006101000a81548160ff0219169083151502179055503480156200003657600080fd5b5060405162003ed038038062003ed083398181016040528101906200005c91906200144b565b33848481600390816200007091906200173c565b5080600490816200008291906200173c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000fa5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000f1919062001834565b60405180910390fd5b6200010b81620007a460201b60201c565b5080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e1919062001851565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062001851565b6040518363ffffffff1660e01b8152600401620002b092919062001883565b6020604051808303816000875af1158015620002d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f6919062001851565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aed9bd3efcdc5550990c6db87b4fe502818442eb600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600073943113ff88599633abbc4cf65bee6ef379d3a03173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a826200076d91906200190e565b600e81905550600a826200078291906200190e565b600f819055506200079a33836200086a60201b60201c565b5050505062001a72565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008df5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620008d6919062001834565b60405180910390fd5b620008f360008383620008f760201b60201c565b5050565b601060009054906101000a900460ff161580156200095057506200092062000f7660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156200099857506200096862000f7660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620009f35750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801562000a4e5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000a86576040517fe09f033100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000a9662000f7660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000b205750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b5957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000bb45750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000c0b5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000c7257600062000c248362000fa060201b60201c565b9050600f54828262000c37919062001946565b111562000c70576040517f3261c79200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b600e548111801562000cce5750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000d06576040517f3261c79200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801562000dab5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801562000e5e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148062000e5d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b1562000f5d576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000ee0576064600c548362000ece919062001981565b62000eda91906200190e565b62000eff565b6064600d548362000ef2919062001981565b62000efe91906200190e565b5b905062000f3684600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168362000fe860201b60201c565b62000f568484838562000f4a9190620019cc565b62000fe860201b60201c565b5062000f71565b62000f7083838362000fe860201b60201c565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200103e57806002600082825462001031919062001946565b9250508190555062001114565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620010cd578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620010c49392919062001a18565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200115f5780600260008282540392505081905550620011ac565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200120b919062001a55565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620012818262001236565b810181811067ffffffffffffffff82111715620012a357620012a262001247565b5b80604052505050565b6000620012b862001218565b9050620012c6828262001276565b919050565b600067ffffffffffffffff821115620012e957620012e862001247565b5b620012f48262001236565b9050602081019050919050565b60005b838110156200132157808201518184015260208101905062001304565b60008484015250505050565b6000620013446200133e84620012cb565b620012ac565b90508281526020810184848401111562001363576200136262001231565b5b6200137084828562001301565b509392505050565b600082601f83011262001390576200138f6200122c565b5b8151620013a28482602086016200132d565b91505092915050565b6000819050919050565b620013c081620013ab565b8114620013cc57600080fd5b50565b600081519050620013e081620013b5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200141382620013e6565b9050919050565b620014258162001406565b81146200143157600080fd5b50565b60008151905062001445816200141a565b92915050565b6000806000806080858703121562001468576200146762001222565b5b600085015167ffffffffffffffff81111562001489576200148862001227565b5b620014978782880162001378565b945050602085015167ffffffffffffffff811115620014bb57620014ba62001227565b5b620014c98782880162001378565b9350506040620014dc87828801620013cf565b9250506060620014ef8782880162001434565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200154e57607f821691505b60208210810362001564576200156362001506565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620015ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200158f565b620015da86836200158f565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200161d620016176200161184620013ab565b620015f2565b620013ab565b9050919050565b6000819050919050565b6200163983620015fc565b62001651620016488262001624565b8484546200159c565b825550505050565b600090565b6200166862001659565b620016758184846200162e565b505050565b5b818110156200169d57620016916000826200165e565b6001810190506200167b565b5050565b601f821115620016ec57620016b6816200156a565b620016c1846200157f565b81016020851015620016d1578190505b620016e9620016e0856200157f565b8301826200167a565b50505b505050565b600082821c905092915050565b60006200171160001984600802620016f1565b1980831691505092915050565b60006200172c8383620016fe565b9150826002028217905092915050565b6200174782620014fb565b67ffffffffffffffff81111562001763576200176262001247565b5b6200176f825462001535565b6200177c828285620016a1565b600060209050601f831160018114620017b457600084156200179f578287015190505b620017ab85826200171e565b8655506200181b565b601f198416620017c4866200156a565b60005b82811015620017ee57848901518255600182019150602085019450602081019050620017c7565b868310156200180e57848901516200180a601f891682620016fe565b8355505b6001600288020188555050505b505050505050565b6200182e8162001406565b82525050565b60006020820190506200184b600083018462001823565b92915050565b6000602082840312156200186a576200186962001222565b5b60006200187a8482850162001434565b91505092915050565b60006040820190506200189a600083018562001823565b620018a9602083018462001823565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200191b82620013ab565b91506200192883620013ab565b9250826200193b576200193a620018b0565b5b828204905092915050565b60006200195382620013ab565b91506200196083620013ab565b92508282019050808211156200197b576200197a620018df565b5b92915050565b60006200198e82620013ab565b91506200199b83620013ab565b9250828202620019ab81620013ab565b91508282048414831517620019c557620019c4620018df565b5b5092915050565b6000620019d982620013ab565b9150620019e683620013ab565b925082820390508181111562001a015762001a00620018df565b5b92915050565b62001a1281620013ab565b82525050565b600060608201905062001a2f600083018662001823565b62001a3e602083018562001a07565b62001a4d604083018462001a07565b949350505050565b600060208201905062001a6c600083018462001a07565b92915050565b61244e8062001a826000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063a9059cbb116100a2578063d3f6a15711610071578063d3f6a1571461054e578063dd62ed3e1461056a578063f2fde38b1461059a578063f8b45b05146105b6576101e5565b8063a9059cbb146104c6578063c4590d3f146104f6578063c9567bf914610512578063d36d049714610530576101e5565b80638da5cb5b116100de5780638da5cb5b1461043c57806395d89b411461045a5780639be953b314610478578063a0e47bf6146104a8576101e5565b8063715018a6146103ee5780637437681e146103f8578063751039fc146104165780638a218a7d14610420576101e5565b80633090b64011610187578063471131ac11610156578063471131ac146103525780634f1455c914610382578063570ca735146103a057806370a08231146103be576101e5565b80633090b640146102dc578063313ce567146102fa57806332972e46146103185780633ef6136314610336576101e5565b806318160ddd116101c357806318160ddd146102685780631e34c5851461028657806323b872dd146102a2578063293230b8146102d2576101e5565b806306fdde03146101ea578063095ea7b31461020857806312fb555014610238575b600080fd5b6101f26105d4565b6040516101ff9190611cf8565b60405180910390f35b610222600480360381019061021d9190611db8565b610666565b60405161022f9190611e13565b60405180910390f35b610252600480360381019061024d9190611e2e565b610689565b60405161025f9190611e13565b60405180910390f35b6102706106a9565b60405161027d9190611e6a565b60405180910390f35b6102a0600480360381019061029b9190611e85565b6106b3565b005b6102bc60048036038101906102b79190611ec5565b61078d565b6040516102c99190611e13565b60405180910390f35b6102da6107bc565b005b6102e46108a1565b6040516102f19190611f27565b60405180910390f35b6103026108c7565b60405161030f9190611f5e565b60405180910390f35b6103206108d0565b60405161032d9190611f27565b60405180910390f35b610350600480360381019061034b919061200a565b6108f6565b005b61036c60048036038101906103679190611e2e565b6109a3565b6040516103799190611e13565b60405180910390f35b61038a6109c3565b6040516103979190611e6a565b60405180910390f35b6103a86109c9565b6040516103b59190611f27565b60405180910390f35b6103d860048036038101906103d39190611e2e565b6109ef565b6040516103e59190611e6a565b60405180910390f35b6103f6610a37565b005b610400610a4b565b60405161040d9190611e6a565b60405180910390f35b61041e610a51565b005b61043a6004803603810190610435919061200a565b610aa9565b005b610444610b56565b6040516104519190611f27565b60405180910390f35b610462610b80565b60405161046f9190611cf8565b60405180910390f35b610492600480360381019061048d9190611e2e565b610c12565b60405161049f9190611e13565b60405180910390f35b6104b0610d39565b6040516104bd91906120c9565b60405180910390f35b6104e060048036038101906104db9190611db8565b610d5f565b6040516104ed9190611e13565b60405180910390f35b610510600480360381019061050b9190611e85565b610d82565b005b61051a610d9c565b6040516105279190611e13565b60405180910390f35b610538610daf565b6040516105459190611e6a565b60405180910390f35b610568600480360381019061056391906120e4565b610db5565b005b610584600480360381019061057f91906120e4565b610e43565b6040516105919190611e6a565b60405180910390f35b6105b460048036038101906105af9190611e2e565b610eca565b005b6105be610f50565b6040516105cb9190611e6a565b60405180910390f35b6060600380546105e390612153565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90612153565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600080610671610f56565b905061067e818585610f5e565b600191505092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6106bb610b56565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107445750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561077b576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600c8190555080600d819055505050565b600080610798610f56565b90506107a5858285610f70565b6107b0858585611004565b60019150509392505050565b6107c4610b56565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561084d5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610884576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108fe6110f8565b60005b8383905081101561099d5781600a600086868581811061092457610923612184565b5b90506020020160208101906109399190611e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610995906121e2565b915050610901565b50505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600d5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a3f6110f8565b610a49600061117f565b565b600e5481565b610a596110f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600e819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f81905550565b610ab16110f8565b60005b83839050811015610b505781600b6000868685818110610ad757610ad6612184565b5b9050602002016020810190610aec9190611e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b48906121e2565b915050610ab4565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b8f90612153565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90612153565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c4e9190611f27565b602060405180830381865afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f919061223f565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610cee92919061226c565b6020604051808303816000875af1158015610d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3191906122aa565b915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610d6a610f56565b9050610d77818585611004565b600191505092915050565b610d8a6110f8565b81600e8190555080600f819055505050565b601060009054906101000a900460ff1681565b600c5481565b610dbd6110f8565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ed26110f8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f445760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610f3b9190611f27565b60405180910390fd5b610f4d8161117f565b50565b600f5481565b600033905090565b610f6b8383836001611245565b505050565b6000610f7c8484610e43565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ffe5781811015610fee578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610fe5939291906122d7565b60405180910390fd5b610ffd84848484036000611245565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110765760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161106d9190611f27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e85760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110df9190611f27565b60405180910390fd5b6110f383838361141c565b505050565b611100610f56565b73ffffffffffffffffffffffffffffffffffffffff1661111e610b56565b73ffffffffffffffffffffffffffffffffffffffff161461117d57611141610f56565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111749190611f27565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112b75760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016112ae9190611f27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113295760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016113209190611f27565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611416578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161140d9190611e6a565b60405180910390a35b50505050565b601060009054906101000a900460ff1615801561146c575061143c610b56565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156114ab575061147b610b56565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156115055750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561155f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611596576040517fe09f033100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61159e610b56565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116275750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561165f57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116b95750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561170f5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561176a57600061171f836109ef565b9050600f548282611730919061230e565b1115611768576040517f3261c79200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b600e54811180156117c55750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117fc576040517f3261c79200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118a05750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156119515750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806119505750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b5b15611a32576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146119cc576064600c54836119bd9190612342565b6119c791906123b3565b6119e7565b6064600d54836119dc9190612342565b6119e691906123b3565b5b9050611a1684600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611a43565b611a2c84848385611a2791906123e4565b611a43565b50611a3e565b611a3d838383611a43565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a95578060026000828254611a89919061230e565b92505081905550611b68565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b21578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611b18939291906122d7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bb15780600260008282540392505081905550611bfe565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c5b9190611e6a565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ca2578082015181840152602081019050611c87565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cca82611c68565b611cd48185611c73565b9350611ce4818560208601611c84565b611ced81611cae565b840191505092915050565b60006020820190508181036000830152611d128184611cbf565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d4f82611d24565b9050919050565b611d5f81611d44565b8114611d6a57600080fd5b50565b600081359050611d7c81611d56565b92915050565b6000819050919050565b611d9581611d82565b8114611da057600080fd5b50565b600081359050611db281611d8c565b92915050565b60008060408385031215611dcf57611dce611d1a565b5b6000611ddd85828601611d6d565b9250506020611dee85828601611da3565b9150509250929050565b60008115159050919050565b611e0d81611df8565b82525050565b6000602082019050611e286000830184611e04565b92915050565b600060208284031215611e4457611e43611d1a565b5b6000611e5284828501611d6d565b91505092915050565b611e6481611d82565b82525050565b6000602082019050611e7f6000830184611e5b565b92915050565b60008060408385031215611e9c57611e9b611d1a565b5b6000611eaa85828601611da3565b9250506020611ebb85828601611da3565b9150509250929050565b600080600060608486031215611ede57611edd611d1a565b5b6000611eec86828701611d6d565b9350506020611efd86828701611d6d565b9250506040611f0e86828701611da3565b9150509250925092565b611f2181611d44565b82525050565b6000602082019050611f3c6000830184611f18565b92915050565b600060ff82169050919050565b611f5881611f42565b82525050565b6000602082019050611f736000830184611f4f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f9e57611f9d611f79565b5b8235905067ffffffffffffffff811115611fbb57611fba611f7e565b5b602083019150836020820283011115611fd757611fd6611f83565b5b9250929050565b611fe781611df8565b8114611ff257600080fd5b50565b60008135905061200481611fde565b92915050565b60008060006040848603121561202357612022611d1a565b5b600084013567ffffffffffffffff81111561204157612040611d1f565b5b61204d86828701611f88565b9350935050602061206086828701611ff5565b9150509250925092565b6000819050919050565b600061208f61208a61208584611d24565b61206a565b611d24565b9050919050565b60006120a182612074565b9050919050565b60006120b382612096565b9050919050565b6120c3816120a8565b82525050565b60006020820190506120de60008301846120ba565b92915050565b600080604083850312156120fb576120fa611d1a565b5b600061210985828601611d6d565b925050602061211a85828601611d6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061216b57607f821691505b60208210810361217e5761217d612124565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121ed82611d82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361221f5761221e6121b3565b5b600182019050919050565b60008151905061223981611d8c565b92915050565b60006020828403121561225557612254611d1a565b5b60006122638482850161222a565b91505092915050565b60006040820190506122816000830185611f18565b61228e6020830184611e5b565b9392505050565b6000815190506122a481611fde565b92915050565b6000602082840312156122c0576122bf611d1a565b5b60006122ce84828501612295565b91505092915050565b60006060820190506122ec6000830186611f18565b6122f96020830185611e5b565b6123066040830184611e5b565b949350505050565b600061231982611d82565b915061232483611d82565b925082820190508082111561233c5761233b6121b3565b5b92915050565b600061234d82611d82565b915061235883611d82565b925082820261236681611d82565b9150828204841483151761237d5761237c6121b3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006123be82611d82565b91506123c983611d82565b9250826123d9576123d8612384565b5b828204905092915050565b60006123ef82611d82565b91506123fa83611d82565b9250828203905081811115612412576124116121b3565b5b9291505056fea2646970667358221220f2414d31b2ab5be2baaa0ed829c8b9a0b13dd845f91df46d3e6d5e6d0e82bd3664736f6c63430008140033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000000000000000000000000000000000000000000055361746f3300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045341544f00000000000000000000000000000000000000000000000000000000