60806040526040518060400160405280600981526020017f54455354544f4b454e0000000000000000000000000000000000000000000000815250600490816200004a919062000e87565b506040518060400160405280600281526020017f54540000000000000000000000000000000000000000000000000000000000008152506005908162000091919062000e87565b50732260fac5e5542a773aa44fbcfedf7c193bc2c59960075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000f2575f80fd5b5060405162004e1138038062004e11833981810160405281019062000118919062000fd0565b8060405180602001604052805f81525062000139816200025860201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001ad575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001a4919062001011565b60405180910390fd5b620001be816200026d60201b60201c565b5060405180608001604052806050815260200162004dc16050913960069081620001e9919062000e87565b50620002513360016127105f67ffffffffffffffff81111562000211576200021062000c2d565b5b6040519080825280601f01601f191660200182016040528015620002445781602001600182028036833780820191505090505b506200033060201b60201c565b506200140a565b806002908162000269919062000e87565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620003a3575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016200039a919062001011565b60405180910390fd5b5f80620003b78585620003d860201b60201c565b91509150620003d05f878484876200040860201b60201c565b505050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b6200041c85858585620004db60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614620004d4575f620004616200088d60201b60201c565b90506001845103620004bb575f620004835f866200089460201b90919060201c565b90505f6200049b5f866200089460201b90919060201c565b9050620004b3838989858589620008a760201b60201c565b5050620004d2565b620004d181878787878762000a6560201b60201c565b5b505b5050505050565b80518251146200052857815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016200051f9291906200103d565b60405180910390fd5b5f620005396200088d60201b60201c565b90505f5b835181101562000742575f6200055d82866200089460201b90919060201c565b90505f6200057583866200089460201b90919060201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146200069c575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200064857888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016200063f949392919062001068565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146200073457805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200072c9190620010e0565b925050819055505b50508060010190506200053d565b50600183510362000805575f620007635f856200089460201b90919060201c565b90505f6200077b5f856200089460201b90919060201c565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051620007f59291906200103d565b60405180910390a4505062000886565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516200087d929190620011e1565b60405180910390a45b5050505050565b5f33905090565b5f60208202602084010151905092915050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111562000a5d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200090a959493929190620012ae565b6020604051808303815f875af19250505080156200094857506040513d601f19601f820116820180604052508101906200094591906200136a565b60015b620009cf573d805f811462000979576040519150601f19603f3d011682016040523d82523d5f602084013e6200097e565b606091505b505f815103620009c757846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401620009be919062001011565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000a5b57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000a52919062001011565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111562000c1b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040162000ac89594939291906200139a565b6020604051808303815f875af192505050801562000b0657506040513d601f19601f8201168201806040525081019062000b0391906200136a565b60015b62000b8d573d805f811462000b37576040519150601f19603f3d011682016040523d82523d5f602084013e62000b3c565b606091505b505f81510362000b8557846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000b7c919062001011565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000c1957846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040162000c10919062001011565b60405180910390fd5b505b505050505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c9f57607f821691505b60208210810362000cb55762000cb462000c5a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cdc565b62000d25868362000cdc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d6f62000d6962000d638462000d3d565b62000d46565b62000d3d565b9050919050565b5f819050919050565b62000d8a8362000d4f565b62000da262000d998262000d76565b84845462000ce8565b825550505050565b5f90565b62000db862000daa565b62000dc581848462000d7f565b505050565b5b8181101562000dec5762000de05f8262000dae565b60018101905062000dcb565b5050565b601f82111562000e3b5762000e058162000cbb565b62000e108462000ccd565b8101602085101562000e20578190505b62000e3862000e2f8562000ccd565b83018262000dca565b50505b505050565b5f82821c905092915050565b5f62000e5d5f198460080262000e40565b1980831691505092915050565b5f62000e77838362000e4c565b9150826002028217905092915050565b62000e928262000c23565b67ffffffffffffffff81111562000eae5762000ead62000c2d565b5b62000eba825462000c87565b62000ec782828562000df0565b5f60209050601f83116001811462000efd575f841562000ee8578287015190505b62000ef4858262000e6a565b86555062000f63565b601f19841662000f0d8662000cbb565b5f5b8281101562000f365784890151825560018201915060208501945060208101905062000f0f565b8683101562000f56578489015162000f52601f89168262000e4c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f9a8262000f6f565b9050919050565b62000fac8162000f8e565b811462000fb7575f80fd5b50565b5f8151905062000fca8162000fa1565b92915050565b5f6020828403121562000fe85762000fe762000f6b565b5b5f62000ff78482850162000fba565b91505092915050565b6200100b8162000f8e565b82525050565b5f602082019050620010265f83018462001000565b92915050565b620010378162000d3d565b82525050565b5f604082019050620010525f8301856200102c565b6200106160208301846200102c565b9392505050565b5f6080820190506200107d5f83018762001000565b6200108c60208301866200102c565b6200109b60408301856200102c565b620010aa60608301846200102c565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010ec8262000d3d565b9150620010f98362000d3d565b9250828201905080821115620011145762001113620010b3565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6200114e8162000d3d565b82525050565b5f62001161838362001143565b60208301905092915050565b5f602082019050919050565b5f62001185826200111a565b62001191818562001124565b93506200119e8362001134565b805f5b83811015620011d4578151620011b8888262001154565b9750620011c5836200116d565b925050600181019050620011a1565b5085935050505092915050565b5f6040820190508181035f830152620011fb818562001179565b9050818103602083015262001211818462001179565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156200125357808201518184015260208101905062001236565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200127a826200121a565b62001286818562001224565b93506200129881856020860162001234565b620012a3816200125e565b840191505092915050565b5f60a082019050620012c35f83018862001000565b620012d2602083018762001000565b620012e160408301866200102c565b620012f060608301856200102c565b81810360808301526200130481846200126e565b90509695505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620013468162001310565b811462001351575f80fd5b50565b5f8151905062001364816200133b565b92915050565b5f6020828403121562001382576200138162000f6b565b5b5f620013918482850162001354565b91505092915050565b5f60a082019050620013af5f83018862001000565b620013be602083018762001000565b8181036040830152620013d2818662001179565b90508181036060830152620013e8818562001179565b90508181036080830152620013fe81846200126e565b90509695505050505050565b6139a980620014185f395ff3fe608060405234801561000f575f80fd5b506004361061018b575f3560e01c806395d89b41116100dc578063c47f002711610095578063e985e9c51161006f578063e985e9c514610451578063eed7058d14610481578063f242432a1461049d578063f2fde38b146104b95761018b565b8063c47f0027146103e7578063d547cfb714610403578063d95b6371146104215761018b565b806395d89b411461033d5780639870d7fe1461035b578063a22cb46514610377578063ac8a584a14610393578063b84c8246146103af578063bdf6e5cc146103cb5761018b565b80632c114f19116101495780634e1273f4116101235780634e1273f4146102c9578063715018a6146102f9578063731133e9146103035780638da5cb5b1461031f5761018b565b80632c114f19146102755780632eb2c2d61461029157806330176e13146102ad5761018b565b8062fdd58e1461018f57806301ffc9a7146101bf57806306fdde03146101ef5780630e89341c1461020d5780631b8483d71461023d5780631f7fdffa14610259575b5f80fd5b6101a960048036038101906101a49190612481565b6104d5565b6040516101b691906124ce565b60405180910390f35b6101d960048036038101906101d4919061253c565b61052a565b6040516101e69190612581565b60405180910390f35b6101f761060b565b6040516102049190612624565b60405180910390f35b61022760048036038101906102229190612644565b61069b565b6040516102349190612624565b60405180910390f35b6102576004803603810190610252919061266f565b6106cf565b005b610273600480360381019061026e919061289d565b610819565b005b61028f600480360381019061028a9190612a15565b610833565b005b6102ab60048036038101906102a69190612ae9565b610906565b005b6102c760048036038101906102c29190612c52565b6109ad565b005b6102e360048036038101906102de9190612c99565b6109c8565b6040516102f09190612dc6565b60405180910390f35b610301610acf565b005b61031d60048036038101906103189190612de6565b610ae2565b005b610327610afc565b6040516103349190612e75565b60405180910390f35b610345610b24565b6040516103529190612624565b60405180910390f35b61037560048036038101906103709190612e8e565b610bb4565b005b610391600480360381019061038c9190612ee3565b610bd4565b005b6103ad60048036038101906103a89190612e8e565b610bea565b005b6103c960048036038101906103c49190612c52565b610c0a565b005b6103e560048036038101906103e0919061266f565b610c25565b005b61040160048036038101906103fc9190612c52565b610d91565b005b61040b610dac565b6040516104189190612624565b60405180910390f35b61043b60048036038101906104369190612f21565b610e3c565b6040516104489190612581565b60405180910390f35b61046b60048036038101906104669190612f21565b610ea0565b6040516104789190612581565b60405180910390f35b61049b60048036038101906104969190612f5f565b610f2e565b005b6104b760048036038101906104b29190612f5f565b611028565b005b6104d360048036038101906104ce9190612e8e565b6110cf565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610604575061060382611153565b5b9050919050565b60606004805461061a9061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546106469061301f565b80156106915780601f1061066857610100808354040283529160200191610691565b820191905f5260205f20905b81548152906001019060200180831161067457829003601f168201915b5050505050905090565b606060066106a8836111bc565b6040516020016106b992919061311b565b6040516020818303038152906040529050919050565b6106d7611286565b5f8111610719576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610710906131ae565b60405180910390fd5b5f5b81811015610814575f61072c61130d565b9050610787818560015f67ffffffffffffffff81111561074f5761074e6126b1565b5b6040519080825280601f01601f1916602001820160405280156107815781602001600182028036833780820191505090505b50611353565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628760016040516107fe92919061320e565b60405180910390a450808060010191505061071b565b505050565b610821611286565b61082d848484846113e8565b50505050565b61083b611286565b8251845114801561084d575081518351145b61088c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108839061327f565b60405180910390fd5b5f5b84518110156108ff576108f2338683815181106108ae576108ad61329d565b5b60200260200101518684815181106108c9576108c861329d565b5b60200260200101518685815181106108e4576108e361329d565b5b60200260200101518661146b565b808060010191505061088e565b5050505050565b5f61090f611571565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561095457506109528682610ea0565b155b156109985780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161098f9291906132ca565b60405180910390fd5b6109a58686868686611578565b505050505050565b6109b5611286565b80600690816109c49190613473565b5050565b60608151835114610a1457815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610a0b929190613542565b60405180910390fd5b5f835167ffffffffffffffff811115610a3057610a2f6126b1565b5b604051908082528060200260200182016040528015610a5e5781602001602082028036833780820191505090505b5090505f5b8451811015610ac457610a9a610a82828761166c90919063ffffffff16565b610a95838761167f90919063ffffffff16565b6104d5565b828281518110610aad57610aac61329d565b5b602002602001018181525050806001019050610a63565b508091505092915050565b610ad7611286565b610ae05f611692565b565b610aea611286565b610af684848484611353565b50505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610b339061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f9061301f565b8015610baa5780601f10610b8157610100808354040283529160200191610baa565b820191905f5260205f20905b815481529060010190602001808311610b8d57829003601f168201915b5050505050905090565b610bbc611286565b610bd081600861175590919063ffffffff16565b5050565b610be6610bdf611571565b8383611782565b5050565b610bf2611286565b610c068160086118eb90919063ffffffff16565b5050565b610c12611286565b8060059081610c219190613473565b5050565b610c2d611286565b5f8111610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c66906131ae565b60405180910390fd5b610cc933836127105f67ffffffffffffffff811115610c9157610c906126b1565b5b6040519080825280601f01601f191660200182016040528015610cc35781602001600182028036833780820191505090505b50611353565b5f5b81811015610d8c575f610cdc61130d565b90508073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62876001604051610d7692919061320e565b60405180910390a4508080600101915050610ccb565b505050565b610d99611286565b8060049081610da89190613473565b5050565b606060068054610dbb9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610de79061301f565b8015610e325780601f10610e0957610100808354040283529160200191610e32565b820191905f5260205f20905b815481529060010190602001808311610e1557829003601f168201915b5050505050905090565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e7d5750610e7c8284610ea0565b5b80610e985750610e9783600861191890919063ffffffff16565b5b905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f6e5750610f6d8533610ea0565b5b80610f895750610f8833600861191890919063ffffffff16565b5b610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf906135d9565b60405180910390fd5b81610fd386856104d5565b1015611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b90613667565b60405180910390fd5b611021858585858561146b565b5050505050565b5f611031611571565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561107657506110748682610ea0565b155b156110ba5780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016110b19291906132ca565b60405180910390fd5b6110c7868686868661146b565b505050505050565b6110d7611286565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611147575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161113e9190612e75565b60405180910390fd5b61115081611692565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60605f60016111ca84611945565b0190505f8167ffffffffffffffff8111156111e8576111e76126b1565b5b6040519080825280601f01601f19166020018201604052801561121a5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561127b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816112705761126f613685565b5b0494505f8503611227575b819350505050919050565b61128e611571565b73ffffffffffffffffffffffffffffffffffffffff166112ac610afc565b73ffffffffffffffffffffffffffffffffffffffff161461130b576112cf611571565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016113029190612e75565b60405180910390fd5b565b5f6001600a5461131d91906136df565b600a81905550600a546040516020016113369190613732565b604051602081830303815290604052805190602001205f1c905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113c3575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016113ba9190612e75565b60405180910390fd5b5f806113cf8585611a96565b915091506113e05f87848487611ac6565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611458575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161144f9190612e75565b60405180910390fd5b6114655f85858585611ac6565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114db575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016114d29190612e75565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361154b575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016115429190612e75565b60405180910390fd5b5f806115578585611a96565b915091506115688787848487611ac6565b50505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036115e8575f6040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016115df9190612e75565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611658575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161164f9190612e75565b60405180910390fd5b6116658585858585611ac6565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61177a835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611b72565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117f2575f6040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016117e99190612e75565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118de9190612581565b60405180910390a3505050565b5f611910835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611bd9565b905092915050565b5f61193d835f018373ffffffffffffffffffffffffffffffffffffffff165f1b611cd5565b905092915050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106119a1577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161199757611996613685565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106119de576d04ee2d6d415b85acef810000000083816119d4576119d3613685565b5b0492506020810190505b662386f26fc100008310611a0d57662386f26fc100008381611a0357611a02613685565b5b0492506010810190505b6305f5e1008310611a36576305f5e1008381611a2c57611a2b613685565b5b0492506008810190505b6127108310611a5b576127108381611a5157611a50613685565b5b0492506004810190505b60648310611a7e5760648381611a7457611a73613685565b5b0492506002810190505b600a8310611a8d576001810190505b80915050919050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b611ad285858585611cf5565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611b6b575f611b0e611571565b90506001845103611b5a575f611b2d5f8661167f90919063ffffffff16565b90505f611b435f8661167f90919063ffffffff16565b9050611b53838989858589612085565b5050611b69565b611b68818787878787612234565b5b505b5050505050565b5f611b7d8383611cd5565b611bcf57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050611bd3565b5f90505b92915050565b5f80836001015f8481526020019081526020015f205490505f8114611cca575f600182611c06919061374c565b90505f6001865f0180549050611c1c919061374c565b9050808214611c82575f865f018281548110611c3b57611c3a61329d565b5b905f5260205f200154905080875f018481548110611c5c57611c5b61329d565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f01805480611c9557611c9461377f565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611ccf565b5f9150505b92915050565b5f80836001015f8481526020019081526020015f20541415905092915050565b8051825114611d3f57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401611d36929190613542565b60405180910390fd5b5f611d48611571565b90505f5b8351811015611f44575f611d69828661167f90919063ffffffff16565b90505f611d7f838661167f90919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611ea2575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611e4e57888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401611e4594939291906137ac565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611f3757805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611f2f91906136df565b925050819055505b5050806001019050611d4c565b506001835103611fff575f611f625f8561167f90919063ffffffff16565b90505f611f785f8561167f90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611ff0929190613542565b60405180910390a4505061207e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516120759291906137ef565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561222c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016120e5959493929190613876565b6020604051808303815f875af192505050801561212057506040513d601f19601f8201168201806040525081019061211d91906138e2565b60015b6121a1573d805f811461214e576040519150601f19603f3d011682016040523d82523d5f602084013e612153565b606091505b505f81510361219957846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016121909190612e75565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461222a57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016122219190612e75565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156123db578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161229495949392919061390d565b6020604051808303815f875af19250505080156122cf57506040513d601f19601f820116820180604052508101906122cc91906138e2565b60015b612350573d805f81146122fd576040519150601f19603f3d011682016040523d82523d5f602084013e612302565b606091505b505f81510361234857846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161233f9190612e75565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123d957846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016123d09190612e75565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61241d826123f4565b9050919050565b61242d81612413565b8114612437575f80fd5b50565b5f8135905061244881612424565b92915050565b5f819050919050565b6124608161244e565b811461246a575f80fd5b50565b5f8135905061247b81612457565b92915050565b5f8060408385031215612497576124966123ec565b5b5f6124a48582860161243a565b92505060206124b58582860161246d565b9150509250929050565b6124c88161244e565b82525050565b5f6020820190506124e15f8301846124bf565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61251b816124e7565b8114612525575f80fd5b50565b5f8135905061253681612512565b92915050565b5f60208284031215612551576125506123ec565b5b5f61255e84828501612528565b91505092915050565b5f8115159050919050565b61257b81612567565b82525050565b5f6020820190506125945f830184612572565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156125d15780820151818401526020810190506125b6565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6125f68261259a565b61260081856125a4565b93506126108185602086016125b4565b612619816125dc565b840191505092915050565b5f6020820190508181035f83015261263c81846125ec565b905092915050565b5f60208284031215612659576126586123ec565b5b5f6126668482850161246d565b91505092915050565b5f8060408385031215612685576126846123ec565b5b5f6126928582860161246d565b92505060206126a38582860161246d565b9150509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126e7826125dc565b810181811067ffffffffffffffff82111715612706576127056126b1565b5b80604052505050565b5f6127186123e3565b905061272482826126de565b919050565b5f67ffffffffffffffff821115612743576127426126b1565b5b602082029050602081019050919050565b5f80fd5b5f61276a61276584612729565b61270f565b9050808382526020820190506020840283018581111561278d5761278c612754565b5b835b818110156127b657806127a2888261246d565b84526020840193505060208101905061278f565b5050509392505050565b5f82601f8301126127d4576127d36126ad565b5b81356127e4848260208601612758565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561280b5761280a6126b1565b5b612814826125dc565b9050602081019050919050565b828183375f83830152505050565b5f61284161283c846127f1565b61270f565b90508281526020810184848401111561285d5761285c6127ed565b5b612868848285612821565b509392505050565b5f82601f830112612884576128836126ad565b5b813561289484826020860161282f565b91505092915050565b5f805f80608085870312156128b5576128b46123ec565b5b5f6128c28782880161243a565b945050602085013567ffffffffffffffff8111156128e3576128e26123f0565b5b6128ef878288016127c0565b935050604085013567ffffffffffffffff8111156129105761290f6123f0565b5b61291c878288016127c0565b925050606085013567ffffffffffffffff81111561293d5761293c6123f0565b5b61294987828801612870565b91505092959194509250565b5f67ffffffffffffffff82111561296f5761296e6126b1565b5b602082029050602081019050919050565b5f61299261298d84612955565b61270f565b905080838252602082019050602084028301858111156129b5576129b4612754565b5b835b818110156129de57806129ca888261243a565b8452602084019350506020810190506129b7565b5050509392505050565b5f82601f8301126129fc576129fb6126ad565b5b8135612a0c848260208601612980565b91505092915050565b5f805f8060808587031215612a2d57612a2c6123ec565b5b5f85013567ffffffffffffffff811115612a4a57612a496123f0565b5b612a56878288016129e8565b945050602085013567ffffffffffffffff811115612a7757612a766123f0565b5b612a83878288016127c0565b935050604085013567ffffffffffffffff811115612aa457612aa36123f0565b5b612ab0878288016127c0565b925050606085013567ffffffffffffffff811115612ad157612ad06123f0565b5b612add87828801612870565b91505092959194509250565b5f805f805f60a08688031215612b0257612b016123ec565b5b5f612b0f8882890161243a565b9550506020612b208882890161243a565b945050604086013567ffffffffffffffff811115612b4157612b406123f0565b5b612b4d888289016127c0565b935050606086013567ffffffffffffffff811115612b6e57612b6d6123f0565b5b612b7a888289016127c0565b925050608086013567ffffffffffffffff811115612b9b57612b9a6123f0565b5b612ba788828901612870565b9150509295509295909350565b5f67ffffffffffffffff821115612bce57612bcd6126b1565b5b612bd7826125dc565b9050602081019050919050565b5f612bf6612bf184612bb4565b61270f565b905082815260208101848484011115612c1257612c116127ed565b5b612c1d848285612821565b509392505050565b5f82601f830112612c3957612c386126ad565b5b8135612c49848260208601612be4565b91505092915050565b5f60208284031215612c6757612c666123ec565b5b5f82013567ffffffffffffffff811115612c8457612c836123f0565b5b612c9084828501612c25565b91505092915050565b5f8060408385031215612caf57612cae6123ec565b5b5f83013567ffffffffffffffff811115612ccc57612ccb6123f0565b5b612cd8858286016129e8565b925050602083013567ffffffffffffffff811115612cf957612cf86123f0565b5b612d05858286016127c0565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d418161244e565b82525050565b5f612d528383612d38565b60208301905092915050565b5f602082019050919050565b5f612d7482612d0f565b612d7e8185612d19565b9350612d8983612d29565b805f5b83811015612db9578151612da08882612d47565b9750612dab83612d5e565b925050600181019050612d8c565b5085935050505092915050565b5f6020820190508181035f830152612dde8184612d6a565b905092915050565b5f805f8060808587031215612dfe57612dfd6123ec565b5b5f612e0b8782880161243a565b9450506020612e1c8782880161246d565b9350506040612e2d8782880161246d565b925050606085013567ffffffffffffffff811115612e4e57612e4d6123f0565b5b612e5a87828801612870565b91505092959194509250565b612e6f81612413565b82525050565b5f602082019050612e885f830184612e66565b92915050565b5f60208284031215612ea357612ea26123ec565b5b5f612eb08482850161243a565b91505092915050565b612ec281612567565b8114612ecc575f80fd5b50565b5f81359050612edd81612eb9565b92915050565b5f8060408385031215612ef957612ef86123ec565b5b5f612f068582860161243a565b9250506020612f1785828601612ecf565b9150509250929050565b5f8060408385031215612f3757612f366123ec565b5b5f612f448582860161243a565b9250506020612f558582860161243a565b9150509250929050565b5f805f805f60a08688031215612f7857612f776123ec565b5b5f612f858882890161243a565b9550506020612f968882890161243a565b9450506040612fa78882890161246d565b9350506060612fb88882890161246d565b925050608086013567ffffffffffffffff811115612fd957612fd86123f0565b5b612fe588828901612870565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061303657607f821691505b60208210810361304957613048612ff2565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f81546130778161301f565b613081818661304f565b9450600182165f811461309b57600181146130b0576130e2565b60ff19831686528115158202860193506130e2565b6130b985613059565b5f5b838110156130da578154818901526001820191506020810190506130bb565b838801955050505b50505092915050565b5f6130f58261259a565b6130ff818561304f565b935061310f8185602086016125b4565b80840191505092915050565b5f613126828561306b565b915061313282846130eb565b91508190509392505050565b7f455243313135353a20616d6f756e74206d7573742062652067726561746572205f8201527f7468616e20300000000000000000000000000000000000000000000000000000602082015250565b5f6131986026836125a4565b91506131a38261313e565b604082019050919050565b5f6020820190508181035f8301526131c58161318c565b9050919050565b5f819050919050565b5f819050919050565b5f6131f86131f36131ee846131cc565b6131d5565b61244e565b9050919050565b613208816131de565b82525050565b5f6040820190506132215f8301856124bf565b61322e60208301846131ff565b9392505050565b7f455243313135353a20496e76616c696420696e707574206c656e6774687300005f82015250565b5f613269601e836125a4565b915061327482613235565b602082019050919050565b5f6020820190508181035f8301526132968161325d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506132dd5f830185612e66565b6132ea6020830184612e66565b9392505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261333b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613300565b6133458683613300565b95508019841693508086168417925050509392505050565b5f61337761337261336d8461244e565b6131d5565b61244e565b9050919050565b5f819050919050565b6133908361335d565b6133a461339c8261337e565b84845461330c565b825550505050565b5f90565b6133b86133ac565b6133c3818484613387565b505050565b5b818110156133e6576133db5f826133b0565b6001810190506133c9565b5050565b601f82111561342b576133fc81613059565b613405846132f1565b81016020851015613414578190505b613428613420856132f1565b8301826133c8565b50505b505050565b5f82821c905092915050565b5f61344b5f1984600802613430565b1980831691505092915050565b5f613463838361343c565b9150826002028217905092915050565b61347c8261259a565b67ffffffffffffffff811115613495576134946126b1565b5b61349f825461301f565b6134aa8282856133ea565b5f60209050601f8311600181146134db575f84156134c9578287015190505b6134d38582613458565b86555061353a565b601f1984166134e986613059565b5f5b82811015613510578489015182556001820191506020850194506020810190506134eb565b8683101561352d5784890151613529601f89168261343c565b8355505b6001600288020188555050505b505050505050565b5f6040820190506135555f8301856124bf565b61356260208301846124bf565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e65722c2061705f8201527f70726f7665642c206e6f72206f70657261746f72000000000000000000000000602082015250565b5f6135c36034836125a4565b91506135ce82613569565b604082019050919050565b5f6020820190508181035f8301526135f0816135b7565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f5f8201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b5f613651602a836125a4565b915061365c826135f7565b604082019050919050565b5f6020820190508181035f83015261367e81613645565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6136e98261244e565b91506136f48361244e565b925082820190508082111561370c5761370b6136b2565b5b92915050565b5f819050919050565b61372c6137278261244e565b613712565b82525050565b5f61373d828461371b565b60208201915081905092915050565b5f6137568261244e565b91506137618361244e565b9250828203905081811115613779576137786136b2565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f6080820190506137bf5f830187612e66565b6137cc60208301866124bf565b6137d960408301856124bf565b6137e660608301846124bf565b95945050505050565b5f6040820190508181035f8301526138078185612d6a565b9050818103602083015261381b8184612d6a565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61384882613824565b613852818561382e565b93506138628185602086016125b4565b61386b816125dc565b840191505092915050565b5f60a0820190506138895f830188612e66565b6138966020830187612e66565b6138a360408301866124bf565b6138b060608301856124bf565b81810360808301526138c2818461383e565b90509695505050505050565b5f815190506138dc81612512565b92915050565b5f602082840312156138f7576138f66123ec565b5b5f613904848285016138ce565b91505092915050565b5f60a0820190506139205f830188612e66565b61392d6020830187612e66565b818103604083015261393f8186612d6a565b905081810360608301526139538185612d6a565b90508181036080830152613967818461383e565b9050969550505050505056fea2646970667358221220df6cf21771624522309a1828983d536860a4cbb45734a30fd88cdcc47dff497164736f6c63430008160033697066733a2f2f626166797265696335356e7a6476757168786871696f616a6d323735687837357861743672746670653364706e3779637a686b736f346f6e7a34692f6d657461646174612e6a736f6e000000000000000000000000b7c7a37724cf8c225d7d5e5b79ac7b86fcea8f82