60a06040526040518060e0016040528060b08152602001620054dc60b09139600990816200002e9190620005bf565b503480156200003b575f80fd5b506040516200558c3803806200558c833981810160405281019062000061919062000708565b8033805f6040518060400160405280600481526020017f4c616e64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4c4e440000000000000000000000000000000000000000000000000000000000815250815f9081620000e19190620005bf565b508060019081620000f39190620005bf565b5050505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000167576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015e9062000796565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620001ed57620001ec816200022c60201b60201c565b5b5050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000824565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200029d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002949062000804565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003d757607f821691505b602082108103620003ed57620003ec62000392565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000414565b6200045d868362000414565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004a7620004a16200049b8462000475565b6200047e565b62000475565b9050919050565b5f819050919050565b620004c28362000487565b620004da620004d182620004ae565b84845462000420565b825550505050565b5f90565b620004f0620004e2565b620004fd818484620004b7565b505050565b5b818110156200052457620005185f82620004e6565b60018101905062000503565b5050565b601f82111562000573576200053d81620003f3565b620005488462000405565b8101602085101562000558578190505b62000570620005678562000405565b83018262000502565b50505b505050565b5f82821c905092915050565b5f620005955f198460080262000578565b1980831691505092915050565b5f620005af838362000584565b9150826002028217905092915050565b620005ca826200035b565b67ffffffffffffffff811115620005e657620005e562000365565b5b620005f28254620003bf565b620005ff82828562000528565b5f60209050601f83116001811462000635575f841562000620578287015190505b6200062c8582620005a2565b8655506200069b565b601f1984166200064586620003f3565b5f5b828110156200066e5784890151825560018201915060208501945060208101905062000647565b868310156200068e57848901516200068a601f89168262000584565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620006d282620006a7565b9050919050565b620006e481620006c6565b8114620006ef575f80fd5b50565b5f815190506200070281620006d9565b92915050565b5f6020828403121562000720576200071f620006a3565b5b5f6200072f84828501620006f2565b91505092915050565b5f82825260208201905092915050565b7f43616e6e6f7420736574206f776e657220746f207a65726f00000000000000005f82015250565b5f6200077e60188362000738565b91506200078b8262000748565b602082019050919050565b5f6020820190508181035f830152620007af8162000770565b9050919050565b7f43616e6e6f74207472616e7366657220746f2073656c660000000000000000005f82015250565b5f620007ec60178362000738565b9150620007f982620007b6565b602082019050919050565b5f6020820190508181035f8301526200081d81620007de565b9050919050565b608051614c98620008445f395f818161064f0152611e830152614c985ff3fe608060405234801561000f575f80fd5b506004361061018c575f3560e01c806379ba5097116100dc578063c623674f11610095578063d40d17bc1161006f578063d40d17bc14610495578063e985e9c5146104b1578063f2fde38b146104e1578063fe0cb7dc146104fd5761018c565b8063c623674f14610414578063c87b56dd14610432578063d074b04a146104625761018c565b806379ba5097146103785780638da5cb5b1461038257806395d89b41146103a0578063a22cb465146103be578063a6ac704e146103da578063b88d4fde146103f85761018c565b806323b872dd116101495780634cc82215116101235780634cc82215146102cc5780635a09007b146102e85780636352211e1461031857806370a08231146103485761018c565b806323b872dd146102765780633bc5de301461029257806342842e0e146102b05761018c565b806301ffc9a71461019057806306fdde03146101c0578063081812fc146101de578063095ea7b31461020e5780630ca761751461022a5780632378502714610246575b5f80fd5b6101aa60048036038101906101a5919061364d565b61052d565b6040516101b79190613692565b60405180910390f35b6101c861058d565b6040516101d59190613735565b60405180910390f35b6101f860048036038101906101f39190613788565b61061c565b60405161020591906137f2565b60405180910390f35b61022860048036038101906102239190613835565b610637565b005b610244600480360381019061023f91906139d2565b61064d565b005b610260600480360381019061025b9190613ad0565b61070f565b60405161026d9190613b2f565b60405180910390f35b610290600480360381019061028b9190613b48565b6107f1565b005b61029a6108f0565b6040516102a79190613735565b60405180910390f35b6102ca60048036038101906102c59190613b48565b61097c565b005b6102e660048036038101906102e19190613788565b61099b565b005b61030260048036038101906102fd9190613c36565b610a5b565b60405161030f9190613d48565b60405180910390f35b610332600480360381019061032d9190613788565b610bcc565b60405161033f91906137f2565b60405180910390f35b610362600480360381019061035d9190613d61565b610bdd565b60405161036f9190613d48565b60405180910390f35b610380610c93565b005b61038a610e24565b60405161039791906137f2565b60405180910390f35b6103a8610e4c565b6040516103b59190613735565b60405180910390f35b6103d860048036038101906103d39190613db6565b610edc565b005b6103e2610ef2565b6040516103ef9190613f74565b60405180910390f35b610412600480360381019061040d9190613f94565b611152565b005b61041c61116f565b6040516104299190613735565b60405180910390f35b61044c60048036038101906104479190613788565b6111fb565b6040516104599190613735565b60405180910390f35b61047c60048036038101906104779190613788565b611306565b60405161048c9493929190614014565b60405180910390f35b6104af60048036038101906104aa9190613d61565b6114f2565b005b6104cb60048036038101906104c6919061406c565b61153d565b6040516104d89190613692565b60405180910390f35b6104fb60048036038101906104f69190613d61565b6115cb565b005b61051760048036038101906105129190613788565b6115df565b6040516105249190614118565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058657506105858261181d565b5b9050919050565b60605f805461059b90614165565b80601f01602080910402602001604051908101604052809291908181526020018280546105c790614165565b80156106125780601f106105e957610100808354040283529160200191610612565b820191905f5260205f20905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b5f610626826118fe565b5061063082611984565b9050919050565b61064982826106446119bd565b6119c4565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106d2576040517fc6829f8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106dd8383836119d6565b827f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e660405160405180910390a2505050565b5f6107186134ab565b61079a3073ffffffffffffffffffffffffffffffffffffffff16633bc5de306040518163ffffffff1660e01b81526004015f60405180830381865afa158015610763573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061078b9190614203565b82611a6a90919063ffffffff16565b6107ae6107a682611a7a565b868686611e7f565b91507f24a5d69f0e061297f5ad1cfb60d3bcfbde0095cd44739922aec5a683544ecb3b42836040516107e192919061424a565b60405180910390a1509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610861575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161085891906137f2565b60405180910390fd5b5f610874838361086f6119bd565b611f5e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108ea578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016108e193929190614271565b60405180910390fd5b50505050565b600980546108fd90614165565b80601f016020809104026020016040519081016040528092919081815260200182805461092990614165565b80156109745780601f1061094b57610100808354040283529160200191610974565b820191905f5260205f20905b81548152906001019060200180831161095757829003601f168201915b505050505081565b61099683838360405180602001604052805f815250611152565b505050565b6109a3612169565b6109ac816121fa565b600c81815481106109c0576109bf6142a6565b5b905f5260205f2090600402015f8082015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f610a01919061351a565b600282015f610a10919061351a565b600382015f610a1f919061351a565b50507fda823045d73fd00466a03f71fcdedec54c8f2a70f3e1a6271f6f19b3d1e58d7581604051610a509190613d48565b60405180910390a150565b5f80610a67600a61227c565b9050610a733382612288565b610a7d818861237b565b600c60405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200185815250908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081610b359190614470565b506040820151816002019081610b4b9190614470565b506060820151816003019081610b619190614470565b505050803373ffffffffffffffffffffffffffffffffffffffff167f0ebd0c547e55e6c673bf2fbf3ec9327af567ebcc120ce1faa5f02ca5a83282e98989604051610bad92919061453f565b60405180910390a3610bbf600a6123d5565b8091505095945050505050565b5f610bd6826118fe565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c4e575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610c4591906137f2565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d19906145be565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e5b90614165565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8790614165565b8015610ed25780601f10610ea957610100808354040283529160200191610ed2565b820191905f5260205f20905b815481529060010190602001808311610eb557829003601f168201915b5050505050905090565b610eee610ee76119bd565b83836123e9565b5050565b6060600c805480602002602001604051908101604052809291908181526020015f905b82821015611149578382905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610f9a90614165565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc690614165565b80156110115780601f10610fe857610100808354040283529160200191611011565b820191905f5260205f20905b815481529060010190602001808311610ff457829003601f168201915b5050505050815260200160028201805461102a90614165565b80601f016020809104026020016040519081016040528092919081815260200182805461105690614165565b80156110a15780601f10611078576101008083540402835291602001916110a1565b820191905f5260205f20905b81548152906001019060200180831161108457829003601f168201915b505050505081526020016003820180546110ba90614165565b80601f01602080910402602001604051908101604052809291908181526020018280546110e690614165565b80156111315780601f1061110857610100808354040283529160200191611131565b820191905f5260205f20905b81548152906001019060200180831161111457829003601f168201915b50505050508152505081526020019060010190610f15565b50505050905090565b61115d8484846107f1565b61116984848484612552565b50505050565b600d805461117c90614165565b80601f01602080910402602001604051908101604052809291908181526020018280546111a890614165565b80156111f35780601f106111ca576101008083540402835291602001916111f3565b820191905f5260205f20905b8154815290600101906020018083116111d657829003601f168201915b505050505081565b6060611206826118fe565b505f60065f8481526020019081526020015f20805461122490614165565b80601f016020809104026020016040519081016040528092919081815260200182805461125090614165565b801561129b5780601f106112725761010080835404028352916020019161129b565b820191905f5260205f20905b81548152906001019060200180831161127e57829003601f168201915b505050505090505f6112ab612704565b90505f8151036112bf578192505050611301565b5f825111156112f35780826040516020016112db929190614616565b60405160208183030381529060405292505050611301565b6112fc8461271a565b925050505b919050565b600c8181548110611315575f80fd5b905f5260205f2090600402015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461135990614165565b80601f016020809104026020016040519081016040528092919081815260200182805461138590614165565b80156113d05780601f106113a7576101008083540402835291602001916113d0565b820191905f5260205f20905b8154815290600101906020018083116113b357829003601f168201915b5050505050908060020180546113e590614165565b80601f016020809104026020016040519081016040528092919081815260200182805461141190614165565b801561145c5780601f106114335761010080835404028352916020019161145c565b820191905f5260205f20905b81548152906001019060200180831161143f57829003601f168201915b50505050509080600301805461147190614165565b80601f016020809104026020016040519081016040528092919081815260200182805461149d90614165565b80156114e85780601f106114bf576101008083540402835291602001916114e8565b820191905f5260205f20905b8154815290600101906020018083116114cb57829003601f168201915b5050505050905084565b6114fa612169565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6115d3612169565b6115dc81612780565b50565b6115e7613557565b600c82815481106115fb576115fa6142a6565b5b905f5260205f2090600402016040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461167690614165565b80601f01602080910402602001604051908101604052809291908181526020018280546116a290614165565b80156116ed5780601f106116c4576101008083540402835291602001916116ed565b820191905f5260205f20905b8154815290600101906020018083116116d057829003601f168201915b5050505050815260200160028201805461170690614165565b80601f016020809104026020016040519081016040528092919081815260200182805461173290614165565b801561177d5780601f106117545761010080835404028352916020019161177d565b820191905f5260205f20905b81548152906001019060200180831161176057829003601f168201915b5050505050815260200160038201805461179690614165565b80601f01602080910402602001604051908101604052809291908181526020018280546117c290614165565b801561180d5780601f106117e45761010080835404028352916020019161180d565b820191905f5260205f20905b8154815290600101906020018083116117f057829003601f168201915b5050505050815250509050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118f757506118f6826128ac565b5b9050919050565b5f8061190983612915565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361197b57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016119729190613d48565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6119d1838383600161294e565b505050565b5f815114611a1b57806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a129190613735565b60405180910390fd5b81600d9081611a2a9190614470565b507f38944c35fa87deb6b9e51ddf2077c0341c4fe34dbbdf0098f3f9d7603e7eb511600d42604051611a5d9291906146ba565b60405180910390a1505050565b611a76825f8084612b0d565b5050565b60605f611a88610100612bb3565b9050611ad26040518060400160405280600c81526020017f636f64654c6f636174696f6e000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611afa835f01516002811115611aeb57611aea6146e8565b5b82612c0090919063ffffffff16565b611b426040518060400160405280600881526020017f6c616e677561676500000000000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611b6a83604001515f811115611b5b57611b5a6146e8565b5b82612c0090919063ffffffff16565b611bb26040518060400160405280600681526020017f736f75726365000000000000000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611bc9836060015182612bd890919063ffffffff16565b5f8360a00151511115611c7d57611c1e6040518060400160405280600481526020017f617267730000000000000000000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611c2781612c4f565b5f5b8360a0015151811015611c7257611c678460a001518281518110611c5057611c4f6142a6565b5b602002602001015183612bd890919063ffffffff16565b806001019050611c29565b50611c7c81612c77565b5b5f8360800151511115611dbc575f6002811115611c9d57611c9c6146e8565b5b83602001516002811115611cb457611cb36146e8565b5b03611ceb576040517fa80d31f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d336040518060400160405280600f81526020017f736563726574734c6f636174696f6e000000000000000000000000000000000081525082612bd890919063ffffffff16565b611d5c83602001516002811115611d4d57611d4c6146e8565b5b82612c0090919063ffffffff16565b611da46040518060400160405280600781526020017f736563726574730000000000000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611dbb836080015182612c9f90919063ffffffff16565b5b5f8360c00151511115611e7057611e116040518060400160405280600981526020017f627974657341726773000000000000000000000000000000000000000000000081525082612bd890919063ffffffff16565b611e1a81612c4f565b5f5b8360c0015151811015611e6557611e5a8460c001518281518110611e4357611e426142a6565b5b602002602001015183612c9f90919063ffffffff16565b806001019050611e1c565b50611e6f81612c77565b5b805f01515f0151915050919050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663461d27628688600188886040518663ffffffff1660e01b8152600401611ee39594939291906147a1565b6020604051808303815f875af1158015611eff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f23919061480d565b9050807f1131472297a800fee664d1d89cfa8f7676ff07189ecc53f80bbb5f4969099db860405160405180910390a280915050949350505050565b5f80611f6984612915565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611faa57611fa9818486612cc7565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461203557611fe95f855f8061294e565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120b457600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90614882565b60405180910390fd5b565b5f6122065f835f611f5e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361227857816040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161226f9190613d48565b60405180910390fd5b5050565b5f815f01549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122f8575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016122ef91906137f2565b60405180910390fd5b5f61230483835f611f5e565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612376575f6040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161236d91906137f2565b60405180910390fd5b505050565b8060065f8481526020019081526020015f2090816123999190614470565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516123c99190613d48565b60405180910390a15050565b6001815f015f828254019250508190555050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361245957816040517f5b08ba1800000000000000000000000000000000000000000000000000000000815260040161245091906137f2565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125459190613692565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156126fe578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026125956119bd565b8685856040518563ffffffff1660e01b81526004016125b794939291906148a0565b6020604051808303815f875af19250505080156125f257506040513d601f19601f820116820180604052508101906125ef91906148fe565b60015b612673573d805f8114612620576040519150601f19603f3d011682016040523d82523d5f602084013e612625565b606091505b505f81510361266b57836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161266291906137f2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126fc57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016126f391906137f2565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b6060612725826118fe565b505f61272f612704565b90505f81511161274d5760405180602001604052805f815250612778565b8061275784612d8a565b604051602001612768929190614616565b6040516020818303038152906040525b915050919050565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590614973565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061298657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ab8575f612995846118fe565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129ff57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612a125750612a10818461153d565b155b15612a5457826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401612a4b91906137f2565b60405180910390fd5b8115612ab657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f815103612b47576040517f22ce3edd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82845f01906002811115612b5e57612b5d6146e8565b5b90816002811115612b7257612b716146e8565b5b815250508184604001905f811115612b8d57612b8c6146e8565b5b90815f811115612ba057612b9f6146e8565b5b8152505080846060018190525050505050565b612bbb613594565b612bc8815f015183612e54565b505f816020018181525050919050565b612be58260038351612eca565b612bfb81835f015161306a90919063ffffffff16565b505050565b612c2160026005600660ff16901b17835f015161308690919063ffffffff16565b50612c4b8282604051602001612c379190613d48565b604051602081830303815290604052612c9f565b5050565b612c5a8160046130ed565b600181602001818151612c6d91906149be565b9150818152505050565b612c828160076130ed565b600181602001818151612c9591906149f1565b9150818152505050565b612cac8260028351612eca565b612cc281835f015161306a90919063ffffffff16565b505050565b612cd2838383613112565b612d85575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d4657806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612d3d9190613d48565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612d7c929190614a24565b60405180910390fd5b505050565b60605f6001612d98846131d2565b0190505f8167ffffffffffffffff811115612db657612db56138ae565b5b6040519080825280601f01601f191660200182016040528015612de85781602001600182028036833780820191505090505b5090505f82602001820190505b600115612e49578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612e3e57612e3d614a4b565b5b0494505f8503612df5575b819350505050919050565b612e5c6135b3565b5f602083612e6a9190614a78565b14612e9657602082612e7c9190614a78565b6020612e8891906149f1565b82612e9391906149be565b91505b818360200181815250506040518084525f815282810160200181811015612ebb575f80fd5b80604052505082905092915050565b60178167ffffffffffffffff1611612f0457612efe8160058460ff16901b60ff1617845f015161308690919063ffffffff16565b50613065565b60ff8167ffffffffffffffff1611612f6057612f36601860058460ff16901b17845f015161308690919063ffffffff16565b50612f5a8167ffffffffffffffff166001855f01516133239092919063ffffffff16565b50613064565b61ffff8167ffffffffffffffff1611612fbd57612f93601960058460ff16901b17845f015161308690919063ffffffff16565b50612fb78167ffffffffffffffff166002855f01516133239092919063ffffffff16565b50613063565b63ffffffff8167ffffffffffffffff161161301c57612ff2601a60058460ff16901b17845f015161308690919063ffffffff16565b506130168167ffffffffffffffff166004855f01516133239092919063ffffffff16565b50613062565b61303c601b60058460ff16901b17845f015161308690919063ffffffff16565b506130608167ffffffffffffffff166008855f01516133239092919063ffffffff16565b505b5b5b5b505050565b6130726135b3565b61307e838384516133ac565b905092915050565b61308e6135b3565b5f835f01515190505f6001826130a491906149be565b9050846020015182106130c8576130c7856002836130c29190614aa8565b613489565b5b845160208382010185815381518311156130e0578282525b5050849250505092915050565b61310d601f60058360ff16901b17835f015161308690919063ffffffff16565b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131c957508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061318a5750613189848461153d565b5b806131c857508273ffffffffffffffffffffffffffffffffffffffff166131b083611984565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061322e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161322457613223614a4b565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061326b576d04ee2d6d415b85acef8100000000838161326157613260614a4b565b5b0492506020810190505b662386f26fc10000831061329a57662386f26fc1000083816132905761328f614a4b565b5b0492506010810190505b6305f5e10083106132c3576305f5e10083816132b9576132b8614a4b565b5b0492506008810190505b61271083106132e85761271083816132de576132dd614a4b565b5b0492506004810190505b6064831061330b576064838161330157613300614a4b565b5b0492506002810190505b600a831061331a576001810190505b80915050919050565b61332b6135b3565b5f845f01515190505f818461334091906149be565b90508560200151811115613365576133648660028361335f9190614aa8565b613489565b5b5f6001856101006133769190614c18565b61338091906149f1565b90508651828101878319825116178152815184111561339d578382525b50508693505050509392505050565b6133b46135b3565b82518211156133c1575f80fd5b5f845f01515190505f83826133d691906149be565b905085602001518111156133fb576133fa866002836133f59190614aa8565b613489565b5b5f8087518051856020830101935080851115613415578482525b60208901925050505b6020861061345c578051825260208261343791906149be565b915060208161344691906149be565b905060208661345591906149f1565b955061341e565b5f6001876020036101000a0390508019825116818451168181178552505050879450505050509392505050565b5f825f0151905061349a8383612e54565b506134a5838261306a565b50505050565b6040518060e001604052805f60028111156134c9576134c86146e8565b5b81526020015f60028111156134e1576134e06146e8565b5b81526020015f808111156134f8576134f76146e8565b5b8152602001606081526020016060815260200160608152602001606081525090565b50805461352690614165565b5f825580601f106135375750613554565b601f0160209004905f5260205f209081019061355391906135cc565b5b50565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001606081525090565b60405180604001604052806135a76135b3565b81526020015f81525090565b6040518060400160405280606081526020015f81525090565b5b808211156135e3575f815f9055506001016135cd565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61362c816135f8565b8114613636575f80fd5b50565b5f8135905061364781613623565b92915050565b5f60208284031215613662576136616135f0565b5b5f61366f84828501613639565b91505092915050565b5f8115159050919050565b61368c81613678565b82525050565b5f6020820190506136a55f830184613683565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156136e25780820151818401526020810190506136c7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613707826136ab565b61371181856136b5565b93506137218185602086016136c5565b61372a816136ed565b840191505092915050565b5f6020820190508181035f83015261374d81846136fd565b905092915050565b5f819050919050565b61376781613755565b8114613771575f80fd5b50565b5f813590506137828161375e565b92915050565b5f6020828403121561379d5761379c6135f0565b5b5f6137aa84828501613774565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137dc826137b3565b9050919050565b6137ec816137d2565b82525050565b5f6020820190506138055f8301846137e3565b92915050565b613814816137d2565b811461381e575f80fd5b50565b5f8135905061382f8161380b565b92915050565b5f806040838503121561384b5761384a6135f0565b5b5f61385885828601613821565b925050602061386985828601613774565b9150509250929050565b5f819050919050565b61388581613873565b811461388f575f80fd5b50565b5f813590506138a08161387c565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138e4826136ed565b810181811067ffffffffffffffff82111715613903576139026138ae565b5b80604052505050565b5f6139156135e7565b905061392182826138db565b919050565b5f67ffffffffffffffff8211156139405761393f6138ae565b5b613949826136ed565b9050602081019050919050565b828183375f83830152505050565b5f61397661397184613926565b61390c565b905082815260208101848484011115613992576139916138aa565b5b61399d848285613956565b509392505050565b5f82601f8301126139b9576139b86138a6565b5b81356139c9848260208601613964565b91505092915050565b5f805f606084860312156139e9576139e86135f0565b5b5f6139f686828701613892565b935050602084013567ffffffffffffffff811115613a1757613a166135f4565b5b613a23868287016139a5565b925050604084013567ffffffffffffffff811115613a4457613a436135f4565b5b613a50868287016139a5565b9150509250925092565b5f67ffffffffffffffff82169050919050565b613a7681613a5a565b8114613a80575f80fd5b50565b5f81359050613a9181613a6d565b92915050565b5f63ffffffff82169050919050565b613aaf81613a97565b8114613ab9575f80fd5b50565b5f81359050613aca81613aa6565b92915050565b5f805f60608486031215613ae757613ae66135f0565b5b5f613af486828701613a83565b9350506020613b0586828701613abc565b9250506040613b1686828701613892565b9150509250925092565b613b2981613873565b82525050565b5f602082019050613b425f830184613b20565b92915050565b5f805f60608486031215613b5f57613b5e6135f0565b5b5f613b6c86828701613821565b9350506020613b7d86828701613821565b9250506040613b8e86828701613774565b9150509250925092565b5f67ffffffffffffffff821115613bb257613bb16138ae565b5b613bbb826136ed565b9050602081019050919050565b5f613bda613bd584613b98565b61390c565b905082815260208101848484011115613bf657613bf56138aa565b5b613c01848285613956565b509392505050565b5f82601f830112613c1d57613c1c6138a6565b5b8135613c2d848260208601613bc8565b91505092915050565b5f805f805f60a08688031215613c4f57613c4e6135f0565b5b5f86013567ffffffffffffffff811115613c6c57613c6b6135f4565b5b613c7888828901613c09565b955050602086013567ffffffffffffffff811115613c9957613c986135f4565b5b613ca588828901613c09565b945050604086013567ffffffffffffffff811115613cc657613cc56135f4565b5b613cd288828901613c09565b935050606086013567ffffffffffffffff811115613cf357613cf26135f4565b5b613cff88828901613c09565b925050608086013567ffffffffffffffff811115613d2057613d1f6135f4565b5b613d2c88828901613c09565b9150509295509295909350565b613d4281613755565b82525050565b5f602082019050613d5b5f830184613d39565b92915050565b5f60208284031215613d7657613d756135f0565b5b5f613d8384828501613821565b91505092915050565b613d9581613678565b8114613d9f575f80fd5b50565b5f81359050613db081613d8c565b92915050565b5f8060408385031215613dcc57613dcb6135f0565b5b5f613dd985828601613821565b9250506020613dea85828601613da2565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613e26816137d2565b82525050565b5f82825260208201905092915050565b5f613e46826136ab565b613e508185613e2c565b9350613e608185602086016136c5565b613e69816136ed565b840191505092915050565b5f608083015f830151613e895f860182613e1d565b5060208301518482036020860152613ea18282613e3c565b91505060408301518482036040860152613ebb8282613e3c565b91505060608301518482036060860152613ed58282613e3c565b9150508091505092915050565b5f613eed8383613e74565b905092915050565b5f602082019050919050565b5f613f0b82613df4565b613f158185613dfe565b935083602082028501613f2785613e0e565b805f5b85811015613f625784840389528151613f438582613ee2565b9450613f4e83613ef5565b925060208a01995050600181019050613f2a565b50829750879550505050505092915050565b5f6020820190508181035f830152613f8c8184613f01565b905092915050565b5f805f8060808587031215613fac57613fab6135f0565b5b5f613fb987828801613821565b9450506020613fca87828801613821565b9350506040613fdb87828801613774565b925050606085013567ffffffffffffffff811115613ffc57613ffb6135f4565b5b614008878288016139a5565b91505092959194509250565b5f6080820190506140275f8301876137e3565b818103602083015261403981866136fd565b9050818103604083015261404d81856136fd565b9050818103606083015261406181846136fd565b905095945050505050565b5f8060408385031215614082576140816135f0565b5b5f61408f85828601613821565b92505060206140a085828601613821565b9150509250929050565b5f608083015f8301516140bf5f860182613e1d565b50602083015184820360208601526140d78282613e3c565b915050604083015184820360408601526140f18282613e3c565b9150506060830151848203606086015261410b8282613e3c565b9150508091505092915050565b5f6020820190508181035f83015261413081846140aa565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061417c57607f821691505b60208210810361418f5761418e614138565b5b50919050565b5f6141a76141a284613b98565b61390c565b9050828152602081018484840111156141c3576141c26138aa565b5b6141ce8482856136c5565b509392505050565b5f82601f8301126141ea576141e96138a6565b5b81516141fa848260208601614195565b91505092915050565b5f60208284031215614218576142176135f0565b5b5f82015167ffffffffffffffff811115614235576142346135f4565b5b614241848285016141d6565b91505092915050565b5f60408201905061425d5f830185613d39565b61426a6020830184613b20565b9392505050565b5f6060820190506142845f8301866137e3565b6142916020830185613d39565b61429e60408301846137e3565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261432f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826142f4565b61433986836142f4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61437461436f61436a84613755565b614351565b613755565b9050919050565b5f819050919050565b61438d8361435a565b6143a16143998261437b565b848454614300565b825550505050565b5f90565b6143b56143a9565b6143c0818484614384565b505050565b5b818110156143e3576143d85f826143ad565b6001810190506143c6565b5050565b601f821115614428576143f9816142d3565b614402846142e5565b81016020851015614411578190505b61442561441d856142e5565b8301826143c5565b50505b505050565b5f82821c905092915050565b5f6144485f198460080261442d565b1980831691505092915050565b5f6144608383614439565b9150826002028217905092915050565b614479826136ab565b67ffffffffffffffff811115614492576144916138ae565b5b61449c8254614165565b6144a78282856143e7565b5f60209050601f8311600181146144d8575f84156144c6578287015190505b6144d08582614455565b865550614537565b601f1984166144e6866142d3565b5f5b8281101561450d578489015182556001820191506020850194506020810190506144e8565b8683101561452a5784890151614526601f891682614439565b8355505b6001600288020188555050505b505050505050565b5f6040820190508181035f83015261455781856136fd565b9050818103602083015261456b81846136fd565b90509392505050565b7f4d7573742062652070726f706f736564206f776e6572000000000000000000005f82015250565b5f6145a86016836136b5565b91506145b382614574565b602082019050919050565b5f6020820190508181035f8301526145d58161459c565b9050919050565b5f81905092915050565b5f6145f0826136ab565b6145fa81856145dc565b935061460a8185602086016136c5565b80840191505092915050565b5f61462182856145e6565b915061462d82846145e6565b91508190509392505050565b5f815461464581614165565b61464f81866136b5565b9450600182165f8114614669576001811461467f576146b1565b60ff1983168652811515602002860193506146b1565b614688856142d3565b5f5b838110156146a95781548189015260018201915060208101905061468a565b808801955050505b50505092915050565b5f6040820190508181035f8301526146d28185614639565b90506146e16020830184613d39565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61471e81613a5a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f61474882614724565b614752818561472e565b93506147628185602086016136c5565b61476b816136ed565b840191505092915050565b5f61ffff82169050919050565b61478c81614776565b82525050565b61479b81613a97565b82525050565b5f60a0820190506147b45f830188614715565b81810360208301526147c6818761473e565b90506147d56040830186614783565b6147e26060830185614792565b6147ef6080830184613b20565b9695505050505050565b5f815190506148078161387c565b92915050565b5f60208284031215614822576148216135f0565b5b5f61482f848285016147f9565b91505092915050565b7f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000005f82015250565b5f61486c6016836136b5565b915061487782614838565b602082019050919050565b5f6020820190508181035f83015261489981614860565b9050919050565b5f6080820190506148b35f8301876137e3565b6148c060208301866137e3565b6148cd6040830185613d39565b81810360608301526148df818461473e565b905095945050505050565b5f815190506148f881613623565b92915050565b5f60208284031215614913576149126135f0565b5b5f614920848285016148ea565b91505092915050565b7f43616e6e6f74207472616e7366657220746f2073656c660000000000000000005f82015250565b5f61495d6017836136b5565b915061496882614929565b602082019050919050565b5f6020820190508181035f83015261498a81614951565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6149c882613755565b91506149d383613755565b92508282019050808211156149eb576149ea614991565b5b92915050565b5f6149fb82613755565b9150614a0683613755565b9250828203905081811115614a1e57614a1d614991565b5b92915050565b5f604082019050614a375f8301856137e3565b614a446020830184613d39565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a8282613755565b9150614a8d83613755565b925082614a9d57614a9c614a4b565b5b828206905092915050565b5f614ab282613755565b9150614abd83613755565b9250828202614acb81613755565b91508282048414831517614ae257614ae1614991565b5b5092915050565b5f8160011c9050919050565b5f808291508390505b6001851115614b3e57808604811115614b1a57614b19614991565b5b6001851615614b295780820291505b8081029050614b3785614ae9565b9450614afe565b94509492505050565b5f82614b565760019050614c11565b81614b63575f9050614c11565b8160018114614b795760028114614b8357614bb2565b6001915050614c11565b60ff841115614b9557614b94614991565b5b8360020a915084821115614bac57614bab614991565b5b50614c11565b5060208310610133831016604e8410600b8410161715614be75782820a905083811115614be257614be1614991565b5b614c11565b614bf48484846001614af5565b92509050818404811115614c0b57614c0a614991565b5b81810290505b9392505050565b5f614c2282613755565b9150614c2d83613755565b9250614c5a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614b47565b90509291505056fea264697066735822122020ecb44349539a1ded82caef8f497ef3eb6e6b0288f3c00a4611377b97288d1864736f6c63430008180033636f6e7374206765744c616e6444657461696c7346726f6d536572766572203d2061776169742046756e6374696f6e732e6d616b654874747052657175657374287b75726c3a206068747470733a2f2f61677269637969656c642e76657263656c2e6170702f6170692f6c616e64602c7d293b72657475726e2046756e6374696f6e732e656e636f6465537472696e67286765744c616e6444657461696c7346726f6d5365727665722e64617461293b000000000000000000000000f9b8fc078197181c841c296c876945aaa425b278